如何将数据(来自 glReadPixels)绘制到 OpenGL ES 2.0 中的默认(显示)帧缓冲区
How to draw the data (from gleReadPixels) onto the default (display) farmebuffer in OpenGLES 2.0
抱歉,如果我问的是已经可用的东西。到目前为止,我无法追踪。我阅读了有关 FBO 的详细信息,并对屏幕外缓冲有了一个清晰的认识。 http://mattfife.com/?p=2813 是一篇关于 FBO 的不错的小文章。在所有示例中,包括这个示例,我没有看到有关如何将通过 glReadPixels 调用检索的数据写入默认显示帧缓冲区的详细信息。对不起,如果我遗漏了任何愚蠢的东西。我做了尽职调查,但找不到任何示例。
注意:我使用的是 OpenGLES 2.0,因此无法使用 glDrawPixels 等调用
基本上我的要求是有离屏缓冲。因为我正在研究 subtitle/captions,其中字幕的滚动将不得不重复线条的渲染,直到它们超出字幕显示区域。
我得到了使用 FBO 并将创建的纹理绑定到主默认帧缓冲区的建议。
我的实际需求是caption/subtitle(可以是滚动模式)
假设我第一次展示下面的东西,
这是行号 - 1
这是行号 - 2
这是行号 - 3
滚动之后,我想拥有,
这是行号 - 2
这是行号 - 3
这是行号 - 4
第二次渲染时,我必须更新离屏FBO中的内容?那将是在新位置重写第 2 行和第 3 行,删除第 1 行并添加第 4 行。
创建带有纹理附件的帧缓冲区(see Attaching Images). Note glFramebufferTexture2D
OpenGL ES 2.0 支持。
帧缓冲区的颜色平面可以通过 glReadPixels
加载到 CPU,与使用 Renderbuffer. But the rendering is stored in a 2D Texture.
时的方式相同
绑定纹理和默认帧缓冲区,并渲染一个带有纹理的屏幕 space 四边形。
使用顶点坐标 (-1, -1), (1, -1), (1, 1), (-1, 1) 渲染四边形 (GL_TRIANLGE_FAN
) 并使用以下命令简单的 OpenGL ES 2.0 着色器:
顶点着色器
attribute vec2 pos;
varying vec2 uv;
void main()
{
uv = pos * 0.5 + 0.5;
gl_Position = vec4(pos, 0.0, 1.0);
}
片段着色器
precision mediump float;
varying vec2 uv;
uniform sampler2D u_texture;
void main()
{
gl_FragColor = texture2D(u_texture, uv);
}
抱歉,如果我问的是已经可用的东西。到目前为止,我无法追踪。我阅读了有关 FBO 的详细信息,并对屏幕外缓冲有了一个清晰的认识。 http://mattfife.com/?p=2813 是一篇关于 FBO 的不错的小文章。在所有示例中,包括这个示例,我没有看到有关如何将通过 glReadPixels 调用检索的数据写入默认显示帧缓冲区的详细信息。对不起,如果我遗漏了任何愚蠢的东西。我做了尽职调查,但找不到任何示例。
注意:我使用的是 OpenGLES 2.0,因此无法使用 glDrawPixels 等调用
基本上我的要求是有离屏缓冲。因为我正在研究 subtitle/captions,其中字幕的滚动将不得不重复线条的渲染,直到它们超出字幕显示区域。
我得到了使用 FBO 并将创建的纹理绑定到主默认帧缓冲区的建议。
我的实际需求是caption/subtitle(可以是滚动模式) 假设我第一次展示下面的东西, 这是行号 - 1 这是行号 - 2 这是行号 - 3
滚动之后,我想拥有, 这是行号 - 2 这是行号 - 3 这是行号 - 4
第二次渲染时,我必须更新离屏FBO中的内容?那将是在新位置重写第 2 行和第 3 行,删除第 1 行并添加第 4 行。
创建带有纹理附件的帧缓冲区(see Attaching Images). Note glFramebufferTexture2D
OpenGL ES 2.0 支持。
帧缓冲区的颜色平面可以通过 glReadPixels
加载到 CPU,与使用 Renderbuffer. But the rendering is stored in a 2D Texture.
时的方式相同
绑定纹理和默认帧缓冲区,并渲染一个带有纹理的屏幕 space 四边形。
使用顶点坐标 (-1, -1), (1, -1), (1, 1), (-1, 1) 渲染四边形 (GL_TRIANLGE_FAN
) 并使用以下命令简单的 OpenGL ES 2.0 着色器:
顶点着色器
attribute vec2 pos;
varying vec2 uv;
void main()
{
uv = pos * 0.5 + 0.5;
gl_Position = vec4(pos, 0.0, 1.0);
}
片段着色器
precision mediump float;
varying vec2 uv;
uniform sampler2D u_texture;
void main()
{
gl_FragColor = texture2D(u_texture, uv);
}