void Shader::read_shader(std::string &ShaderCode,const char* path){ std::ifstream ShaderStream(path, std::ios::in); if(ShaderStream.is_open()){ std::string Line =""; while(getline(ShaderStream,Line))ShaderCode+="\n"+Line; ShaderStream.close(); }else{ std::cout<<"load Shader:"<<path<<"false"<<std::endl; } }
std::string Shader::loadCode(std::string filename) { // Read the shader code from the file std::string ShaderCode; std::ifstream ShaderStream(filename.c_str(), std::ios::in); if(ShaderStream.is_open()){ std::string Line = ""; while(getline(ShaderStream, Line)) ShaderCode += "\n" + Line; ShaderStream.close(); } return ShaderCode; }
int ShaderProgram::compileShader(const char *ShaderPath, const GLuint ShaderID) { // Read shader code from file std::string ShaderCode; std::ifstream ShaderStream (ShaderPath, std::ios::in); if (ShaderStream.is_open()) { std::string Line = ""; while (getline(ShaderStream, Line)) { ShaderCode += "\n" + Line; } ShaderStream.close(); } else { std::cerr << "Cannot open " << ShaderPath << ". Are you in the right directory?" << std::endl; return 0; } // Compile Shader char const *SourcePointer = ShaderCode.c_str(); glShaderSource(ShaderID, 1, &SourcePointer , NULL); glCompileShader(ShaderID); // Check Shader GLint Result = GL_FALSE; int InfoLogLength; glGetShaderiv(ShaderID, GL_COMPILE_STATUS, &Result); glGetShaderiv(ShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength); printf("compiled shader %d %d\n", Result, InfoLogLength); if ( InfoLogLength > 1 ) { char* ShaderErrorMessage = new char[InfoLogLength+1]; glGetShaderInfoLog( ShaderID, InfoLogLength, NULL, &ShaderErrorMessage[0]); std::cerr << &ShaderErrorMessage[0] << std::endl; delete[] ShaderErrorMessage; return 0; } return 1; }
uint GLShader::LoadShader( const uint& ShaderType, const char* PathToShader) { int Result = GL_FALSE; int InfoLogLength; //- Read the Vertex Shader code from the file --------------------------------------- uint ShaderID = glCreateShader(ShaderType); std::string ShaderCode; std::ifstream ShaderStream(PathToShader, std::ios::in); if(ShaderStream.is_open()) { std::string Line = ""; while(getline(ShaderStream, Line)) ShaderCode += "\n" + Line; ShaderStream.close(); } else { LogError("Impossible to open %s.", PathToShader); return 0; } //- Compile Vertex Shader ----------------------------------------------------------- LogMessage("<br>Compiling Shader : %s", PathToShader); char const * ShaderSourcePointer = ShaderCode.c_str(); glShaderSource(ShaderID, 1, &ShaderSourcePointer , NULL); glCompileShader(ShaderID); // Check Vertex Shader glGetShaderiv(ShaderID, GL_COMPILE_STATUS, &Result); glGetShaderiv(ShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength); if ( InfoLogLength > 0 ){ std::vector<char> ErrorMessage(InfoLogLength+1); glGetShaderInfoLog(ShaderID, InfoLogLength, NULL, &ErrorMessage[0]); LogMessage("%s", &ErrorMessage[0]); } return ShaderID; }
void Shader::read_shader(std::string &ShaderCode,const char* path) { std::ifstream ShaderStream(path, std::ios::in); if(ShaderStream.is_open()) { ShaderCode=""; std::string Line =""; while(getline(ShaderStream,Line)) { if(!Line.empty()) { if(Line.find(std::string("#include"))!=std::string::npos) { Line=Tim::String::cut(Line,std::string("#include"),true,true); Line=Tim::String::cut(Line,std::string(" "),true,true); Line=Tim::String::cut(Line,std::string("<"),true,true); Line=Tim::String::cut(Line,std::string(">"),true,true); //std::cout<<Line<<std::endl; read_shader(Line,Line.c_str()); //std::cout<<Line<<std::endl; } ShaderCode+="\n"+Line; } } ShaderStream.close(); } else { std::cout<<"load Shader:"<<path<<"false"<<std::endl; } }