我注意到,在通過glBindTransformFeedback()
切換變換反饋對象時,與glBindBufferBase()
建立的關聯數組緩衝區綁定不會被更改。使用OpenGL 4.5和NVidia卡的變換反饋對象的緩衝區綁定
看一看下面的代碼片段:
要有一雙變換反饋和頂點緩衝對象:
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);
0使用
查詢結果:
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狀態的一部分,但可以這樣嗎?是否管理緩衝區綁定是TFO存在的主要原因?
「*不是管理緩衝區綁定TFO存在的主要原因嗎?*」否;反饋對象存在的主要原因是能夠暫停和恢復反饋操作。當然,它們確實包含緩衝區對象綁定。但是你應該向我們展示*實際代碼*你在哪裏查詢這些東西。因爲我強烈懷疑你沒有正確查詢緩衝區。 –
用於變換反饋源/目標緩衝區選擇的測試用例[鏈接](http://balkanassault.com/misc/tfo_testcase.cpp) – dau