2015-02-05 58 views
1

我收到這個錯誤,我無法訪問的PC上。非法矢量字段選擇長度

錯誤出現在深度剝離技術的init程序的Vertex Shader中。

ERROR: 0:42: error(#222) Illegal vector field selection length 
ERROR: 0:42: error(#222) Illegal vector field selection length 
ERROR: error(#273) 2 compilation errors. No code generated 

這是VS:

#version 330 

layout (location = 0) in vec3 position; 
layout (location = 1) in vec3 normal; 
layout (location = 2) in vec2 uv; 

out vec3 cameraSpacePosition; 
out vec3 cameraSpaceNormal; 

out vec2 oUV; 

uniform mat4 modelToWorldMatrix; 
/* 
* Layout {lighting, normal orientation, hasTexture, selected} 
*/ 
uniform ivec4 settings; 

layout(std140) uniform vehicleMatrices { 
    mat4 worldToCameraMatrix; 
    mat4 cameraToClipMatrix; 
}; 

void main() 
{ 
    vec4 c = worldToCameraMatrix * (modelToWorldMatrix * vec4(position, 1.0)); 
    gl_Position = cameraToClipMatrix * c; 

    cameraSpacePosition = c.xyz; 
    cameraSpaceNormal = mat3(worldToCameraMatrix) * (mat3(modelToWorldMatrix) * normal); 

    switch (settings.y) { 

     case 0: 
      cameraSpaceNormal = -cameraSpaceNormal; 
      break; 

     case 1: 
      float cosine = dot(cameraSpacePosition, cameraSpaceNormal)/(cameraSpacePosition.length * cameraSpaceNormal.length); 
      if (cosine > 0) 
       cameraSpaceNormal = -cameraSpaceNormal; 
      break; 
    } 
    oUV = uv; 
} 

我從來沒有與它有問題之前,我dev的大多Nvidia和這一個來自配備了ATI的FirePro M7740

我一臺機器也嘗試谷歌,當然,但沒有結果與引用的句子:「非法矢量字段選擇長度」..

我檢查了幾十次,它看起來很好,我,沒有任何向量長度上的錯誤..

任何線索?

回答

0

的問題到底是什麼錯誤消息說:

非法矢量場選擇長度

在您嘗試使用length作爲一個字段選擇唯一的線是這個(換行符添加):

float cosine = dot(cameraSpacePosition, cameraSpaceNormal)/
       (cameraSpacePosition.length * cameraSpaceNormal.length); 

length此用法無效。有在GLSL的length兩個有效用法:

  1. 作爲上數組變量的方法,以找到在數組中元素的數目。如果a是一個數組變量,那麼可以編寫a.length()來獲取元素的數量。請注意括號。
  2. 作爲計算矢量長度的內置函數。如果v是一個向量,則長度計算爲length(v)。請注意函數語法。

根據上下文,你要找的選項2的正確語法該線路是:

float cosine = dot(cameraSpacePosition, cameraSpaceNormal)/
       (length(cameraSpacePosition) * length(cameraSpaceNormal)); 
+0

我還沒有測試它,但看在GLSL文檔,你是對的。感謝您的提示,Reto – elect 2015-02-09 09:56:07

+0

Reto,在Nvidia上工作,在Amd不..這是否意味着Nvidia驅動程序正在通過重新編譯來修復它? – elect 2015-04-16 09:10:16