1

私はここで完全に困惑しています。次のフラグメントシェーダーが機能しています。

varying lowp vec4 fposition;
varying lowp vec4 fcolor;
varying lowp vec2 ftexturecoordinates;


void main() {
    gl_FragColor = fcolor;
}

何かを追加しようとすると(例: vec4 light position = vec4(-2.0, 2.0, 1.0, 1.0))、コンパイルされません。エラー コード/説明を取得する方法がわかりませんが、通常の OpenGL ES シェーダーを動作させることができません。このアプリには、他のすべてのアプリと同じシェーダー コンパイル コードがあるので、そのセクションが正常に機能することはわかっています。問題に関する情報を見つけるために何ができるでしょうか?

4

1 に答える 1

3

シェーダーをコンパイルした後、GL_COMPILE_STATUSそれがGL_FALSEであるかどうかを確認できます。使用するglGetShaderInfoLogと、コンパイル エラーに関する追加情報を取得できます。

glGetShaderInfoLog の使用方法を示すスニペットを次に示します。

(参照用にプロジェクト固有のエラーチェックインを残しましたが、フレームワークがないと機能しないため、コメントアウトしました。)

glCompileShader(shader);
//mada_check_gl_error();

GLint compiled;
glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);
//mada_check_gl_error();
if (!compiled)
{
    GLint length;
    glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length);
    //mada_check_gl_error();
    if (length > 0)
    {
        GLint infoLength;
        char* infoBuf = (char*) malloc(sizeof(char) * length);
        glGetShaderInfoLog(shader, length, &infoLength, infoBuf);
        //mada_check_gl_error();
        //mada_log(logERROR, infoBuf);
        free(infoBuf);
        //SysUtils::error("Error compiling shader. See log for info.");
    }
    //SysUtils::error("Failed to compile shader. No further info available.");
}
于 2012-12-05T20:14:34.487 に答える