Android OpenGL片段着色器分辨率

时间:2014-05-20 09:27:10

标签: android opengl-es

我有一个片段着色器,以大约25fps的速度运行。如果屏幕分辨率较低,我猜测着色器会跑得更快。有没有办法让我的着色器说服它在较低分辨率的屏幕上运行?所以基本上牺牲细节 - 输出会更加笨拙 - 以获得性能。

2 个答案:

答案 0 :(得分:2)

你可以做其他优化(比如渲染较少的原语)

但是如果你想以较低的分辨率渲染,那么首先应该渲染到较低分辨率的屏幕外帧缓冲,然后使用该缓冲区重新渲染为全屏四边形的纹理,以全分辨率

编辑:查看您的代码,您可以执行以下操作:

  1. 将代码移动到顶点着色器并将结果传递给varrying vec3 f_color输出,您可以在片段着色器中将gl_FragColor设置为

  2. 在-1,-1和1,1之间制作一个均匀的三角形网格,其中三角形的数量取决于您所需的分辨率

  3. 绘制该网格

答案 1 :(得分:1)

从请求的语气我假设你是一个关于OpenGL的新东西(因为关于解决方案的请求是非常基本的,没有任何无视的意图,我们都开始某种方式):答案棘轮怪胎是正确的( - >渲染在低分辨率的纹理上,然后只是在屏幕上显示纹理是你的解决问题的直接答案)然而,正如棘轮怪胎也暗示,你应该寻找其他地方的方式解决您的问题(因为降低片段着色器的分辨率将使您的输出看起来错误™)。

一些提示:

  • 尝试在顶点着色器中尽可能多地执行:可以在顶点着色器中的每个顶点执行许多计算,然后将其(使用插值)发送到片段着色器。这是一个巨大的优化来源,应该在每次可能的情况下被利用
  • 在片段着色器中搜索周期和条件(if / then),特别是无法展开的周期(变量范围)和不依赖于制服的条件,因为它们在片段着色器级别上都非常繁重
  • 尽可能渲染较少的原语
  • 如果你使用了很多复杂的函数(cos / sin / sqrt等),请尝试缓存结果和/或使用查找表(如果可能的话)
  • 启用剔除和深度测试以减少光栅化的几何体数量[不确定它是否会有所帮助,但不会受到影响;-)]
  • 降低某些计算的精度,如果结果不降低

您可以尝试在问题中发布片段着色器

希望这有帮助