我正在尝试执行类似旧的glDrawPixels: 我有一个用文本创建的像素缓冲区,我想将它应用到后台缓冲区(已经渲染了所有场景)。
unsigned char a[] = {255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0};
// What I would
//glDrawPixels(2, 2, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid*)pixels);
// What I am trying
GLuint pbo = 0;
glGenBuffers(1, &pbo);
glBindBuffer( GL_PIXEL_UNPACK_BUFFER, pbo);
glBufferData(GL_PIXEL_UNPACK_BUFFER, 12, a, GL_STREAM_DRAW);
// Blit pbo to back buffer, but how?
// Release all
....
大多数教程[1]似乎将像素缓冲区复制到纹理,然后将此纹理应用于四边形,但此解决方案似乎执行了许多不必要的操作:复制数据,为纹理创建过滤,绘制四边形(这意味着一个新的VBO)等......
其他答案[2]谈及" Blitting",但我无法让它发挥作用。
此外,关于OpenGL的大多数信息仍然使用glDrawPixels,它已弃用(且不可用)OpenGL 3.X。