A valamivel újabb és normálisabb (azaz ATi vagy nVidia) videókártyákon jól megy a deferred shadinges megjelenítés, azonban régebbi, vagy kevésbé normális (Intel) kártyákon annyira nem szuperált, ezért elkezdtem azon dolgozni, hogy minél szélesebb körben futtatható legyen a program.
Bevezettem 3 renderelési módot: Deferred, Forward, Fixed function. Ezek között majd a menüben is lehet kézzel állítani, azonban vannak bizonyos kritériumok, amiknek meg kell lennie ahhoz, hogy az adott mód használható legyen.
1.: Deferred Shading:
Ahhoz, hogy lehessen Deferred Shadingünk, szinte az összes számomra szükséges extensionnek szerepelnie kell:
- VBO
- FBO
- GLSL Shader
- MRT
ha ezek bármelyikét nem támogatja az adott videókártya, akkor nem lehet deferred shadingünk.
2.: Forward Shading:
Ennek hasonlóak a feltételei, mint a Deferred Shading esetén, csupán az MRTre, azaz a Multi-RenderTargetre nincs szükség (OpenGLben annyit jelent, hogy a csatolható COLOR_ATTACHMENTek száma < 2)
3.: Fixed Function:
Ha se Shader, se FBO, se MRT nincs, akkor nincs más választásunk: Fixed Function kell renderelni. Ekkor nincs normal mapping sem, csupán maximum 8 db fény, sima diffuse shadinggel.
Itt már le van kezelve a VBOs és a VBO nélküli renderelés.
A fixed function animációról annyit, hogy nem áll rendelkezésre GPU skinning (tudtommal), hiszen nincs shaderünk, ezért a CPUn kell az animálást elvégezni. Ugyan azt csináljuk, mint a GPU esetén, annyiban más csak, hogy a VBO (már ha van) feltöltése után nem törölhetjük az adatokat (Vertexek listáját), hiszen azzal fogunk dolgozni. Sőt, még egy másolatot is kell készíteni róla, mert az eredeti vertexet akarjuk a megfelelő mátrixszal transzformálni.
Összegezve: eddig egész jól ment, de meg kell találni azért az arany középutat. Túlságosan nem akarok majd belemenni a fallbackelésbe, aki játszani akar majd, annak legyen is hozzá gépe. Vagy csak szimplán ne Intel kártyával akarjon bármit is csinálni :)
Ajánlott bejegyzések:
A bejegyzés trackback címe:
Kommentek:
A hozzászólások a vonatkozó jogszabályok értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a Felhasználási feltételekben és az adatvédelmi tájékoztatóban.