>  기사  >  백엔드 개발  >  GLSL 조각 셰이더가 메시지 없이 컴파일되지 않습니다.

GLSL 조각 셰이더가 메시지 없이 컴파일되지 않습니다.

PHPz
PHPz앞으로
2024-02-14 12:18:09493검색

GLSL 片段着色器无法编译且没有任何消息

php 편집자 Yuzai는 컴파일 중에 GLSL 프래그먼트 셰이더에 문제가 발생했지만 오류 메시지가 없음을 발견했습니다. 이로 인해 개발자는 무엇이 잘못되었는지 혼란스러워할 수 있습니다. 이 문제를 해결하기 전에 가장 먼저 명확히 해야 할 것은 일반적으로 컴파일러가 오류 메시지를 생성하지 않았거나 오류 메시지가 무시되었기 때문에 오류 메시지가 없다는 것입니다. 다음으로 가능한 원인을 단계별로 해결하여 해결책을 찾아야 합니다.

질문 내용

저는 OpenGl용 go-GL 바인딩을 사용하고 있습니다.

두 셰이더의 소스를 다음과 같이 정의했습니다.

으아악

Vertex 셰이더는 문제 없이 생성 및 컴파일됩니다.

다음은 프래그먼트 셰이더를 생성하고 컴파일하는 코드입니다.

으아악

다음을 출력합니다(안타깝게도 정보 로그 메시지가 없음).

으아악

버전core/compatibility 之间切换,更改 FragColor 的名称以及 vec4에서는 다른 값을 시도했습니다.

댓글도 달아보았습니다if 块并继续创建该程序。检查程序的块输出一个错误,这是预期的,因为着色器未编译: error: linking with uncompiled/unspecializedshader

프래그먼트 셰이더를 컴파일하는 방법에 대한 피드백이 있나요?

Solution

전화glShaderSource() 仅设置源着色器的代码。它无法编译。之后需要单独调用glCompileShader(). 으아악

원인 gl.GetShaderiv()gl.GetShaderiv()gl.COMPILE_STATUS 结果 successgl.FALSE。是因为如果上次编译成功, gl.COMPILE_STATUS 只会产生 gl.TRUE 。但是,由于您从未调用过 gl.CompileShader(),因此之前没有成功编译,因此您收到 gl.FALSEgl.COMPILE_STATUS 결과는 성공gl.FALSE입니다. 이는 gl.COMPILE_STATUS가 마지막 컴파일이 성공한 경우에만 gl.TRUE를 생성하기 때문입니다. 그러나 gl.CompileShader()를 호출한 적이 없으므로 이전에 성공적인 컴파일이 없었으므로 gl.FALSE가 수신됩니다. 또한 지금까지 오류가 없었기 때문에 정보 로그가 비어 있습니다.

위 내용은 GLSL 조각 셰이더가 메시지 없이 컴파일되지 않습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제