我创建了一个GL_ARRAY_BUFFER和GL_ELEMENT_ARRAY_BUFFER,并用glBufferData(null在两者中分配空间),然后我将一些数据glBufferSubData()到缓冲区的某些部分,使某些部分(不仅仅是在最后)为空。然后我用glDrawElements()绘制整个GL_ELEMENT_ARRAY_BUFFER。允许某些部分为空吗?或者它有缺点吗?
GL_ARRAY_BUFFER
GL_ELEMENT_ARRAY_BUFFER
glBufferData(null
glBufferSubData()
glDrawElements()
6qfn3psc1#
没有所谓的“部分空”。那些字节存在并且它们有值。那些值要么是未定义的(又名:可以是任何值)或0,具体取决于您的驱动程序和创建上下文时可能使用的强大内存设置。使用未定义的值可能没有帮助,因为它们可能会读取有意义的缓冲区数据,或者超过缓冲区的末尾,这可能会直接导致GPU崩溃。所以基本上不要这样做。如果你告诉OpenGL读取一些数据,确保有有效的数据要读取。发出多个绘制命令从同一个缓冲区的子部分绘制没有什么错。绘制命令只是一个性能问题,如果你在它们之间进行状态更改。
1条答案
按热度按时间6qfn3psc1#
没有所谓的“部分空”。那些字节存在并且它们有值。那些值要么是未定义的(又名:可以是任何值)或0,具体取决于您的驱动程序和创建上下文时可能使用的强大内存设置。
使用未定义的值可能没有帮助,因为它们可能会读取有意义的缓冲区数据,或者超过缓冲区的末尾,这可能会直接导致GPU崩溃。
所以基本上不要这样做。如果你告诉OpenGL读取一些数据,确保有有效的数据要读取。发出多个绘制命令从同一个缓冲区的子部分绘制没有什么错。绘制命令只是一个性能问题,如果你在它们之间进行状态更改。