示例#1
0
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;
    }
}
示例#2
0
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;
}
示例#4
0
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;
}
示例#5
0
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;
    }
}