문제

GLSL 셰이더를 사용하는 프로젝트가 있습니다.

이 프로젝트는 무언가 잘못되거나 추가 디버그 출력을 명시 적으로 켜지 않는 한 STDOUT에 아무것도 인쇄하지 않도록 설계되었습니다.

셰이더 컴파일이 주어진 로그 길이에 실패하면 glGetProgramInfoLog > 0이고 때로는> 0이 성공하고 컴파일을 제공합니다. 경고 대신에. 완벽하게 컴파일하는 셰이더가 있으면 로그 길이는 <1입니다 ... 이것이 내 Dev 시스템의 NVIDIA 카드에서 작동하는 방법입니다.

내 죄를 위해, 나는 또한 인텔 통합 그래픽 카드가있는 노트북에 약간의 개발자를합니다. 코드는 잘 실행되지만 셰이더를 작성할 때마다 로그에는 다음이 포함됩니다.

"셰이더는 하드웨어에서 실행되도록 성공적으로 컴파일되었습니다"

어떤 종류의 문자열 분석과는 별도로 문자열을 인쇄 해야하는지 결정할 방법이 없기 때문에 매우 성가신 일입니다.

strstr("successfully",log)

왜 그것이 바람직하지 않은지 분명합니다. OpenGL API를 사용하여 메시지가 인쇄 할 가치가 있는지 어떻게 알 수 있습니까?

편집하다:

내가 사용하는 경우 glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err); 그런 다음 컴파일 경고를 얻지 못하고 오류 만 얻습니다.

도움이 되었습니까?

해결책

여기에 간다 :

glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);
if(!err) { /* now print out the error log */ }

이것은 당신이 얻는 유일한 컴파일 상태입니다. 경고가 있는지 판단 할 수있는 휴대용 방법은 없습니다. (컴파일 로그는 성공 알림을 포함하여 구현이 신청하는 모든 것을 가득 채울 수 있습니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top