OpenGL シェーダー プログラムは検証に失敗するが、エラー メッセージは表示されない

Tripl3Fac3

カスタム ゲーム エンジンに取り組んでいますが、これまでのところ、すべてが正常に機能しています。
奇妙なエラーに遭遇するまで。
シェーダー プログラムを検証しようとすると、GL_FALSE が返されます。適切なデバッグを確実にするために、何かが失敗したときにエラー メッセージのログ情報を確認しますが、このエラーには情報ログ メッセージがなく、ファイルを正しく読み取るかどうかを確認しました。そこにエラーはありません...それで、私はちょっと立ち往生しています.私は成功せずにインターネット全体を見ました.ここにいる誰かが私を助けてくれることを願っています.
前もって感謝します!

メイン関数で、頂点シェーダーとフラグメント シェーダーの 2 つのシェーダー ファイルを使用して新しいシェーダー プログラムを作成します。どちらもエラーなしでコンパイルされます。

    GLuint shaderProgram = glCreateProgram();
    std::string vertexFile = FileUtils::read_file("shaders/basic.vert");
    std::string fragmentFile = FileUtils::read_file("shaders/basic.frag");

    const char* vertexSource = vertexFile.c_str();
    const char* fragmentSource = fragmentFile.c_str();

    GLuint vertex = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertex, 1, &vertexSource, NULL);
    glCompileShader(vertex);

    GLint result;
    glGetShaderiv(vertex, GL_COMPILE_STATUS, &result);
    if (result != GL_TRUE)
    {
        GLint length;
        glGetShaderiv(vertex, GL_INFO_LOG_LENGTH, &length);
        std::vector<char> error(length);
        glGetShaderInfoLog(vertex, length, &length, &error[0]);
        std::cerr << "Failed to compile the vertex shader!" << std::endl;
        std::cerr << &error[0] << std::endl;
        glDeleteShader(vertex);
        return -1;
    }
    glAttachShader(shaderProgram, vertex);

    GLuint fragment = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(fragment, 1, &fragmentSource, NULL);
    glCompileShader(fragment);

    glGetShaderiv(fragment, GL_COMPILE_STATUS, &result);
    if (result != GL_TRUE)
    {
        GLint length;
        glGetShaderiv(fragment, GL_INFO_LOG_LENGTH, &length);
        std::vector<char> error(length);
        glGetShaderInfoLog(fragment , length, &length, &error[0]);
        std::cerr << "Failed to compile the fragment shader!" << std::endl;
        std::cerr << &error[0] << std::endl;
        glDeleteShader(fragment);
        return -1;
    }
    glAttachShader(shaderProgram, fragment);

    glValidateProgram(shaderProgram);
    glGetProgramiv(shaderProgram, GL_VALIDATE_STATUS, &result);
    if (result != GL_TRUE)
    {
        GLint length;
        glGetProgramiv(shaderProgram, GL_INFO_LOG_LENGTH, &length);
        std::vector<char> error(length);
        glGetProgramInfoLog(shaderProgram, length, &length, &error[0]);
        std::cerr << "Failed to validate the shader program!" << std::endl;
        std::cerr << &error[0] << std::endl;
        glDeleteProgram(shaderProgram);
        return -1;
    }
    glLinkProgram(shaderProgram);
    glGetProgramiv(shaderProgram, GL_LINK_STATUS, &result);
    if (result != GL_TRUE)
    {
        GLint length;
        glGetProgramiv(shaderProgram, GL_INFO_LOG_LENGTH, &length);
        std::vector<char> error(length);
        glGetProgramInfoLog(shaderProgram, length, &length, &error[0]);
        std::cerr << "Failed to link the shader program!" << std::endl;
        std::cerr << &error[0] << std::endl;
        glDeleteProgram(shaderProgram);
        return -1;
    }
    glUseProgram(shaderProgram);

FileUtils クラスの read_file 関数を次に示します。

std::string FileUtils::read_file(const char* filepath)
{
    FILE* file = fopen(filepath, "rt");
    fseek(file, 0, SEEK_END);
    unsigned long length = ftell(file);
    char data[length + 1];
    memset(data, 0, length + 1);
    fseek(file, 0, SEEK_SET);
    fread(data, 1, length, file);
    fclose(file);

    std::string result(data);
    return result;
}

ファイルをコンソールに出力して、パスとファイルが正しく、エラーがないことを確認したため、ファイルが正しくロードされることはわかっています。

PS
コードにエラー (変数名としての「シェーダー」など) が表示された場合、これは元のコードを編集してすべてを 1 つのコード ブロックに収める必要があったためです。

ゲザ

glValidateProgram はglLinkProgram、 の前に配置する必要がありますglUseProgram

ここからの引用

glValidateProgram は、現在の OpenGL の状態で、プログラムに含まれる実行可能ファイルを実行できるかどうかを確認します。

