全体的に文を変更しました。
opengl
1 2class Shader 3{ 4 5public: 6Shader(); 7 ~Shader(); 8bool Load(const std::string& vertName, 9 const std::string& fragName); 10 void SetActive(); 11void Unload(); 12 private: 13 bool CompileShader(const std::string& fileName, 14 GLenum shaderType,GLuint& outShader); 15 16 bool IsCompiled(GLuint shader); 17 bool IsValidProgram(); 18 19 GLuint mVertexShader; 20 GLuint mFragShader; 21 GLuint mShaderProgram; 22 23}; 24 25 26bool Shader:: IsCompiled(GLuint shader){ 27 28GLint status; 29glGetShaderiv(shader,GL_COMPILE_STATUS, &status); 30 if(status !=GL_TRUE) 31 { 32 33 char buffer[512]; 34 memset(buffer,0,512); 35 glGetShaderInfoLog(shader,511,NULL,buffer); 36 printf("GLSLのコンパイルが失敗しました:\n%s",buffer); 37 return false; 38 } 39 return true; 40} 41 42 43bool Shader::Load(const std::string& vertName, 44 const std::string& fragName){ 45 46CompileShader(vertName,GL_VERTEX_SHADER,mVertexShader); 47CompileShader(fragName,GL_FRAGMENT_SHADER,mFragShader); 48 49mShaderProgram=glCreateProgram(); 50glAttachShader(mShaderProgram,mVertexShader); 51glAttachShader(mShaderProgram,mFragShader); 52glLinkProgram(mShaderProgram); 53 54return true;} 55 56 57 58 59bool Shader::CompileShader(const std::string& fileName, 60 GLenum shaderType,GLuint& outShader) 61{ 62std::ifstream shaderFile(fileName); 63 64 if(shaderFile.is_open()) 65 { 66 std::stringstream sstream; 67 68 sstream << shaderFile.rdbuf(); 69 std::string contents=sstream.str(); 70 71 const char *contentsChar=contents.c_str(); 72 73 outShader=glCreateShader(shaderType); 74 75 glShaderSource(outShader,1,&(contentsChar),NULL); 76 glCompileShader(outShader); 77 if(!IsCompiled (outShader)) 78 { 79 return false; 80 } 81 } 82 else 83 { 84return false; 85 } 86return true; 87} 88 89 90 91void Shader::SetActive(){ 92 93 glUseProgram(mShaderProgram); 94 95} 96 97 98 99void Shader::Unload(){ 100glDeleteProgram(mShaderProgram); 101glDeleteShader(mVertexShader); 102 glDeleteShader(mFragShader); 103} 104```opengl 105 106 107Building in directory: /home/hide/Desktop/foobar_xfile 2 (5 番目のコピー) 108make 109make all-recursive 110make[1]: ディレクトリ `/home/hide/Desktop/foobar_xfile 2 (5 番目のコピー)' に入ります 111Making all in src 112make[2]: ディレクトリ `/home/hide/Desktop/foobar_xfile 2 (5 番目のコピー)/src' に入ります 113CXX main.o 114main.cc: メンバ関数 ‘bool Shader::CompileShader(const string&, GLenum, GLuint&)’ 内: 115/home/hide/Desktop/foobar_xfile 2 (5 番目のコピー)/main.cc:82:34: エラー: no matching function for call to ‘std::basic_ifstream<char>::basic_ifstream(const string&)’ 116std::ifstream shaderFile(fileName); 117^ 118/home/hide/Desktop/foobar_xfile 2 (5 番目のコピー)/main.cc:82:34: 備考: 候補: 119In file included from /home/hide/Desktop/foobar_xfile 2 (5 番目のコピー)/main.cc:17:0: 120/usr/include/c++/4.8.2/fstream:467:7: 備考: std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::ios_base::openmode) [with _CharT = char; _Traits = std::char_traits<char>; std::ios_base::openmode = std::_Ios_Openmode] 121basic_ifstream(const char* __s, ios_base::openmode __mode = ios_base::in) 122^ 123/usr/include/c++/4.8.2/fstream:467:7: 備考: 第 1 引数を ‘const string {aka const std::basic_string<char>}’ から ‘const char*’ へ変換する方法が不明です 124/usr/include/c++/4.8.2/fstream:453:7: 備考: std::basic_ifstream<_CharT, _Traits>::basic_ifstream() [with _CharT = char; _Traits = std::char_traits<char>] 125basic_ifstream() : __istream_type(), _M_filebuf() 126^ 127/usr/include/c++/4.8.2/fstream:453:7: 備考: 候補では 0 個の引数が予期されますが、1 個の引数が与えられています 128/usr/include/c++/4.8.2/fstream:427:11: 備考: std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&) 129class basic_ifstream : public basic_istream<_CharT, _Traits> 130^ 131/usr/include/c++/4.8.2/fstream:427:11: 備考: 第 1 引数を ‘const string {aka const std::basic_string<char>}’ から ‘const std::basic_ifstream<char>&’ へ変換する方法が不明です 132make[2]: *** [main.o] エラー 1 133make[2]: ディレクトリ `/home/hide/Desktop/foobar_xfile 2 (5 番目のコピー)/src' から出ます 134make[1]: *** [all-recursive] エラー 1 135make: *** [all] エラー 2 136make[1]: ディレクトリ `/home/hide/Desktop/foobar_xfile 2 (5 番目のコピー)' から出ます 137完了しました (失敗です) 138所要時間: 3秒 139
opengl
1 2class Shader *mSpriteShader=new Shader(); 3 4 mSpriteShader->Load("./src/GL_ARRAY_BUFFER.vert","./src/GL_ARRAY_BUFFER.frag"); 5 6 mSpriteShader->SetActive(); 7 8```opengl 9 10追記 ● Glewはいれてみました。エラー内容が読めないです。これはどういったエラーでしょうか。 11
シェーダーのリンクなのですが、とある人が数字と文字を画面に出すようなシェーダーをつくっていました。
で自分もその結果が使いたくシェーダの本を手にとってみましたが、コードのエラーが直せません。どこがちがうのでしょうか。
使用した本 ゲームプログラミング c++ //私が提示したコードは同じです。悩んでも仕方ないから回答依頼だすよ
なんかエラーでるかもしれないけどここが参考になった。まだ途中ですけど。
.vertと.fragは読み込んだけど、VAOとVBOって何
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/22 03:02