簡體   English   中英

無法在頂點着色器中設置輸入位置

[英]Unable to set the location for input in vertex shader

我在 Unix 19.04 操作系統中將 Qt 5.13 與 opengl 4.4 和 3.3 用於 GLSL。

請注意,我使用 QOpenGLWindow 作為 Qt 應用程序的主窗口。

我正在嘗試正確鏈接 opengl 頂點着色器的輸入。 我試過這兩種方法:

1.使用GLSL中的“location”關鍵字,我寫了這個頂點着色器,但在嘗試編譯這個頂點着色器時仍然有問題:

#version 330 core\n
layout (location = 0) in vec3 vertex_position;\n
layout (location = 1) in vec3 vertex_color;\n
layout (location = 2) in vec2 vertex_texcoord;\n
out vs_position;\n
out vs_color;\n
out vs_texcoord;\n
void main() {\n
 vs_position = vertex_position;\n
 vs_color = vertex_color;\n
 vs_texcoord = vec2(vertex_texcoord.x, vertex_texcoord.y*-1.0f);\n
 gl_Position = vec4(vertex_position, 1.0f);\n
}

在嘗試編譯所有這些之后,我從 infolog 中得到了這個錯誤:

0:5(16): 錯誤:語法錯誤,意外的“;”,期待“{”。

2-我嘗試的另一種嘗試是使用“屬性”關鍵字,

相同的代碼,但編輯以 'layout' 字開頭的三行:

attribute vec3 vertex_position;\n
attribute vec3 vertex_color;\n
attribute vec2 vertex_texcoord;\n

之后,我使用 glBindAttribLocation() 將屬性與其位置綁定:

...
 m_functions->glBindAttribLocation(vertex_shader, 0, "vertex_position");
 m_functions->glBindAttribLocation(vertex_shader, 1, "vertex_color");
 m_functions->glBindAttribLocation(vertex_shader, 2, "vertex_texcoord");
 m_functions->glAttachShader(shader_program, vertex_shader);
 m_functions->glLinkProgram(shader_program);
...

(其中 m_functions 是:

 initializeGL() {
 m_functions = context->functions();
 ...}

)

並且仍然得到同樣的錯誤!

我嘗試了上面提到的方法,但都對我不起作用!

我使用的是傳統方式(函數以 gl... 開頭),而不是使用 Qt 中提供的類!

該錯誤與布局位置限定符或頂點着色器輸入變量和屬性無關。
但是頂點着色器輸出變量的聲明中缺少類型規范:

 out vs_position; out vs_color; out vs_texcoord;

它一定要是:

out vec3 vs_position;
out vec3 vs_color;
out vec2 vs_texcoord;

注意, 0:5(16)在錯誤消息0:5(16): error: syntax error, unexpected ';', expecting '{'. . 表示第 5 行和第 16 個符號。
第 5 行的第 16 個符號是分號 ( ; ),這是出乎意料的,因為out vs_position不是有效的聲明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM