我有一个渲染器以
RENDERMODE_WHEN_DIRTY
模式处理输入图像(即每个请求渲染一次)。它只是将效果应用于输入图像。
由于结果图像需要与源图像具有完全相同的尺寸,因此对 FBO(帧缓冲区对象)执行渲染,该对象附加了纹理 - 大小与源图像完全相同。然后 FBO 像素被读入位图,保存到文件中。到目前为止 - 很好。
现在,由于结果图像也应该通过
GLSurfaceView
(通常比原始图像小)向用户显示,我应用了 另一个 OpenGL 程序,使用上述 FBO 的纹理作为输入纹理,然后缩放以匹配表面尺寸(同时保持图像的原始纵横比,通过使用合适的四边形顶点作为 2n'd 程序顶点着色器的输入)。
嗯,这也很有效,但是... 似乎像是一个巨大的冗余开销 - 对于这样一个简单且基本(常见)的任务。
问题: 有没有办法避免使用另一个 OpenGL 程序,只是为了向用户显示 FBO? (即避免第二次渲染,只是为了调整现有 FBO/纹理的大小以匹配绘图表面尺寸)
GLES20.glDrawArrays
) 渲染,每个目标都有自己的尺寸?非常感谢。
如果您需要全分辨率图像,并且这与最终的屏幕分辨率不同,那么不行,您无法避免第二次渲染。