SDL과 OpenGL의 조합에서 실행되는 소형 엔진을 개발하고 있었는데이 엔진을 학교 프로젝트에 사용하고 싶었 기 때문에 테스트해야했습니다. 성능을보기 위해 학교 PC에서. 이로 인해 셰이더 컴파일 오류가 발생했습니다.
Shader compile ERROR
DEBUG INFO: ERROR: 0:12: "texture" : no matching overloaded function found (using implicit conversion)
ERROR 0:12: "=" : cannot convert from "const float" to "4-component vector of float"
Failed to load uniform
이것은 오류가 발생한 내 프래그먼트 셰이더입니다.
#version 130 in vec4 fragmentColor; in vec2 fragmentUV; out vec4 color; uniform float time; uniform sampler2D mySampler; void main(){ vec4 textureColor = texture(mySampler, fragmentUV); color = textureColor * fragmentColor; }
iv id =를 사용하여 해결했습니다. texture
대신 “32139d2eef”>
함수. 그러나 최신 코드에서는 이전 기능을 권장하지 않습니다. 그러면 두 가지 질문이 남습니다.
-
왜 이런 일이 발생 했습니까? 이러한 PC에 구형 드라이버가 설치되어 있었기 때문일 수 있습니까?
-
새로운 지침을 따르고 구형 컴퓨터에서 실행 가능하게하려면 어떻게해야합니까? ? 두 개의 다른 쉐이더를 사용하고 프로그램이 버전을 결정하도록하는 것에 대해 생각했지만 확실하지 않습니다.
답변
매크로를 사용할 수 있습니다.
#if __VERSION__ < 130 #define TEXTURE2D texture2D #else #define TEXTURE2D texture #endif ... vec4 textureColor = TEXTURE2D(mySampler, fragmentUV);
이 답변 을 찾았습니다. .
답변
가정용 PC는 학교용 PC보다 셰이더 버전이 더 높을 것입니다. 나이가 많다. 이전 glsl 버전은 texture2d
기능을 사용했지만 최신 버전은 texture
를 사용했습니다.
필요하지 않습니다. 2 가지 셰이더 코드가있는 경우 전처리기로 동적으로 만들 수 있습니다.
#if __VERSION__ > 120 color = texture(sampler, texCoord); #else color = texture2D(sampler, texCoord); #endif
코드가 컴파일되면 OpenGL이 사용할 버전을 결정합니다.