stencil buffers te komen (dat laatste lijkt me ook niet erg vaak nodig trouwens).
Het is een z/stencil (als in: depthstencil) buffer, beiden zitten samen in 1 buffer gepakt.
Het punt is vooral met het wisselen van die dingen. Als je render-to-texture doet, moet je dus andere pixelbuffer en andere z/stencilbuffer zetten.
Omdat je niet bij de impliciete buffers kunt, moet je dus andere code hebben om die buffers te zetten dan alle andere rendertargets.
Dat is gewoon dom, lelijk en omslachtig.
Verder kun je ook niet de z/stencil hergebruiken voor een andere pixelbuffer. In D3D kon dat altijd wel. Zolang de z/stencil maar groot genoeg was, werkte dat prima. Tegenwoordig vinden ze wel dat je ze allebei exact dezelfde grootte moet maken, maar het management is ook veranderd. De buffers worden nu meteen deallocated als je ze niet meer gebruikt, zodat het videogeheugen hergebruikt kan worden voor een andere buffer. Een buffer is nu dus meer een descriptor geworden dan een fysiek gealloceerde buffer.
Wat ik wel weet is dat OpenGL al eeuwen relatief goed gestandaardiseerde vendor-specifieke extensies heeft die dit soort dingen mogelijk maken
Helaas niet dus.
OpenGL loopt al heel lang enorm achter de feiten aan.
Zo heb ik een leuke Mac Mini G4 als speledingetje, met een Radeon 9200 erin.
Dat is dus een GPU die DirectX 8.1 volledig ondersteunt, en onder Direct3D absoluut geen problemen heeft met dingen als non-power-of-two textures, render-to-texture, programmeerbare pixelshaders en dat soort grappen.
Onder OS X heb ik de laatste versie geinstalleerd, dat is 10.5.8, uit 2009... maar de OpenGL driver laat me niets van dat alles gebruiken.
Als je de Halo-port draait op dat system, krijg je een lelijke shader-loze versie, die er ongeveer uitziet als op een Radeon DDR of GeForce2.
Dat terwijl je op dezelfde hardware onder Windows gewoon alle eyecandy aan kunt zetten.
maar als je bedenkt dat je eigenlijk alleen maar serieus rekening hoeft te houden met Nvidia en AMD, is het nou ook weer niet zo'n groot probleem om voor enkele dingen hardware-specifieke code paden te hebben.
Dat kan dus niet, want in het voorbeeld van m'n Radeon 9200 heb ik helemaal geen extensies voor dat soort dingen, ook niet vendor-specific.
ken daar de details niet van maar volgens mij zijn ze daar praktisch van scratch begonnen en hebben ze alle klunzige constructies uit het verleden overboord gezet en de API compleet opgeschoond met game toepassingen in het achterhoofd
Was het maar zo'n feest. De API is 'opgeschoond' door er een aantal functies uit te mikken, en een paar andere functies net even iets anders te laten werken in core mode dan in compatibility mode. Wat er eigenlijk op neerkomt dat je zonder goede reden nu twee verschillende codebases moet gaan bijhouden... OGL 4.x code is namelijk niet meer 100% backward compatible (wat nou juist 1 van de sterke punten had moeten zijn van OpenGL).
vergeet ook niet dat gcc vs. Visual Studio een behoorlijke impact kan hebben!
Zie hierboven je eigen post, waarin je uitlegt dat het vooral van de hardware afhangt, niet zozeer van de API/drivers/OS/etc. Ook compilers spelen vrijwel geen rol. Iig, niet in het soort code dat ik getest heb. Ik doe altijd zo veel mogelijk op de GPU.