Glgetprogromresourceindex возвращает неправильные индексыC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Glgetprogromresourceindex возвращает неправильные индексы

Сообщение Anonymous »

Я использую общий Mathod для привязки буферов (унифицированные буферы, буферы хранения шейдеров, ...) для моих программ шейдеров, основанных на функции GlgetProgromresourceIndex () и имя буфера, но иногда я получаю странные результаты от glgetProgramResourceIndex () функция. < /p>
У меня есть этот общий код для всех моих вершинных шейдеров: < /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
...
(объект buffer содержит Infos о буфере, например, имя, интерфейс программы (gl_uniform_block, gl_shader_storage_block, ...), идентификатор буфера объекта ,. ..) < /p>
Для некоторых программ шейдеров работает нормально, но иногда я получаю неправильные визуальные результаты. Во время процесса отладки я заметил, что для программ шейдеров, дающих неправильные результаты, функция 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»