Stage3D перенос GLSL на AGAL

Я пытаюсь перенести эти шейдеры GLSL на Stage3D и AGAL, ​​но не могу заставить его работать:

Вершинный шейдер (GLSL)

attribute vec3 aVertexPosition;
    attribute vec4 aVertexColor;

    uniform mat4 uMVMatrix;
    uniform mat4 uPMatrix;

    varying vec4 vColor;

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

Фрагментный шейдер (GLSL)

    precision mediump float;

    varying vec4 vColor;

    void main(void) {
        gl_FragColor = vColor;
    }

Получив в результате:

Вершинный шейдер (AGAL)

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
mov v0.xyzw, va1.xyzw

Фрагментный шейдер (AGAL)

mov oc.xyzw, v0.xyzw

Вот след инструкций, которые я выполняю:

(setVertexBufferAt) va0 3 0
(setVertexBufferAt) va1 4 3
(identity setProgramConstantsFromMatrix): vc0 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1
(setProgramConstantsFromMatrix) vc1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,-2,1
(setProgramConstantsFromMatrix) vc5 1.8106601238250732,0,0,0,0,2.4142136573791504,0,0,0,0,-1.0020020008087158,-1,0,0,-0.20020020008087158,0
render drawTriangles + present

Но я все еще ничего не вижу.

Обновление: видимо проблема в том, что треугольник обрезается. Значения в умноженном массиве больше 1.0, что делает их вырезанными. Поэтому мне нужно найти способ нормализовать матрицу или расширить отсечение

Любое предложение?


person Mc-    schedule 12.02.2013    source источник
comment
Две мысли: 1. Что произойдет, если вы удалите .xyzw из доступа к регистрам матриц? 2. В va0 нет компоненты z. Похоже, у него есть только x и y (на основе вашей трассировки). Это верно?   -  person bwroga    schedule 13.02.2013
comment
@bwroga Я только что нашел одну из возможных причин.   -  person Mc-    schedule 14.02.2013


Ответы (1)


Копаю здесь старый пост, но ради любых будущих поисков вам действительно стоит проверить:

https://github.com/adobe/glsl2agal

Он работает почти так же, как и следовало ожидать - принимает на вход действительные программы шейдера вершин / фрагментов glsl, а на выходе выдает действительный агал.

в качестве примера: http://www.cmodule.org/glsl2agal/

person jordancpaul    schedule 16.07.2013