У меня есть этот общий код для всех моих вершинных шейдеров: < /p>
Код: Выделить всё
...
// uniforms
layout (std140, binding = 0) uniform CameraData
{
uniform mat4 ViewMatrix;
uniform mat4 ProjectionMatrix;
uniform vec3 WCameraPosition;
};
layout (std140, binding = 1) uniform TransformData
{
uniform mat4 ModelMatrix;
uniform mat4 NormalMatrix;
};
...
< /code>
, где эти два равномерных буфера явно связаны с точками связывания 0 и 1. Есть и другие равномерные буферные блоки, но все они различны по имени и точке связывания.
Однако я. 'M Получите ошибку в этих двух равномерных блоках, поэтому я думаю, что перечисление всех других равномерных блоков бесполезно. ), что сделано незадолго до вызова рисования следующим образом: < /p>
// Get shader program
...
glUseProgram(program);
// binding of textures and uniform data
...
for (auto& buffer : rc.AdditionalBufferData)
{
GLuint bufferIndex = glGetProgramResourceIndex(program, buffer.ResourceProgramInterface, buffer.Name.data());
glBindBufferBase(bufferGL.Target, bufferIndex, buffer.ID);
}
// draw
...
Для некоторых программ шейдеров работает нормально, но иногда я получаю неправильные визуальные результаты. Во время процесса отладки я заметил, что для программ шейдеров, дающих неправильные результаты, функция glgetProgramReSourCeIndex () возвращает инвертированные индексы для cameradata и transformdata универсальные буферы, 1 и 0 вместо 0 и 1. Захват renderDoc показывает то же поведение: < /p>
renderdoc capture scenshot < /p>
можно увидеть перевернутые размеры буферов .
, если я заставляю индексы двух буферов cameradata и transformdata , чтобы быть 0 и 1 соответственно (вместо этого 1 и 0), проблемы исправлены, а визуальные результаты верны. Незначительные вещи, но не повезло. Для меня это кажется ошибкой низкого уровня. У кого -нибудь было что -то подобное?>
Подробнее здесь: https://stackoverflow.com/questions/794 ... ng-indices
Мобильная версия