这听起来很荒谬,但我找不到任何关于如何从顶点数组(从相应的GLuint)到控制台打印顶点的信息?
我需要这样做才能帮助我调试应用程序。
答案 0 :(得分:5)
OpenGL不了解stdio。因此,归结为从顶点数组中读取相应的数据,将其转换为字符串并使用常用函数进行打印。
如果您使用的是客户端VA,那么您已经拥有了所有数据。如果您正在使用VBO,最简单的方法是将VBO映射到客户端地址空间(glMapBuffer)并从那里开始,就像它是常规VA一样。
答案 1 :(得分:1)
您可以使用glGetBufferSubData()
从缓冲区中读取数据。例如,要从当前绑定的GL_ARRAY_BUFFER
获取数据,请使用:
glGetBufferSubData(GL_ARRAY_BUFFER, offset, size, data);
其中offset
是缓冲区的偏移量,size
是您想要读取的数据量,都以字节为单位。
假设您想从1K开始将256字节读入缓冲区:
GLubyte data[256];
glGetBufferSubData(GL_ARRAY_BUFFER, 1024, 256, data);
另一种方法是在GL 3.0或更高版本中使用glMapBuffer()
或glMapBufferRange()
。它们都返回一个你可以读取的指针。对于上面的相同示例:
GLubyte data[256];
GLvoid* pBufData = glMapBufferRange(GL_ARRAY_BUFFER, 1024, 256, GL_MAP_READ_BIT);
memcpy(&data, pBufData, 256);
glUnmapBuffer(GL_ARRAY_BUFFER);