Ошибка № 3661: сбой проверки AGAL: Временный индекс регистра выходит за пределы

У меня есть эта ошибка

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

Как я могу решить это? Любое предложение? Спасибо!!!

1 ответ

Решение

Есть только 8 временных регистров vt0 - vt7. Вы пытаетесь сохранить матрицу 4x4 в vt5, но после нее есть только два регистра: недостаточно места.

Я предлагаю вам использовать 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. Позвольте мне знать, что происходит!

Другие вопросы по тегам