渲染WebGL ...属性设置为零时特定于Windows的问题?

时间:2014-12-14 17:40:54

标签: javascript windows webgl typed-arrays

我正在使用WebGL遇到难以调试的问题。我正在为CraftyJS游戏框架实现WebGL后端。在OSX,Linux和Android上一切都运行得非常好,但是当一个合作者在Windows上测试时出现了一个重要的错误 - 旋转的精灵呈现为未旋转!我能够通过IE,Chrome和Firefox复制这个。我使用的vertex program类型的示例,它只是呈现彩色矩形:

attribute vec2 aPosition;
attribute vec3 aOrientation;
attribute vec4 aExtra;
attribute vec4 aColor;

varying lowp vec4 vColor;

uniform  vec4 uViewport;

mat4 viewportScale = mat4(2.0 / uViewport.z, 0, 0, 0,    0, -2.0 / uViewport.w, 0,0,    0, 0,1,0,    -1,+1,0,1);
vec4 viewportTranslation = vec4(uViewport.xy, 0, 0);

vec2 entityOrigin = aOrientation.xy;
mat2 entityRotationMatrix = mat2(cos(aOrientation.z), sin(aOrientation.z), -sin(aOrientation.z), cos(aOrientation.z));

void main() {
  vec2 pos = aPosition;
  pos = entityRotationMatrix * (pos - entityOrigin) + entityOrigin ;
  gl_Position = viewportScale * (viewportTranslation + vec4(pos, 1.0/(1.0+exp(aExtra.x) ), 1) );
  vColor = vec4(aColor.rgb*aColor.a*aExtra.y, aColor.a*aExtra.y);
}

问题似乎与aOrientation属性有关 - 它用于计算旋转矩阵。使用Firefox的着色器编辑器,如果我手动指定entityOriginentityRotationMatrix,则程序将正确呈现。但默认情况下,它呈现的方式好像aOrientation属性的所有组件都只是0.着色器的每个其他方面(定位+尺寸,颜色,Alpha透明度,视口缩放/平移)似乎都可以正常工作;它唯一依赖于aOrientation的行为是破坏的,而且似乎只在Windows上运行。

由于我不经常访问Windows机器,因此很难调试。是否存在任何特定于Windows的(或特定于硬件/驱动程序的?)问题,这些问题可能会以某种方式导致设置某个特定属性的问题?

1 个答案:

答案 0 :(得分:0)

想出来,一旦我真的有时间坐下来使用Windows机器和实验 - 编译器正在“优化”我在windows上的属性。我想这可能是驱动程序/平台/硬件依赖。

解决方案是将以下行放在main()内而不是在其外部。

vec2 entityOrigin = aOrientation.xy;
mat2 entityRotationMatrix = mat2(cos(aOrientation.z), sin(aOrientation.z), -sin(aOrientation.z), cos(aOrientation.z));

我想我真的不明白main内部的代码和它之外的代码之间的区别。有待观察的东西! :)