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

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

新規登録して質問してみよう
ただいま回答率
85.48%
OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1657閲覧

OpenGLでShaderのコンパイル時に illegal non-ASCII character エラーが発生する

stringthread

総合スコア19

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/04/05 09:50

#目的・エラー内容
C++からOpenGLを利用してシェーダーのコンパイルを試みたのですが、その際に「ERROR: 0:1: '' : illegal non-ASCII character (0xdd)」というエラーがいくつも発生しました。このエラーメッセージは、glGetShaderInfoLog関数からの出力です。
#試したこと
バイナリエディタを用いてシェーダーファイルを開き 0xdd のデータがないか確認しましたが、ありませんでした。また、コンパイル関数に通す前にcontents変数の内容を確認しましたが、こちらも元のシェーダーファイルと差はありませんでした。
#バージョン
Visual Studio Community 2017 の Version 15.9.19 + OpenGL 3.3を使っています。
#ソースコード
こちらがコンパイルに使用したC++コードです。(関連すると思われる部分のみ抜粋)

C++

1ifstream shader_file(filename); 2if(!shader_file.is_open())return false; 3stringstream sstream; 4sstream << shader_file.rdbuf(); 5const char* contents = sstream.str().c_str(); 6out_shader = glCreateShader(type); 7glShaderSource(out_shader, 1, &contents, nullptr); 8glCompileShader(out_shader); 9char text[512]; 10memset(text, 0, 512); 11glGetShaderInfoLog(shader, 511, nullptr, text); 12SDL_Log("OpenGL Shader Compile Error:\n%s", text);

こちらがシェーダーファイル(basic.vert)の内容です。

Shader

1#version 330 2in vec3 inPosition; 3void main(){ 4 gl_Position=vec4(inPosition, 1.0); 5} 6

最後に、実際に出力されたログをコピーして貼り付けておきます。

Output

1INFO: OpenGL Shader Compile Error: 2ERROR: 0:1: '' : illegal non-ASCII character (0xdd) 3ERROR: 0:1: '' : illegal non-ASCII character (0xdd) 4ERROR: 0:1: '' : illegal non-ASCII character (0xdd) 5ERROR: 0:1: '' : illegal non-ASCII character (0xdd) 6ERROR: 0:1: '' : illegal non-ASCII character (0xdd) 7ERROR: 0:1: '' : illegal non-ASCII character (0xdd) 8ERROR: 0:1: '' : illegal non-ASCII character (0xdd) 9ERROR: 0:1: '' : illegal non-ASCII character (0xdd) 10ERROR: 0:1: '' : illegal non-ASCII character (0xdd) 11ERROR: 0:1: '' : illegal non-ASCII charact

原因について思い当たる部分が全くありませんので、何か情報がありましたら、ぜひ教えていただければと思います。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

C++コード5行目
const char* contents = sstream.str().c_str();
の問題でした。一旦 sstream → std::string に変換してから const char* に変換すると上手くいきました

投稿2020/04/05 10:03

stringthread

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SaitoAtsushi

2020/04/05 11:16

どうしてその行がまずいのかというと stringstrem のメンバ関数 str が返すのは一時的な値 (rvalue) なのでその行の終わりには解体されてしまうからですね。 結果的に contents が指す場所は無効な領域になってしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問