首頁  >  文章  >  後端開發  >  GLSL 片段著色器無法編譯且沒有任何訊息

GLSL 片段著色器無法編譯且沒有任何訊息

PHPz
PHPz轉載
2024-02-14 12:18:09541瀏覽

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

php小編魚仔發現,GLSL 片段著色器在編譯時遇到問題,卻沒有任何錯誤訊息。這可能讓開發者感到困惑,不知道出了什麼問題。在解決這個問題之前,首先要明確的是,沒有錯誤訊息通常是因為編譯器沒有產生任何錯誤訊息,或者錯誤訊息被忽略了。接下來,我們需要逐步檢視可能的原因,以找到解決方法。

問題內容

我正在使用 OpenGl 的 go-gl 綁定。

我定義了兩個著色器的來源,如下所示:

<code>const vertexShaderSource = `#version 460 compatibility
layout (location = 0) in vec3 aPos;
void main()
{
    gl_Position = vec4(aPos, 1.0);
}` + "\x00"
const fragmentShaderSource = `#version 460 compatibility
out vec4 FragColor;
void main()
{
    FragColor = vec4(0.5f, 0.1f, 0.1f, 1.0f);
}` + "\x00"
</code>

頂點著色器的建立和編譯都沒有問題。

以下是建立和編譯片段著色器的程式碼:

<code>fragmentShader := gl.CreateShader(gl.FRAGMENT_SHADER)
fragmentShaderSourceC := gl.Str(fragmentShaderSource)
gl.ShaderSource(fragmentShader, 1, &fragmentShaderSourceC, nil)
gl.GetShaderiv(fragmentShader, gl.COMPILE_STATUS, &success)
if success != gl.TRUE {
    var length int32
    infoLogC := [LOGSIZE]uint8{}
    gl.GetShaderInfoLog(fragmentShader, LOGSIZE, &length, &infoLogC[0])
    infoLog := gl.GoStr(&infoLogC[0])
    fmt.Printf("Got failure from fragment shader: %s\n", infoLog)
    fmt.Printf("gl version: %s\n", gl.GoStr(gl.GetString(gl.VERSION)))
    fmt.Printf("gl vendor: %s\n", gl.GoStr(gl.GetString(gl.VENDOR)))
    return
}
</code>

輸出以下內容(令人沮喪的是,沒有資訊日誌訊息):

Got failure from fragment shader: 
gl version: 4.6 (Compatibility Profile) Mesa 23.0.4-0ubuntu1~23.04.1
gl vendor: Intel

我嘗試在版本 core/compatibility 之間切換,更改 FragColor 的名稱以及 vec4 中的不同值。

我還嘗試註解掉 if 區塊並繼續建立該程式。檢查程式的區塊輸出一個錯誤,這是預期的,因為著色器未編譯: error: linking with uncompiled/unspecializedshader

#有關如何編譯片段著色器的任何回饋嗎?

解決方法

呼叫 glShaderSource()# 僅設定來源著色器的程式碼。它無法編譯。之後需要單獨呼叫glCompileShader()#。

gl.ShaderSource(fragmentShader, 1, &fragmentShaderSourceC, nil)
gl.CompileShader(fragmentShader)

原因 gl.GetShaderiv()gl.COMPILE_STATUS 結果 successgl.FALSE。是因為如果上次編譯成功, gl.COMPILE_STATUS 只會產生 gl.TRUE 。但是,由於您從未呼叫過 gl.CompileShader(),因此之前沒有成功編譯,因此您收到 gl.FALSE。此外,由於到目前為止還沒有任何錯誤,因此資訊日誌也是空的。

以上是GLSL 片段著色器無法編譯且沒有任何訊息的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除