2

シンプルな頂点シェーダーをセットアップしようとしています。コンパイルすると (GL_COMPILE_STATUS によると) 失敗しますが、情報ログが空で、デバッグの観点から作業するものが何もありません。

これが私のコードです:

GLuint vertexShader, fragmentShader;

char *code =

"void main(void)\
{\
    vec4 a = gl_Vertex;\
    a.x = a.x * 0.5;\
    a.y = a.y * 0.5;\
    gl_Position = gl_ModelViewProjectionMatrix * a;\
}";


int length = strlen(code);

vertexShader = glCreateShader(GL_VERTEX_SHADER);
//fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(vertexShader, 1, &code, &length);

glCompileShader(GL_VERTEX_SHADER);

GLint compiled;
GLint logLength;

glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &compiled);

glGetShaderiv(vertexShader, GL_INFO_LOG_LENGTH , &logLength);
if (logLength > 1)
{
    GLchar* compiler_log = (GLchar*)malloc(logLength);
    glGetShaderInfoLog(vertexShader, logLength, 0, compiler_log);
    printf("%s\n", compiler_log);
    free (compiler_log);
}

私はこれがかなり厄介であることを認識しており、シェーダーを初めて使用するので、シェーダー コードに何か問題があると確信しています。しかし、私を悩ませているのは、デバッグ情報が不足していることです。上記のコードは、(コードのコンパイルに失敗したことを意味する) と 0 (情報ログが空であることを意味する) という結果にcompiledなりGL_FALSEますlogLength。何を与える?それが情報ログの要点ではありませんか?

4

1 に答える 1

2

glCompileShaderglCreateShaderシェーダー タイプ以外から返されたシェーダー番号を取得します。

この場合

glCompileShader(GL_VERTEX_SHADER);

する必要があります

glCompileShader(vertexShader);
于 2013-05-08T19:27:26.443 に答える