链接程序时出现WebGL错误
WebGL Error in Linking Program
**更新**-我刚刚检查了它在Firefox中是否正常工作。确实如此。问题似乎在于Chromium如何处理WebGL。同样,请参阅下面的github链接。
我正在支持一个webgl/CV程序,当我注意到该网站开始从我没有接触过的代码中给出错误时。它抛出了一个错误,因为webgl程序没有正确链接。我觉得这很奇怪,因为当我最后一次接触这个项目的特定方面时(大约两个月前),它连接得很好。一些研究将我指向了这个链接:Github对问题的讨论
根据我的理解(如果我错了,请纠正我),有一个关于webgl如何处理不同类型变量的更新。我将发布着色器代码和使用它的函数,希望有人能指出一些我没有做过的测试。
this.createProgramObject = function(vetexShaderSource, fragmentShaderSource) {
var vertexShaderObject = this.ctx.createShader(this.ctx.VERTEX_SHADER);
this.ctx.shaderSource(vertexShaderObject, vetexShaderSource);
this.ctx.compileShader(vertexShaderObject);
if (!this.ctx.getShaderParameter(vertexShaderObject, this.ctx.COMPILE_STATUS)) {
throw this.ctx.getShaderInfoLog(vertexShaderObject);
}
var fragmentShaderObject = this.ctx.createShader(this.ctx.FRAGMENT_SHADER);
this.ctx.shaderSource(fragmentShaderObject, fragmentShaderSource);
this.ctx.compileShader(fragmentShaderObject);
if (!this.ctx.getShaderParameter(fragmentShaderObject, this.ctx.COMPILE_STATUS)) {
throw this.ctx.getShaderInfoLog(fragmentShaderObject);
}
var programObject = this.ctx.createProgram();
this.ctx.attachShader(programObject, vertexShaderObject);
this.ctx.attachShader(programObject, fragmentShaderObject);
this.ctx.linkProgram(programObject);
if (!this.ctx.getProgramParameter(programObject, this.ctx.LINK_STATUS)) {
throw ("Error linking shaders:" + this.ctx.getProgramInfoLog(programObject));
}
return programObject;
};
在这个特定的调用中,函数使用point.vert和basic.frag.
点.vert
attribute vec3 aVertexPosition;
attribute vec4 aVertexColor;
uniform mat4 uModelViewMatrix;
uniform mat4 uProjectionMatrix;
uniform float uPointSize;
//for undetermined point attenuation feature
// uniform vec3 uAttenuation;
uniform vec3 uBias;
uniform vec3 uScale;
uniform int uCEMode;
varying vec4 vColor;
void main(void) {
if(uCEMode == 1) {
//use bias and scale unifroms for min max color enhancement
vColor = (aVertexColor - vec4(uBias, 0.0)) * vec4(uScale, 1.0);
}
else {
vColor = aVertexColor;
}
vec4 ecPos4 = uModelViewMatrix * vec4(aVertexPosition, 1.0);
//make points larger as they get further away from the viewer
//helps to make the cloud look less sparse when far enough to only see
//the first level or two of the octree
gl_PointSize = length(ecPos4) / uPointSize * 3.0;
//for undetermined point attenuation feature
// float attn = uAttenuation[0] + (uAttenuation[1] * dist) + (uAttenuation[2] * dist * dist);
// gl_PointSize = (attn > 0.0 && attn < uPointSize) ? uPointSize * sqrt(1.0/attn) : uPointSize;
gl_Position = uProjectionMatrix * ecPos4;
}
基本碎片
varying highp vec4 vColor;
void main(void) {
gl_FragColor = vColor;
}
我能看到的vColor声明方式之间的唯一区别是highp说明符。如果我从basic.frag中删除它,它会显示"未捕获错误:0:1:'':没有为(float)指定精度"。如果我在point.vert中的声明中添加highp,则不会有任何变化。那么,我认为这个特定的说明符是好的。以下是Chrome中js控制台的错误消息:
Uncaught Error linking shaders:Varyings with the same name but different type, or statically used varyings in fragment shader are not declared in vertex shader: vColor
将其添加到片段着色器的顶部:
#ifdef GL_FRAGMENT_PRECISION_HIGH
precision highp float;
#else
precision mediump float;
#endif
然后从basic.frag.中删除"highp"
这也许可以,但我同意你给我们的信息不够确定。
-债券
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 我如何修复包含在captcha的addthis中的错误
- 未捕获的类型错误:在WebGL中使用Three.js键入错误
- 链接程序时出现WebGL错误
- WebGL错误-错误:WebGL:bindBuffer:buffer已包含元素数据
- Firefox中的WebGL VBO错误
- webGL 着色器错误
- 我的 webgl 着色器程序有什么问题:它在控制台中没有抛出任何错误
- WebGL纹理加载结果(Javascript)类型错误
- 错误:WebGL:超过了此主体的16个实时WebGL上下文,丢失了最近使用最少的一个
- WebGL Fragment Shader构造函数错误-参数太多
- 模式无效的WebGL drawArrays未生成错误
- Webgl / three js着色器错误
- 未捕获的错误:SECURITY_ERR: DOM Exception 18当在WebGL中应用纹理与Three.js
- OpenLayers 3.6.0 -在尝试使用WebGL渲染器时出现错误
- webGl着色器未捕获语法错误