2014-07-14 3 views
3

OpenGL 쉐이더 빌더 v2.2.2를 사용 중이며 책에서 샘플 코드를 가져 왔습니다.컴파일시 OpenGL 쉐이더 빌더 오류가 발생했습니다.

#version 140 

uniform vec3 CoolestColor; 
uniform vec3 HottestColor; 

in float Temperature; 
out vec4 FragmentColor; 

void main() 
{  
    vec3 color = mix(CoolestColor, HottestColor, Temperature); 
    FragmentColor = vec4(color, 1.0); 
} 

내 문제 정점 셰이더

#version 140 
uniform float CoolestTemp; 
uniform float TempRange; 
uniform mat4 MVPMatrix; 
in vec4 mcVertex; 
in float VertexTemp; 

out float Temperature; 
void main() { 

    Temperature = (VertexTemp - CoolestTemp)/TempRange; 
    gl_Position = MVPMatrix * mcVertex; 
} 

및 프래그먼트 쉐이더 버전 (140) 및 (320)는 지원되지 않기 때문에,이 코드를 실행한다. 그런 다음 버전을 제거하려고했는데 컴파일러에서 "전역 변수 컨텍스트에서 유효하지 않은 한정자"를 사용하고 'out'에 대해 동일하게 변경 한 다음 '다양하지만'조각 쉐이더에서 안으로/밖으로 교체하려고했습니다. "할당의 왼쪽 편 읽기 전용이 아니어야 함 "오류가 나타납니다. 버텍스 쉐이더의 경우 다양한 필드에 대한 경고는 다음 단계에서 읽지 않습니다. 예전 스타일의 코드를 새 것으로 수정하는 방법을 어떻게 알 수 있습니까? 그래서 GLSL을 처음 접했습니다.

답변

8

이전 이름에서 새 이름으로가는 것이 훨씬 더 일반적입니다. 당신이 다른 방법이 필요하지만, 버텍스 쉐이더의 변환은 다음과 같습니다

in --> attribute 
out --> varying 

조각 쉐이더의 경우 : 프레 그먼트 쉐이더의 out를 들어

in --> varying 
out --> (delete) 

, 당신은 변수의 선언을 삭제할 수 있습니다 . 대신 내장 된 gl_FragColor 변수를 사용하십시오. 귀하의 예를 들어

, 버텍스 쉐이더는 다음과 같이 표시됩니다

uniform float CoolestTemp; 
uniform float TempRange; 
uniform mat4 MVPMatrix; 
attribute vec4 mcVertex; 
attribute float VertexTemp; 
varying float Temperature; 

void main() { 
    Temperature = (VertexTemp - CoolestTemp)/TempRange; 
    gl_Position = MVPMatrix * mcVertex; 
} 

그리고 조각 쉐이더 :

uniform vec3 CoolestColor; 
uniform vec3 HottestColor; 
varying float Temperature; 

void main() { 
    vec3 color = mix(CoolestColor, HottestColor, Temperature); 
    gl_FragColor = vec4(color, 1.0); 
} 
+0

을 마지막으로 몇 가지 명확한 정보, 대단히 감사합니다! – dan

관련 문제