с использованием OpenGL 4.5 и карты NVidia, я заметил, что при переключении объектов обратной связи преобразования через glBindTransformFeedback()
привязки привязанных массивов, установленные с glBindBufferBase()
, не изменяются.Буферные привязки объектов обратной связи преобразования
Посмотрите на следующие фрагменты:
Пусть имеется пара преобразующих обратной связи и буфера вершин объектов:
GLuint tfo1, vbo1;
glGenTransformFeedbacks(1, &tfo1);
glGenBuffers(1, &vbo1);
glBindBuffer(GL_ARRAY_BUFFER, vbo1);
glBufferData(GL_ARRAY_BUFFER, 123 * sizeof(float), nullptr, GL_DYNAMIC_DRAW);
glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, tfo1);
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, vbo1);
Результат запроса с использованием glGetIntegerv()
:
GL_TRANSFORM_FEEDBACK_BINDING: 1
GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: 1
Пусть быть другой парой таких объектов:
GLuint tfo2, vbo2;
glGenTransformFeedbacks(1, &tfo2);
glGenBuffers(1, &vbo2);
glBindBuffer(GL_ARRAY_BUFFER, vbo2);
glBufferData(GL_ARRAY_BUFFER, 123 * sizeof(float), nullptr, GL_DYNAMIC_DRAW);
glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, tfo2);
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, vbo2);
Результат запроса с использованием glGetIntegerv()
:
GL_TRANSFORM_FEEDBACK_BINDING: 2
GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: 2
И теперь встает вопрос: После создания второй пары, связывание предыдущего преобразования буфера объекта tfo1
...
glBindTransformFeedback(GL_TRANSFORM_FEEDBACK, tfo1);
... приводит к следующий запрос:
GL_TRANSFORM_FEEDBACK_BINDING: 1
GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: 2 <--- WHY NOT 1?
Связанный TFO теперь tfo1
, но привязка буфера массива не была изменена. Похоже, что привязка буфера не является частью состояния TFO, но может ли это быть? Не управляет привязками буфера основной причиной существования TFOs?
«* Не управляет привязками буфера, основная причина существования TFOs? *« Нет; основной причиной, по которой обращаются объекты обратной связи, является возможность приостановки и возобновления операций обратной связи. Конечно, они содержат привязки объектов буфера. Но вы должны показать нам * действительный код *, где вы запрашиваете этот материал. Потому что я сильно подозреваю, что вы неправильно запрашиваете буфер. –
Тест-сценарий для выбора источника обратной связи источника/целевого буфера [ссылка] (http://balkanassault.com/misc/tfo_testcase.cpp) – dau