我仍在尝试从片段着色器读取像素,我有一些问题.我知道gl_FragColor返回vec4意味着RGBA,4个通道.之后,我使用glReadPixels读取FBO并将其写入数据
GLubyte *pixels = new GLubyte[640*480*4];
glReadPixels(0, 0, 640,480, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
Run Code Online (Sandbox Code Playgroud)
这工作正常,但它确实有速度问题.而不是这个,我想读取RGB,所以忽略alpha通道.我试过了:
GLubyte *pixels = new GLubyte[640*480*3];
glReadPixels(0, 0, 640,480, GL_RGB, GL_UNSIGNED_BYTE, pixels);
Run Code Online (Sandbox Code Playgroud)
相反,这不起作用.我想这是因为gl_FragColor返回4个频道,也许我应该在此之前做点什么?实际上,由于我的返回图像(gl_FragColor)是灰度的,我做了类似的事情
float gray = 0.5 //or some other values
gl_FragColor = vec4(gray,gray,gray,1.0);
Run Code Online (Sandbox Code Playgroud)
那么有没有有效的方法来使用glReadPixels而不是使用前4通道方法?有什么建议吗?顺便说一下,这是关于opengl es 2.0的代码.
我正在使用openGL ES 2.0和GLSL着色器,并使用Renderbuffer(即屏幕外渲染)处理FBO.
它以30 fps工作正常.
但是当我使用glReadPixels或glcopyteximage2d时,它会下降到8 fps.
我做了类似的事情:
glBindFramebuffer(GL_FRAMEBUFFER, frameBuf);
//DRAW something
glReadPixels(...); //HERE
glBindFramebuffer(GL_FRAMEBUFFER, 0);
Run Code Online (Sandbox Code Playgroud)
无论如何我可以提高速度吗?我的意思是当我不使用FBO并使用相同参数的glReadPixels时,它的工作速度为15 fps,我认为使用FBO可以提高速度吗?