提示画像ですがシェーダーファイルを読み込むとエラーが出ます不明なchar - が入っていますとのエラーですが頂点、フラグメント両方なんな文字を入っていません。これはなぜでしょうか?提示コード二つ目はシェーダーファイルを読み込むコードですが何が悪いのでしょうか?
cpp
1 2// ##################################### プログラムオブジェクト作成 ##################################### 3GLuint FrameWork::Shader::CreateProgram(std::shared_ptr<GLchar*> vert, std::shared_ptr<GLchar*> frag) 4{ 5 const GLuint program = glCreateProgram(); //シェーダープログラムを作成 6 7 if (vert != nullptr) 8 { 9 const GLuint vobj = glCreateShader(GL_VERTEX_SHADER); 10 11 GLchar *v[] = { NULL }; 12 v[0] = *vert; 13 14 glShaderSource(vobj, 1,v, NULL); 15 glCompileShader(vobj); 16 CompileInfoLog(vobj, "Complie Error: Vertex Shader"); 17 glAttachShader(program, vobj); 18 glDeleteShader(vobj); 19 } 20 else 21 { 22 std::cerr << "頂点シェーダー読み込み失敗" << std::endl; 23 } 24 25 if (frag != nullptr) 26 { 27 const GLuint fobj = glCreateShader(GL_FRAGMENT_SHADER); 28 GLchar *v[] = {NULL}; 29 v[0] = *frag; 30 31 glShaderSource(fobj, 1, v, NULL); 32 glCompileShader(fobj); 33 CompileInfoLog(fobj, "Complie Error: Fragment Shader"); 34 glAttachShader(program, fobj); 35 glDeleteShader(fobj); 36 } 37 else 38 { 39 std::cerr << "フラグメントシェーダー読み込み失敗" << std::endl; 40 } 41 42 glLinkProgram(program); //リンクプログラム 43 ProgramInfoLog(program); //リンク時のログを表示 44 45 return program; 46} 47
cpp
1 2// ##################################### シェーダーを読み込む ##################################### 3void FrameWork::Resource::LoadShader(Asset assetName) 4{ 5 6 std::shared_ptr<Shader> data = std::make_shared<Shader>(); 7 8 data->fileData = std::make_shared<GLchar*>(); 9 10 for (std::vector<Resource_File>::const_iterator itr = resourceFile->begin(); itr != resourceFile->end(); itr++) 11 { 12 if (itr->assetName == assetName) 13 { 14 15 std::ifstream file(itr->fileName, std::ios::binary); 16 if (file.fail() == true) 17 { 18 std::cerr << "シェーダーファイルを読み込めません: " << itr->fileName << std::endl; 19 20 file.close(); 21 assert(0); 22 break; 23 } 24 else 25 { 26 std::vector<GLchar> buffer(0); 27 file.seekg(0L, std::ios::end); 28 GLsizei length = static_cast<GLsizei>(file.tellg()); 29 buffer.resize(length + 1); 30 file.seekg(0L, std::ios::beg); 31 file.read(buffer.data(), length); 32 buffer.at(length) = ('\0'); 33 *data->fileData = buffer.data(); 34 file.close(); 35 36 shader->push_back(std::make_shared<Shader_Data>(Shader_Data{ data,assetName })); 37 } 38 39 file.close(); 40 break; 41 } 42 } 43 44}
glsl
1/*######################################################################### 2# 単色の二次元描画 頂点シェーダー 3###########################################################################*/ 4#version 330 //バージョン 5#extension GL_ARB_explicit_attrib_location: enable // 6 7 8// ###################### 頂点属性 ###################### 9layout(location = 0) in vec2 vertexPosition; //頂点座標 10 11// ###################### 出力 ###################### 12layout(location = 2) out vec4 vFragment; //頂点カラー 13 14// ###################### Uniform ###################### 15uniform mat4 uScale; //スケール 16uniform mat4 uRotate; //回転 17uniform mat4 uTranslate; //平行移動 18uniform mat4 uViewProjection; //ビュープロジェクション行列 19uniform vec4 uFragment; //色 20 21 22void main() 23{ 24 vec4 vertex = vec4(vertexPosition,0.0,1.0); //頂点座標 25 mat4 model = uTranslate * uRotate * uScale; //モデル行列 26 27 gl_Position = (uViewProjection * model) * vertex; 28 29 vFragment = uFragment; //カラー 30}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/01 01:31 編集
2021/07/01 04:22
2021/07/01 04:43 編集
退会済みユーザー
2021/07/01 06:55
2021/07/01 07:37
2021/07/01 07:51 編集
2021/07/01 08:09