提示コードの/////コメント内部のコードですがglGetAttribLocation();関数にて-1というエラーが発生してしまいます。-1
呼んだ関数の引数の値が無効な値もしくは範囲外の場合 という意味なのですがなぜこういったエラーが発生するのでしょうか?
glGetEroor();関数では0x01と表示され同じエラーコードの意味でした。
調査したこと。
program変数でエラーが出てないかどうか?確認しましたが出ていません。
上の二つのlayoutが設定できているならprogram変数には問題がないのです。
参考サイト: https://qiita.com/_ydah/items/da56763e94ba58af3d91
glsl
1/*######################################################################### 2# フォング 頂点シェーダー 3###########################################################################*/ 4#version 330 5#extension GL_ARB_explicit_attrib_location: enable 6 7 8 9 10// ###################### 頂点属性 ###################### 11layout(location = 0) in vec2 vertexPosition; //頂点座標 12layout(location = 1) in vec2 vertexUV; //UV座標 13layout(location = 2) in vec3 vertexNorm; //法線 14 15// ###################### 出力 ###################### 16layout(location = 3) out vec2 vUV; //UV 17layout(location = 4) out vec3 vNorm; //法線 18 19// ###################### Unifrom ###################### 20uniform mat4 uScale; //スケール 21uniform mat4 uRotate; //回転 22uniform mat4 uTranslate; //平行移動 23 24uniform mat4 uViewProjection; //ビュープロジェクション行列 25 26 27 28 29void main() 30{ 31 vec4 vertex = vec4(vertexPosition,0.0,1.0); //頂点座標 32 mat4 model = uTranslate * uRotate * uScale; //モデル行列 33 gl_Position = (uViewProjection * model) * vertex; 34 35 vNorm = vertexNorm; 36 37 38 39 vUV = vertexUV; //UV座標 40}
cpp
1 2 //テクスチャ関係 3 textureID = std::vector<TextureData>(0); //テクスチャーデータ 4 textureUnitCount = 0; //テクスチャユニット数をカウント 5 6 //vao 7 glGenVertexArrays(1, &vao); 8 glBindVertexArray(vao); 9 10 //vbo 11 glGenBuffers(1, &vbo); 12 glBindBuffer(GL_ARRAY_BUFFER, vbo); 13 14 //頂点 15 GLint attrib = getAttribLocation("vertexPosition"); 16 glEnableVertexAttribArray(attrib); 17 glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(VertexUV), rectangleVertex, GL_DYNAMIC_DRAW); 18 glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 7 * sizeof(GLfloat), (GLvoid*)0); 19 setBindAttribVertex("vertexPosition"); 20 21 //UV 22 attrib = getAttribLocation("vertexUV"); 23 glEnableVertexAttribArray(attrib); 24 glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(VertexUV), rectangleVertex, GL_DYNAMIC_DRAW); 25 glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 7 * sizeof(GLfloat), (GLvoid*)(sizeof(GLfloat) * 2)); 26 setBindAttribVertex("vertexUV"); 27 28//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 29 //Norm 30 attrib = getAttribLocation("vertexNorm"); 31 std::cout << attrib << std::endl; 32 glEnableVertexAttribArray(attrib); 33 glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(VertexUV), rectangleVertex, GL_DYNAMIC_DRAW); 34 glVertexAttribPointer(attrib, 3, GL_FLOAT, GL_FALSE, 7 * sizeof(GLfloat), (GLvoid*)(sizeof(GLfloat) * 4)); 35 setBindAttribVertex("vertexNorm"); 36//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
glsl
1/*######################################################################### 2# フォング フラグメントシェーダー 3###########################################################################*/ 4#version 330 5 6#extension GL_ARB_explicit_attrib_location: enable 7 8// ###################### 入力 ###################### 9layout(location = 3) in vec2 vUV; //UV座標 10layout(location = 4) in vec3 vNorm; //法線 11 12// ###################### Unifrom ###################### 13uniform sampler2D uImage; //イメージ 14 15//出力 16out vec4 fragment; 17 18void main() 19{ 20 21 fragment = texture(uImage,vUV); 22}
cpp
1 2//頂点シェーダーに属性変数を関連ずける 3void FrameWork::Shader::setBindAttribVertex(const char* str) 4{ 5 GLint n = glGetAttribLocation(program, str); 6 7 //エラー処理 8 if (n == -1) 9 { 10 std::cerr <<"setBindAttribVertex(): "<< n << std::endl; 11 } 12 else 13 { 14 glBindAttribLocation(program, n, str); 15 } 16} 17 18 19//フラグメントシェーダーに属性変数を関連ずける 20void FrameWork::Shader::setBindAttribFragment(const char* str) 21{ 22 GLint n = glGetAttribLocation(program, str); 23 24 //エラー処理 25 if (n == -1) 26 { 27 std::cerr << "setBindAttribFragment(): " << n << std::endl; 28 } 29 else 30 { 31 glBindFragDataLocation(program, n, str); 32 } 33} 34
「glGetAttribVertex()」とはどれのことでしょうか?
提示文章を修正しました。
以前も同じようなことを言ってたのでは?
https://teratail.com/questions/334979
フラグメントシェーダはどうなってるの?
以前は(何がどうなったのか全く不明だが)フラグメントシェーダを修正して対応した らしいですが??
以前と違ってリンクエラーが出ないので原因がわからなのです。
回答2件
あなたの回答
tips
プレビュー