[英]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.