Нека кажем, че аз определям структура на върха. Мога да поддържам връхната структура малка, като опаковам RGBA цвета на върха в един неподписан инт. Така:
struct Vertex
{
float pos[3];
float normal[3];
float texcoord[2];
unsigned int color; // RGBA
};
Но когато вертексът пристигне в моята вершина шейдър, той ще бъде преобразуван в 4-плаваща стойност: vec4 в GLSL или float4 в HLSL. Вероятно този тип преобразуване отнема известно време на графичния процесор.
Следователно би ли било по-бързо да определим атрибута на цвета на върха като 4-поплавък, като по този начин избягваме преобразуването?
...
float color[4];
...
Или по-големият размер на паметта на този цвят ще направи графичния кеш по-малко ефективен и да доведе до по-бавно изобразяване?
Отговори:
4 за отговор № 1Съвременните графични процесори имат специален хардуер за разопакованепакетирани формати при зареждане, така че преобразуването е ефективно безплатно. Намалените изисквания за честотна лента на паметта и по-ефективната употреба на кеш на вершината ще подобрят производителността, така че като правило трябва да пакетирате всички връхни атрибути възможно най-плътно, като все пак поддържате достатъчна точност за вашите цели.