質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

GLSL

GLSL (OpenGL Shading Language) はC言語をベースとしたシェーディング言語です。

Q&A

0回答

626閲覧

GLSL glGetAttribLocation()関数で-1が返ってくる原因が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

GLSL

GLSL (OpenGL Shading Language) はC言語をベースとしたシェーディング言語です。

0グッド

0クリップ

投稿2021/12/19 03:38

編集2021/12/19 03:44

提示コードですが下記の////コメント部内部一行 shaderBloomBlur.setBindAttribLocation("vertexUV");で提示画像のエラーで出てしまいます。この原因は何でしょうか?glGetError()関数を表示させましたが原因がわかりません。

0x501: 呼んだ関数の引数の値が無効な値もしくは範囲外の場合
現状

Shaderはコンパイルエラー、リンクエラーのログを取っていますが表示されないため正常に完了しています。
またshaderBloomBlur.setBindAttribLocation("vertexPosition");はエラーにならないため正常です。

参考サイト: https://qiita.com/_ydah/items/da56763e94ba58af3d91

イメージ説明

cpp

1 2 //vao 3 glGenVertexArrays(1, &vao2); 4 glGenBuffers(1, &vbo2); 5 6 shaderBloomBlur.setEnable(); 7 8 glBindVertexArray(vao2); 9 glBindBuffer(GL_ARRAY_BUFFER, vbo2); 10 11 glBufferData(GL_ARRAY_BUFFER, 24 * sizeof(float), &vert, GL_STATIC_DRAW); 12 13 //座標 14 attrib = shaderBloomBlur.getAttribLocation("vertexPosition"); 15 glEnableVertexAttribArray(attrib); 16 glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), (GLvoid*)(sizeof(GLfloat) * 0)); 17 shaderBloomBlur.setBindAttribLocation("vertexPosition"); 18 19 //UV 20 attrib = shaderBloomBlur.getAttribLocation("vertexUV"); 21 glEnableVertexAttribArray(attrib); 22 glVertexAttribPointer(attrib, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), (GLvoid*)(sizeof(GLfloat) * 2)); 23/////////////////////////////////////////////////////////////////////////// 24 printf("aaaa\n"); 25 26 shaderBloomBlur.setBindAttribLocation("vertexUV"); 27 28 printf("bbbbb\n"); 29/////////////////////////////////////////////////////////////////////////// 30 shaderBloomBlur.setDisable(); 31 glBindVertexArray(0); 32 glBindBuffer(GL_ARRAY_BUFFER, 0); 33
Shader

cpp

1// ##################################### 頂点シェーダーに属性変数を関連ずける ##################################### 2void FrameWork::Shader::setBindAttribLocation(const char* str) 3{ 4 GLint n = glGetAttribLocation(program, str); 5 6 //エラー処理 7 if (n == -1) 8 { 9 std::cerr <<"setBindAttribLocation(): "<< n << std::endl; 10 } 11 else 12 { 13 glBindAttribLocation(program, n, str); 14 } 15}
GLSL

glsl

1/* ############################## 2# 頂点シェーダー 3################################*/ 4 5layout (location = 0) in vec2 vertexPosition; 6layout (location = 1) in vec2 vertexUV; 7 8layout (location = 2) out vec2 TexCoords; 9 10void main() 11{ 12 TexCoords = vertexUV; 13 gl_Position = vec4(vertexPosition.x,vertexPosition.y,0.0,1.0); 14} 15

glsl

1/* ############################## 2# フラグメントシェーダー 3################################*/ 4 5#version 330 core 6out vec4 FragColor; 7 8layout (location = 2) in vec2 TexCoords; 9 10uniform sampler2D image; 11 12uniform int horizontal; 13//uniform float weight[5] = float[] (0.2270270270, 0.1945945946, 0.1216216216, 0.0540540541, 0.0162162162); 14float weight[5] = float[] (0.2270270270, 0.1945945946, 0.1216216216, 0.0540540541, 0.0162162162); 15 16void main() 17{ 18 vec2 tex_offset = 1.0 / textureSize(image, 0); // gets size of single texel 19 vec3 result = texture(image, TexCoords).rgb * weight[0]; 20 if(horizontal == 1) 21 { 22 for(int i = 1; i < 5; ++i) 23 { 24 result += texture(image, TexCoords + vec2(tex_offset.x * i, 0.0)).rgb * weight[i]; 25 result += texture(image, TexCoords - vec2(tex_offset.x * i, 0.0)).rgb * weight[i]; 26 } 27 } 28 else 29 { 30 for(int i = 1; i < 5; ++i) 31 { 32 result += texture(image, TexCoords + vec2(0.0, tex_offset.y * i)).rgb * weight[i]; 33 result += texture(image, TexCoords - vec2(0.0, tex_offset.y * i)).rgb * weight[i]; 34 } 35 } 36 37 //FragColor = vec4(result, 1.0); 38 FragColor = vec4(0.0,1.0,0.0, 1.0); 39 40 41}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問