プログラムがリンクされていないと、実行できません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

シェーダー作成Opengl

分類Dev

OpenGL 3.3(mac)プログラムの検証エラー:検証に失敗しました:頂点配列オブジェクトがバインドされていません

分類Dev

OpenGLシェーダーの問題(何も表示されない)

分類Dev

エラー メッセージのない OpenGL シェーダ リンク エラー

分類Dev

OpenGLシェーダープログラムを使用すると、画面が真っ暗になります

分類Dev

OpenGLワークシェーダー?

分類Dev

WebGLとopenGLのシェーダー?

分類Dev

OpenGLシェーダーとCUDA

分類Dev

OpenGL計算シェーダーSSBO

分類Dev

OpenGLシェーダー入力

分類Dev

openglシェーダー座標系

分類Dev

OpenGLシェーダーバージョンエラー

分類Dev

フラグメントシェーダーによってスローされたOpenGLエラー

分類Dev

OpenGLシェーダーがコンパイルに失敗する

分類Dev

テッセレーションシェーダー-OpenGL

分類Dev

リンクと検証が正常に行われているにもかかわらず、シェーダープログラムがコンパイルに失敗するのはなぜですか?

分類Dev

OpenGL:有効なリンク状態にあるプログラムにシェーダーをアタッチすることは合法ですか?

分類Dev

カスタムエラー検証メッセージが表示されない

分類Dev

OpenGLは色をフラグメントシェーダーに渡します

分類Dev

openglシェーダーは常にコンパイルに失敗します

分類Dev

単純なフォームでRailsに検証エラーメッセージが表示されないのはなぜですか?

分類Dev

Rails3に検証エラーメッセージが表示されない

分類Dev

OpenGLで異なるシェーダープログラムを使用しますか?

分類Dev

画像をアップロードするためのFileUploadは画像の保存に失敗しますが、エラーメッセージは表示されません

分類Dev

OpenGLフラグメントシェーダーはオブジェクトを移動しています

分類Dev

フォームビューに検証エラーメッセージが表示されない

分類Dev

OpenGLでは、1回の描画呼び出しで1つのシェーダープログラムがFBOとデフォルトのフレームバッファーの両方にレンダリングすることは可能ですか?

分類Dev

カスタムDatePickerAngularFormlyフィールドに検証エラーメッセージが表示されない

分類Dev

フォーム検証エラーメッセージがModelFormに表示されない

Related 関連記事

  1. 1

    シェーダー作成Opengl

  2. 2

    OpenGL 3.3(mac)プログラムの検証エラー:検証に失敗しました:頂点配列オブジェクトがバインドされていません

  3. 3

    OpenGLシェーダーの問題(何も表示されない)

  4. 4

    エラー メッセージのない OpenGL シェーダ リンク エラー

  5. 5

    OpenGLシェーダープログラムを使用すると、画面が真っ暗になります

  6. 6

    OpenGLワークシェーダー?

  7. 7

    WebGLとopenGLのシェーダー?

  8. 8

    OpenGLシェーダーとCUDA

  9. 9

    OpenGL計算シェーダーSSBO

  10. 10

    OpenGLシェーダー入力

  11. 11

    openglシェーダー座標系

  12. 12

    OpenGLシェーダーバージョンエラー

  13. 13

    フラグメントシェーダーによってスローされたOpenGLエラー

  14. 14

    OpenGLシェーダーがコンパイルに失敗する

  15. 15

    テッセレーションシェーダー-OpenGL

  16. 16

    リンクと検証が正常に行われているにもかかわらず、シェーダープログラムがコンパイルに失敗するのはなぜですか?

  17. 17

    OpenGL:有効なリンク状態にあるプログラムにシェーダーをアタッチすることは合法ですか?

  18. 18

    カスタムエラー検証メッセージが表示されない

  19. 19

    OpenGLは色をフラグメントシェーダーに渡します

  20. 20

    openglシェーダーは常にコンパイルに失敗します

  21. 21

    単純なフォームでRailsに検証エラーメッセージが表示されないのはなぜですか?

  22. 22

    Rails3に検証エラーメッセージが表示されない

  23. 23

    OpenGLで異なるシェーダープログラムを使用しますか?

  24. 24

    画像をアップロードするためのFileUploadは画像の保存に失敗しますが、エラーメッセージは表示されません

  25. 25

    OpenGLフラグメントシェーダーはオブジェクトを移動しています

  26. 26

    フォームビューに検証エラーメッセージが表示されない

  27. 27

    OpenGLでは、1回の描画呼び出しで1つのシェーダープログラムがFBOとデフォルトのフレームバッファーの両方にレンダリングすることは可能ですか?

  28. 28

    カスタムDatePickerAngularFormlyフィールドに検証エラーメッセージが表示されない

  29. 29

    フォーム検証エラーメッセージがModelFormに表示されない

ホットタグ

アーカイブ