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”>

함수. 그러나 최신 코드에서는 이전 기능을 권장하지 않습니다. 그러면 두 가지 질문이 남습니다.

  1. 왜 이런 일이 발생 했습니까? 이러한 PC에 구형 드라이버가 설치되어 있었기 때문일 수 있습니까?

  2. 새로운 지침을 따르고 구형 컴퓨터에서 실행 가능하게하려면 어떻게해야합니까? ? 두 개의 다른 쉐이더를 사용하고 프로그램이 버전을 결정하도록하는 것에 대해 생각했지만 확실하지 않습니다.

답변

매크로를 사용할 수 있습니다.

#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이 사용할 버전을 결정합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다