0

我有这个错误

Error: Error #3661: AGAL validation failed: Temporary register index out of bounds for source operand 2 at token 5 of vertex program.

尝试转换此 GLSL 时:

attribute vec3 aVertexPosition;

    uniform mat4 uMVMatrix;
    uniform mat4 uPMatrix;

    void main(void) {
        gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
    }

到这段代码:

mov vt0.w, vc0.x
mov vt0.xyz, va0.xyz

mov vt1.xyzw, vc1
mul vt5.xyzw, vt1, vc5
m44 op.xyzw, vt0.xyzw, vt5

我该如何解决这个问题?有什么建议吗?谢谢!!!

4

1 回答 1

1

只有 8 个临时寄存器 vt0 - vt7。您试图在 vt5 中存储一个 4x4 矩阵,但它后面只有两个寄存器:没有足够的空间。

我建议您使用 vt1 来存储矩阵和接收矩阵乘法的内容:

mov vt0.w, vc0.x
mov vt0.xyz, va0.xyz

mov vt1, vc1
mul vt1, vt1, vc5
m44 op, vt0, vt1

唯一的问题是我认为 mul 不会进行真正的矩阵乘法,而是进行分量乘法,而 m44 在 4x4 矩阵和 4 分量向量之间进行乘法。根据我的阅读,我不确定如何在 agal 中将两个矩阵相乘。您可能必须在 actionscript 中进行矩阵乘法。让我知道发生什么事!

于 2013-02-24T17:59:03.703 回答