glDrawPixel GL_RGBA 像素缓冲对象

glDrawPixel GL_RGBA pixel buffer object

我目前正在从这样的像素缓冲区对象中绘制图像。

glClear(GL_COLOR_BUFFER_BIT); 
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, gl_pbo); 
glDrawPixels(glDisplayWidth, glDisplayHeight, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0); 

glutSwapBuffers(); 
glutReportErrors(); 
glutPostRedisplay(); 

这是我的显示循环。它从像素缓冲区对象 gl_pbo 生成红色图像。 我的问题是,如何将图像的颜色更改为灰度?

将 PBO 内容复制到纹理(相同大小),然后使用基于纹理红色通道输入输出灰度颜色的片段着色器将纹理绘制到全屏四边形。