Amiről a cikk beszél, az minden API-ra igaz lesz, az overhead nem egy megkerülhető fogalom. Az OpenGL-nek valóban kárára vált a visszafelé kompatibilitás, viszont fontos tudni mellé, hogy egy ideje már be van vezetve egy deprecation model, amivel fokozatosan kikopnak az API-ból a régi megoldások, tehát ezáltal szálkásodik maga az API.
Ezen felül, az OpenGL-nek van egy beágyazott rendszerekbe szánt változata, az OpenGL ES, ami eleve egy "vékonyabb" API, és amennyire én tudom, az emlegetett OpenGL-es konzolokon, hordozható eszközökön eleve ez van. Konkrétan ennek az irányába konvergál az asztali OpenGL 4 is, és a WebGL is ehhez képest került meghatározásra. Az, hogy vékonyabb az API, ott jön ki, hogy ha egy API minél kevesebb emulált funkciót kínál, annál sanszosabb, h a fejlesztő ténylegesen hardverközeli programot ír. A másik fontos szempont, hogy kisebb API-ra könnyebb "pehelysúlyú" drivert írni.
Magára a cikkre reagálva: nyilvánvalóan igaz technikailag nézve, de az nagyon erős erős csúsztatás, hogy a draw call-ok számával lehetne emelni a grafikai színvonalat. 2000-hez képest 20 000 draw call nem jelent feltétlenül jobb grafikát, pusztán rosszabb kötegelést (batching). Olyan API-t kell használni, és olyan könyvtárakat, amik nem rejtik el a programozó elől a kirajzoló utasításokat, és akkor kézben lehet tartani a kötegelést. Ez természetesen nem pusztán a renderelő szubrutinon múlik, eleve olyan modellekkel kell szolgálni, lásd modell és pályaoptimalizáció.
A D3D 10 óta ott is elmentek a lightweight irányba, de nagyon lehet látni, h még a DX 10 mód is eléggé ilyen prémium dolog a játékokban, és a D3D 9 az alap ami tuti h gyorsra meg van írva, szóval azon a fronton nagyon bátor dolog volt a kompatiblitás elhagyása, de láthatjuk is, h tetűlassú migráció lett az ára.
Egyébként az OpenGL-ről még annyit, hogy az OpenGL 3 az eredetileg nem az az API lett volna, amit ma annak ismerünk, hanem volt abból egy elég széles körben beharangozott draft, ami még a mostani "újjal" sem igen lett volna kompatibilis. Na az lett volna az az állkapocsleejtős innováció azon a fronton, ami elmaradt.
A többszálú renderelés meg egy mese. Eleve akkor lenne értelme, ha rendertargetenként lenne maximum egy szál, ami azért eléggé korlátos párhuzamosíthatóság, utána pedig jön a command buffer, ahol a driverben összeszorul az egész, és kénytelen is, hogy összeszoruljon, ugyanis
1) PCI-Express sín
2) a GPU EGY dolgot tud (hatékonyan) több példányban csinálni, pont ez a Cayman nagy újítása, hogy abban ez már a múlté, de azért még nincs mindenkinek 6900-asa otthon
Szóval jah, nagyon jó lenne a közvetlen command buffer kezelés, de pl. az OpenGL eleve streamként képzeli el a rendszert, és ott csücsül az API-ban a kezdetek óta az aszinkron glFlush() - magyarán szar batching mellett is össze lehet várni egy rakás draw call-t. Ha meg a parancssorozat kezelgetése a nehézkes, az már tisztán CPU overhead. Az sem mindegy, de driver-driver-driver...