Som rozvojových 2D herný engine, ktorý bude podporovať 3D v budúcnosti. V tejto aktuálnej fáze vývoja, pracujem na dávku renderer. Ako niektorí z vás možno vedia, keď dávkovacia grafika spolu, jednotné podporu pre farebné (RGBA), textúra súradnice, textúra ID (textúry index), a model transformácie matice ísť von oknom, ale namiesto toho prešiel vrchol buffer. Práve teraz, som zaviedli absolvovaní model pozícia, farba, textúra súradnice, a textúru ID uzla buffer. Môj vrchol buffer formát vyzerá to práve teraz:
float* v0 = {x, y, r, g, b, a, u, v, textureID};
float* v1 = {x, y, r, g, b, a, u, v, textureID};
float* v2 = {x, y, r, g, b, a, u, v, textureID};
float* v3 = {x, y, r, g, b, a, u, v, textureID};
Ja som o integrovať výpočtu, kde sa objekt by mal byť v svete miesta pomocou transformation matrix. To ma vedie k položiť otázku:
By transformation matrix sa vynásobí model vertex pozície na CPU alebo GPU?
Niečo mať na pamäti, je, že ak by som prejsť na vrchole buffer, ja by som nahrať transformation matrix raz za vertex (4 krát za sprite), ktorý sa mi javí ako strata pamäti. Na druhej strane, vynásobením model vertex pozície transformáciou matice na CPU zdá sa, ako by to bolo pomalšie v porovnaní s GPU je súbežnosť schopnosti.
To je, ako môj vrchol buffer formát bude vyzerať, ako keby som vypočítať transformovať na GPU:
float* v0 = {x, y, r, g, b, a, u, v, textureID, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15};
float* v1 = {x, y, r, g, b, a, u, v, textureID, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15};
float* v2 = {x, y, r, g, b, a, u, v, textureID, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15};
float* v3 = {x, y, r, g, b, a, u, v, textureID, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15};
Otázka je väčšinou teoreticky riadený. Takže, teoretické a technické odpoveď bude veľmi ocenil. Ale pre informáciu, tu je kód.