Opengl es 如何将数据(从gleReadPixels)绘制到OpenGLES 2.0中的默认(显示)farmebuffer上

Opengl es 如何将数据(从gleReadPixels)绘制到OpenGLES 2.0中的默认(显示)farmebuffer上,opengl-es,glsl,shader,opengl-es-2.0,glreadpixels,Opengl Es,Glsl,Shader,Opengl Es 2.0,Glreadpixels,对不起,如果我问的是已经有货的东西。到目前为止我无法追踪。我阅读了有关FBO的详细信息,对屏幕外缓冲有了一个很好的了解。这是一篇关于FBO的好文章。在包括本例在内的所有示例中,我没有看到关于如何将通过glReadPixels调用检索的数据写入默认显示帧缓冲区的详细信息。对不起,如果我错过了什么愚蠢的事情。我做了尽职调查,但找不到任何例子 注意:我使用的是OpenGLES 2.0,因此我不能使用glDrawPixels等调用 基本上我的要求是有屏幕外缓冲。因为我正在制作字幕/字幕,其中字幕的滚动必

对不起,如果我问的是已经有货的东西。到目前为止我无法追踪。我阅读了有关FBO的详细信息,对屏幕外缓冲有了一个很好的了解。这是一篇关于FBO的好文章。在包括本例在内的所有示例中,我没有看到关于如何将通过glReadPixels调用检索的数据写入默认显示帧缓冲区的详细信息。对不起,如果我错过了什么愚蠢的事情。我做了尽职调查,但找不到任何例子

注意:我使用的是OpenGLES 2.0,因此我不能使用glDrawPixels等调用

基本上我的要求是有屏幕外缓冲。因为我正在制作字幕/字幕,其中字幕的滚动必须重复行的呈现,直到这些行离开字幕显示区域

我建议使用FBO并将创建的纹理绑定到主默认帧缓冲区

我实际需要的是字幕/副标题(可以是滚动模式) 假设我第一次在下面展示, 这是1号线 这是2号线 这是3号线

滚动之后,我想, 这是2号线 这是3号线 这是4号线


在第二次渲染时,我必须更新屏幕外FBO中的内容?这将是在新位置重新写入第2行和第3行,删除第1行并添加第4行。

使用纹理附件创建帧缓冲区()。OpenGL ES 2.0支持注释。
帧缓冲区的颜色平面可以通过
glReadPixels
加载到CPU,方法与使用。但渲染存储在2D中。
绑定纹理和默认帧缓冲区,并渲染带有纹理的屏幕空间四边形

使用顶点坐标(-1,-1)、(1,-1)、(1,1),(-1,1),渲染四元(
GL\u TRIANLGE\u FAN
),并使用以下简单的OpenGL ES 2.0着色器:

顶点着色器

属性向量2 pos;
可变vec2紫外线;
void main()
{
紫外线=位置*0.5+0.5;
gl_位置=vec4(位置,0.0,1.0);
}
片段着色器

precision mediump float;
可变vec2紫外线;
均匀的二维u_纹理;
void main()
{
gl_FragColor=纹理2D(u_纹理,uv);
}

还有一个问题,我希望您能提供帮助:从fbo/附加纹理获取内容时,是否可以获取部分数据?我觉得glBlitFrameBuffer可能有用,但OpenGLES 2.0不支持它。glScissor可能?@Aurovind_Sagar您可以将纹理坐标(
uv
)缩放到特定区域。@Aurovind_Sagar“我必须更新屏幕外fbo中的内容?”-不。您只需要从纹理中获得正确的“线”。纹理正在重复(
GL\u REPEAT
)。看见可以向纹理坐标添加偏移。e、 g
texture2D(u_纹理,uv+vec2(0.0,0.5))
。请注意,评论部分不打算提问。版主可能会删除所有这些命令。@Aurovind\u Sagar否,这没有什么不同。@Aurovind\u Sagar否。您不能将缓冲区附加到默认帧缓冲区。默认帧缓冲区是与窗口关联的缓冲区,在建立上下文后,应用程序无法更改或调整它。可以指定默认帧缓冲区的格式(仅限于硬件)。