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

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

ただいまの
回答率

87.49%

GLSLシェーダープログラムでデバッグログが文字化けしまう原因の対処方法が知りたい。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 631
退会済みユーザー

退会済みユーザー

提示コードの///コメント部ですがprintf(),fprintf();関数がすべて文字化けしてしまってデバッグが困難です。文字化けした文字が画面に出ているため何かしらのエラーが出ていますがこれはとりあえず自分で調べてみます。

GLint Game::LoadShaders(const char* Vertex_path,const char* fragment_path)
{
  //  printf("%s\n",Vertex_path);
    //シェーダIDを作成
    GLuint VertexShaderID = glCreateShader(GL_VERTEX_SHADER);
    GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);

    //バーティックスシェーダーを読み込む
    std::string vss;
    std::ifstream VertexShaderStream(Vertex_path,std::ios::in);
    if( VertexShaderStream.is_open() && true )
    {
        std::stringstream sstr;
        sstr << VertexShaderStream.rdbuf();   
        vss = sstr.str();
      //  printf("%s\n",vss.c_str());

        VertexShaderStream.close();
    }else
    {
        printf("Vertex: Error\n");
    }


    //フラグメントシェーダーを読み込む
    std::string fss;
    std::ifstream fragmentShaderStream(Vertex_path,std::ios::in);
    if( fragmentShaderStream.is_open() && true )
    {
        std::stringstream sstr;
        sstr << fragmentShaderStream.rdbuf();  
        fss = sstr.str();
     //   printf("%s\n",fss.c_str());

        fragmentShaderStream.close();
    }else
    {
        printf("Vertex: Error\n");        
    }


    GLint Result = GL_FALSE;
    int InfoLogLength;

    // 頂点シェーダをコンパイルします。
    //printf("Compiling shader : %s", Vertex_path);
    const char* VertexSourcePointer = vss.c_str();
    glShaderSource(VertexShaderID, 1, &VertexSourcePointer , NULL);
    glCompileShader(VertexShaderID);


    // 頂点シェーダをチェックします。
    glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS, &Result);
    glGetShaderiv(VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);

    std::vector<GLchar> VertexShaderErrorMessage(InfoLogLength);
    glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, VertexShaderErrorMessage.data());


    //fprintf(stdout, "%s\n", VertexShaderErrorMessage);


    //フラグメントシェーダをコンパイルします。
    //printf("Compiling shader : %sn", fragment_path);
    const char* FragmentSourcePointer = fss.c_str();
    glShaderSource(FragmentShaderID, 1, &FragmentSourcePointer, NULL);
    glCompileShader(FragmentShaderID);

    // フラグメントシェーダをチェックします。
    glGetShaderiv(FragmentShaderID, GL_COMPILE_STATUS, &Result);
    glGetShaderiv(FragmentShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);


    std::vector<GLchar> FragmentShaderErrorMessage(InfoLogLength);
    glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, FragmentShaderErrorMessage.data());
    //fprintf(stdout, "%s\n", FragmentShaderErrorMessage);




    // プログラムをリンクします。
    fprintf(stdout, "Linking programn\n");
    GLuint ProgramID = glCreateProgram();
    glAttachShader(ProgramID, VertexShaderID);
    glAttachShader(ProgramID, FragmentShaderID);
    glLinkProgram(ProgramID);

    // プログラムをチェックします。
    glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result);
    glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength);
    std::vector<GLchar> ProgramErrorMessage( max(InfoLogLength,1));
   // GLchar* ProgramErrorMessage( max(InfoLogLength, int(1)) );

    glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, ProgramErrorMessage.data());
  //  fprintf(stdout, "%s\n", ProgramErrorMessage);
    printf("いいいいいいい\n");

  //  printf("ああああ\n");

     glDeleteShader(VertexShaderID);
    glDeleteShader(FragmentShaderID);

    return ProgramID;
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

各std::vector<GLchar>型は以下のようにして配列指定できることを忘れてしました。このようにしたら
見事に文字化けせず表示されましたので自己解決とさせていただきます。

 printf("aaa %s\n",ProgramErrorMessage[0]);

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • C++に関する質問
  • GLSLシェーダープログラムでデバッグログが文字化けしまう原因の対処方法が知りたい。