Beispiel #1
0
bool ParticleSystem::checkProgram(std::string pathName, std::string vertexPath, std::string fragPath){
        GLuint shaderProg, vertexShader, fragmentShader;
        vertexShader = glCreateShader(GL_VERTEX_SHADER);
        fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
        const GLchar* adapter[1];

        std::string temp = readShaderCode((pathName + vertexPath).c_str());
        adapter[0] = temp.c_str();
        glShaderSource(vertexShader, 1, adapter, 0);

        temp = readShaderCode((pathName + fragPath).c_str());
        adapter[0] = temp.c_str();
        glShaderSource(fragmentShader, 1, adapter, 0);

        glCompileShader(vertexShader);
        glCompileShader(fragmentShader);

        if(!checkShaderStatus(vertexShader) || !checkShaderStatus(fragmentShader))
            return false;

        shaderProg = glCreateProgram();
        glAttachShader(shaderProg, vertexShader);
        glAttachShader(shaderProg, fragmentShader);
        glLinkProgram(shaderProg);
        if(!checkPogramStatus(shaderProg))
            return false;

        return true;
}
Beispiel #2
0
void BasicTexturedShader::installShader(){

	vertexShaderID = glCreateShader(GL_VERTEX_SHADER);
	fragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
	const GLchar* adapter[1];
	std::string temp = readShaderCode("src/Engine/Shader/GLSL/BasicTexturedShaderVertexShader.glsl").c_str();
	adapter[0] = temp.c_str();
	glShaderSource(vertexShaderID, 1, adapter, 0);
	temp = readShaderCode("src/Engine/Shader/GLSL/BasicTexturedShaderFragmentShader.glsl").c_str();
	adapter[0] = temp.c_str();
	glShaderSource(fragmentShaderID, 1, adapter, 0);

	glCompileShader(vertexShaderID);
	glCompileShader(fragmentShaderID);

	if (!checkShaderStatus(vertexShaderID) | !checkShaderStatus(fragmentShaderID)){
		return;
	}

	programID = glCreateProgram();
	glAttachShader(programID, vertexShaderID);
	glAttachShader(programID, fragmentShaderID);
	glLinkProgram(programID);
	glValidateProgram(programID);

	if (!checkProgramStatus(programID)){
		return;
	}

	getAllUniformLocations();
}
Beispiel #3
0
ShaderData::ShaderData(const std::string& vertexShader, const std::string& fragmentShader) {
    m_programID = glCreateProgram();

    std::string vertexShaderCode = readShaderCode(vertexShader);
    GLuint vertexShaderID = addShaderToProgram(vertexShaderCode, GL_VERTEX_SHADER);

    std::string fragmentShaderCode = readShaderCode(fragmentShader);
    GLuint fragmentShaderID = addShaderToProgram(fragmentShaderCode, GL_FRAGMENT_SHADER);

    linkProgram();

    glDeleteShader(vertexShaderID);
    glDeleteShader(fragmentShaderID);
}
Beispiel #4
0
void ParticleSystem::createTransformProgram(std::string pathName){
    std::string vertexPath = std::string("/resources/transform.vert");
//    shaderTransform.CreateProgramFromFile(vsTransform.c_str());
    GLuint vertexShader;
    vertexShader = glCreateShader(GL_VERTEX_SHADER);
    const GLchar* adapter[1];

    std::string temp = readShaderCode((pathName + vertexPath).c_str());
    adapter[0] = temp.c_str();
    glShaderSource(vertexShader, 1, adapter, 0);

    glCompileShader(vertexShader);

    if(!checkShaderStatus(vertexShader)){
        std::cout.flush();
        std::cout << "******** shader error ********" <<std::endl;
        exit(0);
    }

    program_transform = glCreateProgram();
    glProgramParameteri(program_transform, GL_PROGRAM_SEPARABLE, GL_TRUE);
    glAttachShader(program_transform, vertexShader);

    //feedback transform
    const GLchar* feedbackVaryings[] = { "Position"};
    glTransformFeedbackVaryings(program_transform, 1, feedbackVaryings, GL_INTERLEAVED_ATTRIBS);

    glLinkProgram(program_transform);
    if(!checkPogramStatus(program_transform)){
        std::cout.flush();
        std::cout << "******** shader error ********" <<std::endl;
        exit(0);
    }

    return true;
}