Fra*_*era 3 opengl vbo vertex-buffer vertex
我已经初始化了 glewInit( ) 和任何其他 openGL 东西。所有这些都是在我拨打这些电话之前进行的。
glGenBuffers( 1, &m_uiVertBufferHandle );
glBindBuffer( GL_ARRAY_BUFFER, m_uiVertBufferHandle );
glBufferData( GL_ARRAY_BUFFER, 0, 0, GL_READ_WRITE );
glBindBuffer( GL_ARRAY_BUFFER, 0 );
Run Code Online (Sandbox Code Playgroud)
这就是我创建缓冲区对象的方式,ii 执行了 glBufferData,因为我在 openGL 文章中读到,如果您不至少调用一次它,则根本没有任何存储空间,这将使 glMapBuffer 总是给您 0x00000000。
稍后我调用 glMapBuffer 来获取我的存储位置以开始保存数据,当我使用 glMapBuffer 时我这样称呼它
void* buffer1;
glBindBuffer( GL_ARRAY_BUFFER, m_uiVertBufferHandle );
//make sure our buffer excists
buffer1 = glMapBuffer( GL_ARRAY_BUFFER, GL_READ_WRITE );
Run Code Online (Sandbox Code Playgroud)
我的 buffer1 中总是得到 0x00000000。为什么是这样?我发现的唯一两个原因是我没有正确初始化 glewInit (我已经完成了)并且我没有至少调用一次 glBindBufferData 。
glBufferData( GL_ARRAY_BUFFER, 0, 0, GL_READ_WRITE );
Run Code Online (Sandbox Code Playgroud)
GL_READ_WRITE不是缓冲区对象的有效用法。您将其用于映射,而不是缓冲区对象的使用。使用参数类似于GL_STATIC_DRAW,或更适合您的“读/写”情况,GL_DYNAMIC_READ。
因为你传递了一个无效的枚举,OpenGL 给你一个GL_INVALID_ENUM错误并且无法执行这个命令。此外,0 长度的缓冲区对象对于缓冲区的存储来说不是合理的大小。尝试new int[0]或malloc(0)有时看看会发生什么。
请停止分配极小或不存在的数据大小。如果你真的想测试这个,请分配 4096 字节或其他东西。
| 归档时间: |
|
| 查看次数: |
2337 次 |
| 最近记录: |