Opengl es Opengl ES 2.0中的重叠着色器效果

Opengl es Opengl ES 2.0中的重叠着色器效果,opengl-es,textures,shader,Opengl Es,Textures,Shader,是否可以在OpenGL ES 2.0中重叠着色器效果?(不使用固定基地运营商) 如何将着色器的结果与另一个着色器一起使用,而不必执行glReadPixels并再次推送处理后的像素 下一个伪代码是我试图实现的: // Push RGBA pixels into the GPU glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, Pixels_To_Render); // Appl

是否可以在OpenGL ES 2.0中重叠着色器效果?(不使用固定基地运营商)

如何将着色器的结果与另一个着色器一起使用,而不必执行glReadPixels并再次推送处理后的像素

下一个伪代码是我试图实现的:

// Push RGBA pixels into the GPU
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, Pixels_To_Render);

// Apply first shader effect
glUseProgram( FIRST_SHADER_HANDLE);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

// Apply the second shader effect sampling from the result of the first shader effect
glUseProgram( SECOND_SHADER_HANDLE );
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

// Get the overall result
glReadPixels(......)

我想你说的是使用片段着色器的像素处理

使用OpenGL ES 2.0核心API,如果不从GPU读回像素,则无法将其从目标帧缓冲区读入片段着色器

但如果您所在的设备/平台支持着色器帧缓冲区提取扩展(至少在iOS上,
NV\u shader\u framebuffer\u fetch
在其他地方),那么您就很幸运了。通过该扩展,片段着色器可以从目标帧缓冲区读取其渲染到的片段的片段数据(并且仅读取该片段)。这对于可编程混合或像素后处理效果非常有用,因为您不必承担
glReadPixels
操作的性能损失


声明您正在将扩展与
#扩展GL\u EXT\u shader\u framebuffer\u fetch:require
,然后从
GL\u LastFragData[0]
内置中读取片段数据。(下标用于渲染目标索引,但除非您使用OpenGL ES 3.0,否则您没有多个渲染目标,因此它始终为零。)按您喜欢的方式处理它,并像往常一样写入
gl\u FragColor
gl\u FragData

是否有理由避免使用纹理支持的FBO?它们提供了一种相对简单的方法来完全在GPU上完成这项工作,方法是运行一个渲染过程,然后在下一个渲染过程中使用由此产生的纹理。这应该适用于几乎所有的OpenGL ES 2.0设备。