2017-10-29 18 views
0

다른 PC에 AMD 드라이버에 내가 셰이더를 컴파일하려고하고, 하나의 PC에 인텔 HD에 컴파일되어 있지만.GLSL 오류 : "부동 또는 INT해야 유형"

버텍스 쉐이더 :

#version 330 
precision mediump float; 
precision lowp sampler2D; 

uniform mat4 ProjectionMatrix; 
uniform mat4 ModelViewMatrix; 
uniform mat4 WorldViewMatrix; 
in vec3 position; 
in vec2 TexCoord; 
out vec2 texCoord; 

void main() { 
    texCoord = TexCoord; 
    gl_Position = ProjectionMatrix * ModelViewMatrix * WorldViewMatrix * vec4(position, 1); 
} 

조각 쉐이더 : AMD 드라이버에

#version 330 
precision mediump float; 
precision lowp sampler2D; 

uniform vec4 TextureHueColor; 
uniform sampler2D TextureUnit; 
in vec2 texCoord; 
out vec4 gl_FragColor; 

void main() { 
    gl_FragColor = texture(TextureUnit, texCoord) * TextureHueColor; 
} 

, 나는 점점 오전 :

Vertex shader failed to compile with the following errors: 
ERROR: 0:3: error(#228) Type should be float or int 
ERROR: error(#273) 1 compilation errors. No code generated 

저는 초보자입니다, 그리고이 그게 뭐가 잘못 됐는지 몰라. 내가 쉐이더, 괜찮아 보인다. 누구라도 무슨 일이 일어 났는지 알아봐? GLSL 3.30에서

+1

봅니다'정밀 lowp sampler2D를 제거;'. – HolyBlackCat

+0

@ MathuSumMut : 그럼 제대로 제거하지 않았을 것입니다. 그렇게했다면 3 행은 빈 공간이나 주석이 될 것이고 어느 것도 동일한 오류가 발생할 수 있습니다. 따라서 * 다른 오류가 있거나 문장을 삭제했다고 생각할 수도 있습니다. –

+1

@MathuSumMut : 디버깅 기술을 사용하십시오. 그 줄 번호 앞에 파일에 오류를 만들고 무슨 일이 일어나는 지보십시오. 또는 코드를 디버그하고'glShaderSource'에 전달하기 전에 문자열을 읽으십시오. * 당신이 실제로 끈을 바꿨다고 입증하십시오. 지금 당장은 모든 증거가 당신에게 그렇게하지 않았 음을 알려줍니다. –

답변

5

기본 precision 한정자 샘플러 유형에 적용 할 수 없습니다. 또는 int 또는 float 이외의 유형.

또한, 참고 : (GLSL ES 반대) 데스크탑 GLSL을 사용하는 경우, precision 예선는 아무것도 달성하지 않습니다. 그들은 무시됩니다. GLSL ES 쉐이더와의 호환성을 위해서만 존재합니다.

+0

은 분명히, https://stackoverflow.com/a/6336285/5007383에 따르면,'정밀 lowp sampler2D는,'만의 OpenGL ES, 일반되지는 OpenGL에서 유효한 문입니다. 당신의 도움을 주셔서 감사합니다. :) –

+1

@MathuSumMut : 나는 좀 더 파고를했고, 내 문 GLSL 3.30에 사실이었다, 그러나 결국 샘플러 유형 (나중에 어떤 불투명 한 유형) 할 수 있도록 4.40에서 변경된 것을 발견했다. 그래서 AMD의 드라이버가 맞습니다. –