2012-08-01 4 views
2

나는 다음과 같은 오류를 얻을 : 그 문제를 해결하는 방법을 알고 있지만이 일어날 수있는 이유가에 발생 기계의 OpenGL 3.1이로GLSL 제복 초기화가 GLSL 버전에서 허용되는 1.20

WARNING: uniforms initializing is allowed from GLSL version 1.20 
WARNING: Only GLSL version > 110 allows postfix "F" or "f" for float 

, 내가 궁금해하고 그래서 GLSL 1.4 가지고

12:40:58 [INFO] Intel(R) HD Graphics Family 
12:40:58 [INFO] OpenGL 3.1.0 - Build 8.15.10.2509 

EDIT :

uniform sampler2D sampler; 
uniform sampler2D bump; 

uniform float imageSize; 
uniform float range = 50; 

void main() { 
    vec2 pos = gl_TexCoord[0].xy; 

    float height = texture2D(bump, gl_TexCoord[0].xy).r - 0.5; 

    pos.y += height * range/imageSize; 

    gl_FragColor = texture2D(sampler, pos); 

      //gl_FragColor = texture2D(sampler, pos) * (1 + (height - 0.3f) * 25); 
} 
: 해당 셰이더 (NO 정점 셰이더 포함)의 fragment 쉐이더이고
+4

#version 지시문을 지정 했습니까? 각 셰이더에 어떤 버전을 사용할지 선언해야합니다. – Tim

+1

항상 관련 정보를 제공하십시오. 이 경우, 문제의 쉐이더와 같습니다. –

+0

@Tim 아니, 고마워, 그걸 시도하고있어. – DiddiZ

답변

6

GLSL 사양에서는 쉐이더가 #version directive을 제공하지 않으면 버전 1.10을 사용한다고 가정합니다. 셰이더 맨 위에 항상 #version 지시문을 제공해야합니다.

+0

그래, 그게 다야. 인텔이 사양을 엄격하게 해석하는 것처럼 보입니다. 적어도 버전과 모든 Ati 및 Nvidea 그래픽 카드로 실행되었습니다. – DiddiZ