OpenGL-ES:渲染 FBO 到 GLSurfaceView

问题描述 投票:0回答:1

我有一个渲染器以

RENDERMODE_WHEN_DIRTY
模式处理输入图像(即每个请求渲染一次)。它只是将效果应用于输入图像。

由于结果图像需要与源图像具有完全相同的尺寸,因此对 FBO(帧缓冲区对象)执行渲染,该对象附加了纹理 - 大小与源图像完全相同。然后 FBO 像素被读入位图,保存到文件中。到目前为止 - 很好。

现在,由于结果图像也应该通过

GLSurfaceView
(通常比原始图像小)向用户显示,我应用了 另一个 OpenGL 程序,使用上述 FBO 的纹理作为输入纹理,然后缩放以匹配表面尺寸(同时保持图像的原始纵横比,通过使用合适的四边形顶点作为 2n'd 程序顶点着色器的输入)。

嗯,这也很有效,但是... 似乎像是一个巨大的冗余开销 - 对于这样一个简单且基本(常见)的任务。

问题: 有没有办法避免使用另一个 OpenGL 程序,只是为了向用户显示 FBO? (即避免第二次渲染,只是为了调整现有 FBO/纹理的大小以匹配绘图表面尺寸)

  1. FBO/纹理可以通过更简单的方式投影到表面吗?
  2. 是否可以同时对 2 个目标执行 (
    GLES20.glDrawArrays
    ) 渲染,每个目标都有自己的尺寸?
  3. 任何其他简洁的解决方案都将受到欢迎和赞赏。

非常感谢。

opengl-es opengl-es-2.0 glsurfaceview fbo
1个回答
0
投票

如果您需要全分辨率图像,并且这与最终的屏幕分辨率不同,那么不行,您无法避免第二次渲染。

© www.soinside.com 2019 - 2024. All rights reserved.