1

在 Chrome 22 和 Firefox 15 中编译此 WebGL 片段着色器时:

precision mediump float;
uniform vec2 u_resolution;
uniform sampler2D u_tex;
void main() {
    vec2 texCoord = gl_FragCoord.xy / u_resolution;
    vec4 floatColor = texture2D(u_tex, texCoord);
    mat3 outerMat = outerProduct(floatColor.rgb,floatColor.rgb);
    gl_FragColor = vec4(outerMat[0], 1);  
}

我收到此错误:

ERROR: 0:8: 'outerProduct' : no matching overloaded function found
ERROR: 0:8: '=' :  cannot convert from 'const mediump float' to '3X3 matrix of float'

OpenGL ES 2.0 GLSL 规范表示mat3 outerProduct(vec3,vec3)支持,WebGL 规范表示它接受 ES 着色器,所以我不确定出了什么问题。WebGL 片段着色器不支持 outerProduct,还是我做错了什么?

4

3 回答 3

2

OpenGL ES 2.0 GLSL中没有outerProduct函数。你在哪里读到的?(或者我错过了它?)

这是规范 http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf

于 2012-10-03T02:21:57.950 回答
0

尝试mat3 outerMat = outerProduct(vec3(floatColor.rgb),vec3(floatColor.rgb));

为了扩展,也许给它一个显式类型比使用 .rgb 更好。

于 2012-10-02T22:52:31.570 回答
0

它现在可用于 webGL2。在此处检查您的系统:https ://webglreport.com/?v=2

于 2020-05-30T19:50:14.213 回答