GLSL ES 2.0でブラーフィルターを作成しようとしていますが、gl_FragColorを割り当てる行でエラーが発生します。理由がわからない
#extension GL_OES_EGL_image_external : require
precision mediump float;
varying vec2 textureCoordinate;
uniform samplerExternalOES s_texture;
void main() {
float gaus[25] = float[25](0.01739, 0.03478, 0.04347, 0.03478, 0.01739,
0.03478, 0.07282, 0.10434, 0.07282, 0.03478,
0.04347, 0.10434, 0.13043, 0.10434, 0.04347,
0.03478, 0.07282, 0.10434, 0.07282, 0.03478,
0.01739, 0.03478, 0.04347, 0.03478, 0.01739);
float offset[5] = float[5](-2.0, -1.0, 0.0, 1.0, 2.0);
vec4 outSum = vec4(0.0);
int rowi = 0;
for(int i = 0; i < 5; i++){
vec4 inSum = vec4(0.0);
for(int j = 0; j < 5; j++){
inSum += texture2D(s_texture, textureCoordinate + vec2(offset[i], offset[j]))*gaus[j*5+i];
}
outSum += inSum*gaus[rowi+i];
rowi += 3;
}
gl_FragColor = outSum;
}
の割り当てによりgl_FragColor
、呼び出しは。glUseProgram
でエラーになりますGL_INVALID_OPERATION
。私はそれなしでこれを試しました、そしてそれはエラーなしでコンパイルして動作します。少なくとも、これが機能していない理由がわからないので、誰かが私をまだ見ていない方向に向けてくれることを願っています。
編集:私はこれを解決しました。最善の方法として、AndroidのGLSL-ESでは、定数以外の変数を使用した配列のインデックス作成は許可されていません。GLSE-ES 2.0仕様97ページ10.25は、すべての実装で直接サポートされているわけではなく、109ページで、ループインデックスは定数式と見なすことができるが、必須ではないと述べています。ループをロールアウトしましたが、リンクは正常になりました。
回答してくださった皆様、ありがとうございました。洞察のおかげでこれを絞り込むことができました。