目录
10.25 动态索引
某些实现不直接支持数组,向量和矩阵的动态索引。
程序转换时是可以的,但性能会降低。
是否应该从规范中删除数组的动态索引?
A:保持统一变量的动态索引(用于蒙皮)。 删除临时(在限制部分)。
是否应从规范中删除向量和矩阵的动态索引?
A:保留在主要规范中。 支持不是强制性的。
10.26 纹理单元的最大数量
片段着色器中必须支持的最小纹理单元数目为2,由gl_MaxTextureImageUnits = 2定义。这对于ES 2.0来说太低了吗?
选项1:是的,纹理单元的数量是片段着色器的限制因素。 从ES 1.0到ES 1.1,纹理单元的数量从1增加到2,因此ES 2.0应该加倍(即4)。
选项2:增加到8。
A:增加到8。
10.27 目标错误报告
是否应该要求编译器在编译时报告任何错误,或者可以将错误推迟到链接时间?
A:如果无法编译程序,则只需要向目标编译器报告发生了错误。可能在编译时或链接时或两者都报告此错误。开发系统必须在编译时生成语法错误。
10.28 整数出发的舍入
是否应为整数除法指定舍入模式?
除法的舍入模式与余数运算符的定义有关。大多数语言中的重要关系(但在此版本的GLSL ES中无关)是:
(a / b)* b + a%b = a(a和b是整数)
通常,余数运算符被定义为具有与被除数相同的符号,这意味着除数必须向零舍入。(注意,mod函数与余数函数不同。mod被定义为与除数具有相同的符号)。
由于余数运算符不是GLSL ES 1.00的一部分,因此不必指定舍入模式。
A:对于此版本的规范,未定义舍入模式。
10.29 未定义的返回值
如果使用非void返回类型声明函数,则定义中的任何return语句都必须指定返回表达式,其类型与返回类型匹配。但是,如果函数返回而未执行return语句,则行为为未定义的。编译器是否应该尝试检查这些情况并将其报告为错误?
例如:
int f()
{
// no return statement
}
...
int a = f();
选项1:将未定义的值返回给调用者。 没有生成错误。 这是大多数c ++编译器在实践中所做的事情(尽管c ++标准实际上指定了“未定义的行为”)。
选项2:在返回值的所有函数定义的末尾必须有一个return语句。
不,这需要添加可能无法执行的语句。
选项3:只有在执行到达函数末尾时才需要函数定义末尾的return语句:
例如:
int f(bool b)
{
if (b)
return 1;
else
return 0;
// 没错。 执行永远不会到达函数的末尾,因此永远不会执行隐式return语句。
}
在存在循环的情况下,这变得不可能确定。
选项4:通过函数定义的所有有限静态路径必须以return语句结束。如果可以独立控制代码中的每个分支,则静态路径是可能采用的路径。
A:选项1:该函数返回一个未定义的值(不会报错)。
版权:https://blog.csdn.net/flycatdeng/article/details/88771466