Я работаю над пакетным рендерингом WebGL (вопрос по-прежнему действителен в среде OpenGL). Aka вся графика в сцене, нарисованная в наименьших возможных вызовах drawArrays/drawElements (в идеале 1). Часть этого предполагает возможность определения текстур на основе атрибутов.Текстуры партийного рисования WebGL. У кого лучшая производительность и почему?
Поэтому в моем пиксельный шейдер я созерцая два сценария:
1. Розыгрыш текстуры 0 к экрану и использования атрибутов для определения «рамку», в котором текстура лежит на спрайт листа, которая находится в Память. Пиксельный шейдер будет выглядеть примерно так:
precision mediump float;
uniform sampler2D u_spriteSheet;
// Represents position that's framed.
varying vec4 v_texturePosition;
void main() {
gl_FragColor = texture2D(u_spriteSheet, v_texturePosition);
}
2. ли «если» заявление в затенении, чтобы определить, какой равномерную sampler2D использовать. Пиксельный шейдер будет выглядеть примерно так:
precision mediump float;
uniform sampler2D u_image1;
uniform sampler2D u_image2;
uniform sampler2D u_image3;
uniform sampler2D u_image4;
....
uniform sampler2D u_image32;
varying uint v_imageId;
// Represents texture position that's framed
varying vec4 v_texturePosition;
void main() {
if(v_imageId == 1) {
gl_FragColor = texture2D(u_image1, v_texturePosition);
}
else if (v_imageId == 2) {
gl_FragColor = texture2D(u_image2, v_texturePosition);
}
...
else if (v_imageId == 32) {
gl_FragColor = texture2D(u_image32, v_texturePosition);
}
}
Я понимаю, что с опцией 1 Я ограничен максимальным размером текстуры и подходом 2 я ограничен числом регистров текстур доступны. Ради обсуждения давайте предположим, что эти пределы никогда не будут переданы.
Я пытаюсь определить более эффективный подход, прежде чем вкладывать значительное количество времени в один из них ... Sooo какие-то мысли?
Имеет ли текстуры опцию? – Raxvan
Извините, не знакомы с жаргоном, atased? –
Текстурный атлас - более общий термин для того, что вы называете листом спрайта. – rickster