编译器工具-programming -- principles and practice using C++second ed...

ES 2.0顶点着色器限制这部分讨论OpenGL ES 2.0顶点着色器的着色器语言的限制。这些限制将有助于移植顶点着色器能在大多数的OpenGL ES 2.0编译器里执行。顶点着色器长度没有方法能够查询OpenGL ES 2.0编译器的顶点着色器支持的最多的指令数。因此无法确定一个编译器支持的顶点着色器指令数是多或少。但如果指令超过了顶点着色器允许的最大指令数,着色器源码将编译失败。 OpenGL ES工作组意识到不能够查询最大数和着色器里的实际uniform数是严重的问题,将让开发者工作变得困难。计划去提供一套顶点着色器(片段着色器)帮助确认指令的复杂度和uniform的使用。另外这个着色器将是OpenGL ES 2.0一致性测试的一部分,这意味着所有OpenGL ES 2.0通过一致性测试的编译器将有运行着色器的能力。临时变量是指在函数内部声明的变量或者存储中间变量的变量。OpenGL ES着色器语言是一种高级语言,没有办法指定OpenGL ES 2.0必须支持的临时变量数目。所以一个顶点着色器可能在一个上面运行,可能不能在所有的ES 2.0编译器上兼容。流控制OpenGL ES 2.0要求顶点着色器支持循环,即使它们没有展开。例如你能有一个循环索引从0到1023的循环。这在着色器编译时将不会展开,展开后的代码对ES 2.0编译器工具将太大。顶点着色器使用循环将有下面的限制:一个循环只有一个循环索引必须被一个整形常量表达初始化。表达条件必须是下面中的一个loop_indx < constant_expression loop_indx = constant_expression loop_indx != constant_expression loop_indx == constant_expression循环状态必须使用下面的表达式修改loop_index-- loop_index++ loop_index -= constant_expression loop_index += constant_expression循环索引值必须传递一个只读的参数到函数内开始循环。(例如循环索引被用作有限定的参数声明)。一个有效的循环结构如下:
pdf 文件大小:2.32MB