2011-10-22 3 views
1

포인트 스프라이트 용 셰이더를 만들고 싶습니다. 이제까지 iOS에서 모든 것이 작동하고 있습니다. 하지만 맥 OS X의 내 버텍스 쉐이더에 :Mac에서 gl_PointCoord를 사용할 수 없습니까?

attribute vec4 position; 
attribute vec4 color; 
attribute vec2 texcoord; 

varying vec4 colorVarying; 

uniform mat4 modelViewProjectionMatrix; 
uniform float pointSize; 

void main() 
{ 
    gl_Position = modelViewProjectionMatrix * position; 
    colorVarying = color; 
    gl_PointSize = pointSize; 
} 

내 조각 쉐이더 :

varying lowp vec4 colorVarying; 
uniform lowp float textureFlag; 
uniform sampler2D texture; 

void main() 
{ 
    gl_FragColor = textureFlag * texture2D(texture, gl_PointCoord) * colorVarying + 
    (1.0 - textureFlag) * colorVarying; 

} 

조각 쉐이더 때문에 "gl_PointCoord"의, Mac에서 컴파일되지 않습니다. Mac에서는 쉐이더에 "#define lowp"전 처리기를 추가했습니다.

쉐이더 상단에 "#version 120 \ n"을 추가하면 Mac에서 제대로 컴파일되지만 아무 것도 표시되지 않습니다 (iOS에서는 #version을 사용하는 경우 작동하지 않음). 버전 1.2가 "lowp"를 놓치기 때문에 쉐이더 상단에있는 태그).

이유는 무엇일까요? 내 Mac은 GLSL 1.2를 사용한다고 말합니다. (gl_PointCoord가 추가 된 것 같습니다). 아이디어가 있으십니까?!?

답변

3

상단에 #version 지시어가없는 GLSL 셰이더는 1.10으로 가정합니다. 아마 당신이 원하는 것이 결코 아니기 때문에 항상#version 지시어를 사용하십시오.

데스크톱 OpenGL과 OpenGL ES는 다릅니다. 데스크톱 GL 구현을 통해 ES 쉐이더에 피드를 시도하는 것은 작동하지 않을 수도 있습니다. 따라서 쉐이더를 적절히 수정해야합니다.

3

스레드 necromancy의 비트지만, 일부 문제 GLES20 코드를 포팅 같은 문제에 직면했다.

gl_PointCoord manual에는 버전 1.10에서 gl_PointCoord가 지원되지만 GLSL 1.10 사양에는 해당 기능에 대한 언급조차 없습니다.

또한 §1.2 of the 1.20 spec에는 gl_PointCoord 지원이 추가되었다는 내용이 명확하게 나와 있습니다.

그래, glsl 설명서가 잘못되어있는 것처럼 보이고 gl_PointCoord에 대한 지원이 버전 1.2부터 시작됩니다. 다른 사람 (최근 엔비디아는) 멋진 error C7532: global variable gl_PointCoord requires "#version 120" or later을 발프 반면

골치 아픈 부분은 일부 디스플레이 드라이버가 행복하게 컴파일하고 #version 110와 GLSL 쉐이더를 실행하는 것입니다 및 gl_PointCoord 호출합니다.

관련 문제