vaps 源码修改记录3

读取opengl绘制到窗口中的像素,在vxtPLWindowImpl.cpp的vEndDraw函数中,

在SwapBuffers后面即可读取每帧绘制的像素数据

void ReadVapsPixel(void)  
{
    glReadBuffer(GL_FRONT);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 4);   
    glReadPixels(0, 0, WindowWidth, WindowHeight,  GL_RGBA, GL_UNSIGNED_BYTE, pPixelData);
}
glReadBuffer(GL_FRONT)这句话很重要,否则每次不能读到当前帧数据,只能读到上一帧数据。解释如下:


前后缓冲代表了双缓冲的帧缓冲,前缓冲就是屏幕显示的内容,后缓冲是显卡进行绘制的地方。当用户想使绘制的内容变为可见,就必须调用平台相关的交换缓冲区命令,这会立刻交换后缓冲内容至前缓冲。交换操作指后缓冲变成前缓冲,前缓冲变成后缓冲。如果你在交换后读取后缓冲,将读到的是交换前的前缓冲内容。

猜你喜欢

转载自blog.csdn.net/sukhoi27smk/article/details/80262478
今日推荐