我在Shader School做了一个练习,我在其中实现了一个返回矩阵n次幂的函数。即使我将常量参数n传递给以下函数:
import random
inputs = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0']
func = {}
code = ""
z = len(inputs)
x = z-1
temp = inputs[:] #<-- here
while x >= 0:
y = random.choice(temp)
print(str(x) + " " + inputs[x] + " " + y)
func[inputs[x]] = y
code = code+inputs[x] + y
del temp[x]
x = x - 1
print(temp)
print(inputs)
我收到以下错误:
mat2 matrixPower(highp mat2 m, const int n) {
if(n==0) {
return mat2(1.0);
} else {
mat2 result = m;
for(int i=1; i < n; ++i) {
result = result * m;
}
return result;
}
}
这怎么可能?
答案 0 :(得分:1)
关键字const表示n
不可写,但它仍然是变量而不是常数!
n
随着对形参的调用传递的实际参数而变化。
注意在The OpenGL ES Shading Language 1.0的Appandix A中列出了OpenGL ES 2.0的可能限制:
支持for循环但具有以下限制:
- 条件有表格
loop_index relational_operator constant_expression
其中relational_operator是以下之一:>
>=
<
<=
==
或!=
在第5.10章中明确指出The OpenGL ES Shading Language 1.0的常量表达式,即const函数参数不是常量表达式:
常量表达式是其中之一 - 字面值(例如,5或真)
- 限定为const的全局或局部变量,不包括函数参数
- 由操作符在常量表达式操作数上形成的表达式,包括获取 常数向量或常数矩阵的元素,或常数结构的字段
- 一个构造函数,其参数都是常量表达式
- 内置函数调用,其参数都是常量表达式,但纹理查找函数除外。
一种解决方法是创建一个受常量表达式限制的循环,并通过条件将break
输出循环:
for (int i = 1; i < 10; ++i)
{
if ( i >= n )
break;
result = result * m;
}