我需要为Android编写基于opengl的应用程序.
OpenGL SL和OpenGL ES 2.0 SL之间以及OpenGL和OpenGL ES之间是否存在很大差异?如果我使用一些与一般OpenGL相关的书籍而不是OpenGL ES学习OpenGL和GLSL,它会有用吗?
桌面环境中的GLSL与OpenGL ES 2.0中的GLSL之间存在巨大差异.
主要区别在于向整数和浮点类型引入精度.实现需要在顶点着色器(低/中/高)和两个片段着色器(低/中)中提供三种不同的精度级别.实现可以可选地支持片段着色器中的高精度,并且这可以通过测试预处理器定义是否GL_FRAGMENT_PRECISION_HIGH存在来在编译时确定.
哪里首次发布桌面GLSL规范.对应于#version 110(并且GLSL编译器应该假设这是一个着色器编写的版本,如果没有#version)GLSL ES开始于#version 100并且在许多方面,语法大致相当于#version 120桌面上的GLSL .你必须使用旧的attribute和varying用于顶点着色器输入/输出和片段着色器输入变量声明,而不是in与out由桌面GLSL(> = 130)所定义.
顶点纹理查找是OpenGL ES 2.0中的一个可选功能,您需要特别注意它的值GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS(如果您的实现不支持它,它将为0).
与桌面GLSL相比,GLSL ES中所需的制服和顶点属性数量极为有限.GLSL ES只需要8个顶点属性和128个vec4制服,而桌面GLSL则需要分别为16和256.
GLSL ES(100)只需要2个绘制缓冲区(片段着色器输出),而桌面GLSL需要8个.
在GLSL ES中,可以和不可以用于索引数组的规则更严格.最低实现要求是您可能无法使用循环计数器作为GLSL ES中片段着色器中统一数组的索引.
最后,而桌面GLSL着色器可能针对相容性分布方面,从而支持之类的东西gl_FrontColor和gl_ModelViewMatrixOpenGL ES 2.0的消除了所有功能的OpenGL视为过时在OpenGL 3.2(加上一些更多的东西像多边形填充模式).因此,为重用固定函数顶点指针,矩阵等而编写的任何着色器都无法直接移植到OpenGL ES 2.0.
有很多差异,但这应该让你开始.如果你真的想要一个更全面的清单,你应该参考GLSL 150 +(OpenGL 3.2)和GLSL ES 100(OpenGL ES 2.0)的正式规范.两种语言规范(标题为" 内置常量")末尾都有一个子部分,概述了实现最低要求,并且熟悉这些要求是个好主意.如果您为桌面GLSL编写着色器并尝试移植它,您将经常遇到GLES中的硬件/实现限制.
| 归档时间: |
|
| 查看次数: |
1827 次 |
| 最近记录: |