将OpeGLES1.1固定功能管道即时转换为可编程管道

时间:2014-12-20 03:07:34

标签: opengl-es-2.0 shader opengl-es-1.1

是否可以动态地使用着色器模拟已完成的固定功能管道?通过运行意味着不重写固定功能代码以使用着色器,而是一种接收固定功能GLES调用的中间驱动程序(可能将其缓存为完整的一帧,因为没有从固定到可编程管道的直接一对一转换)和输出等效的GLES2.0调用。

即使有可能,那它真的会有多少工作?

1 个答案:

答案 0 :(得分:0)

对于大多数ES 1.1来说,这看起来非常简单。所有典型的固定功能(如转换,灯光和材质)都可直接转换为着色器代码。

要完全替换,您显然必须实现所有功能。从浏览ES 1.1入口点开始,我发现了一些不能直接转换为ES 2.0的项目,其中最后一项看起来特别成问题:

  • 任意剪裁平面。这在ES 2.0中不可用,但通过计算顶点着色器中的距离,然后在片段着色器中丢弃剪切的片段,在着色器中模拟并不是非常困难。
  • ES 1.1有一些名为" palette texture"。根据我的理解,在ES 2.0中实现它看起来有点痛苦,但可能。您可能需要两个纹理,一个用于索引,一个用于调色板,在片段着色器中有两个采样级别。
  • ES 1.1支持逻辑操作(glLogicOp),作为片段着色器之后执行的每片段操作的一部分。 ES 2.0没有这个,我无法想出一个复制它的好方法。想到的唯一事情是渲染,回读结果,在CPU上执行逻辑操作,然后渲染生成的图像。每次操作改变时你都必须这样做。