如何在opengl中将顶点打印到控制台?

时间:2015-06-01 21:18:13

标签: opengl vertex

这听起来很荒谬,但我找不到任何关于如何从顶点数组(从相应的GLuint)到控制台打印顶点的信息?

我需要这样做才能帮助我调试应用程序。

2 个答案:

答案 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);