我正在尝试将此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,这使得它们被剪掉。所以我需要找到一种规范矩阵的方法或者扩展剪辑
有什么建议吗?
答案 0 :(得分:0)
在这里挖掘旧帖子,但为了将来的搜索,您应该查看:
https://github.com/adobe/glsl2agal
它的工作原理与您希望的一样 - 将有效的glsl顶点/片段着色器程序作为输入,将有效的agal作为输出吐出。