Exemple #1
0
void Shader::init(const char *_vsFile, const char *_fsFile)
{
	shader_vp = glCreateShader(GL_VERTEX_SHADER);
	shader_fp = glCreateShader(GL_FRAGMENT_SHADER);

	const char *vsText = textFileRead(_vsFile);
	const char *fsText = textFileRead(_fsFile);

	if (vsText == nullptr || fsText == nullptr)
	{
		std::cout << "ERROR: Either vertex or fragment shader file could not be found" << std::endl;
		return;
	}

	glShaderSource(shader_vp, 1, &vsText, 0);
	glShaderSource(shader_fp, 1, &fsText, 0);

	glCompileShader(shader_vp);
	validateShader(shader_vp, _vsFile);
	glCompileShader(shader_fp);
	validateShader(shader_fp, _fsFile);

	shader_id = glCreateProgram();
	glAttachShader(shader_id, shader_fp);
	glAttachShader(shader_id, shader_vp);
	glLinkProgram(shader_id);
	validateProgram(shader_id);

	delete vsText;
	delete fsText;
}
void ShaderFamily::link()
{
    // link this shader family
    glLinkProgram(m_familyID);
    if (!validateProgram(m_familyID))
    {
        return;
    }
    m_link = true;
}
Exemple #3
0
void Sun::init () {
    token = engine.token;
    program = buildProgramFromAssets ("shaders/sun.vsh", "shaders/sun.fsh");
    validateProgram (program);
    u_MvpMatrixHandle = glGetUniformLocation (program, "u_MvpMatrix");
    u_SizeHandle = glGetUniformLocation (program, "u_Size");
    u_TexUnitHandle = glGetUniformLocation (program, "u_TexUnit");

    a_PositionHandle = glGetAttribLocation (program, "a_Position");

    sunTex = loadTextureFromAsset ("textures/sun.png");
}
Exemple #4
0
Cube::Cube () {
    program = buildProgramFromAssets ("shaders/simple.vsh", "shaders/simple.fsh");
    validateProgram (program);
    u_MvpMatrixHandle = glGetUniformLocation (program, "u_MvpMatrix");
    a_PositionHandle = glGetAttribLocation (program, "a_Position");
    a_ColorHandle = glGetAttribLocation (program, "a_Color");

    GLfloat cubeVertices [] = {
        // front vertices    front colors
        -1.0f, -1.0f,  1.0f, 1.0f, 0.0f, 0.0f,
         1.0f, -1.0f,  1.0f, 0.0f, 1.0f, 0.0f,
         1.0f,  1.0f,  1.0f, 0.0f, 0.0f, 1.0f,
        -1.0f,  1.0f,  1.0f, 1.0f, 1.0f, 1.0f,
        // back vertices     back colors
        -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 0.0f,
         1.0f, -1.0f, -1.0f, 0.0f, 1.0f, 1.0f,
         1.0f,  1.0f, -1.0f, 1.0f, 0.0f, 1.0f,
        -1.0f,  1.0f, -1.0f, 0.0f, 0.0f, 0.0f
    };

    GLushort cubeElements [] = {
        // front
        0, 1, 2,
        2, 3, 0,
        // top
        3, 2, 6,
        6, 7, 3,
        // back
        7, 6, 5,
        5, 4, 7,
        // bottom
        4, 5, 1,
        1, 0, 4,
        // left
        4, 0, 3,
        3, 7, 4,
        // right
        1, 5, 6,
        6, 2, 1
    };

    glGenBuffers (1, &vbo);
    glBindBuffer (GL_ARRAY_BUFFER, vbo);
    glBufferData (GL_ARRAY_BUFFER, sizeof (cubeVertices), cubeVertices, GL_STATIC_DRAW);

    glGenBuffers (1, &ibo);
    glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, ibo);
    glBufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof (cubeElements), cubeElements, GL_STATIC_DRAW);

    glBindBuffer (GL_ARRAY_BUFFER, 0);
    glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0);
}
Exemple #5
0
void GL::Program::validate()
{
	validateProgram(m_Handle);

	GL::Int logLength = 0;
	GL::getProgramiv(m_Handle, GL::INFO_LOG_LENGTH, &logLength);
	if (logLength > 0)
	{
		std::vector<char> log(static_cast<size_t>(logLength + 1), 0);
		GL::getProgramInfoLog(m_Handle, logLength, nullptr, log.data());
		std::clog << "Validating program \"" << name() << "\":\n" << log.data() << std::endl;
	}
}
Exemple #6
0
void Ship::init () {
    token = engine.token;

    program = buildProgramFromAssets ("shaders/ship.vsh", "shaders/ship.fsh");
    validateProgram (program);
    u_MvpMatrixHandle = glGetUniformLocation (program, "u_MvpMatrix");
    u_MvMatrixHandle = glGetUniformLocation (program, "u_MvMatrix");
    u_LightPosHandle = glGetUniformLocation (program, "u_LightPos");
    u_EyePosHandle = glGetUniformLocation (program, "u_EyePos");

    a_PositionHandle = glGetAttribLocation (program, "a_Position");
    a_NormalHandle = glGetAttribLocation (program, "a_Normal");
    a_ColorHandle = glGetAttribLocation (program, "a_Color");

    vbo = loadObjFromAssets ("objects/ship.obj", "objects/ship.mtl", nvertices);
}
void ShaderProgram::compile()
{
	glLinkProgram(shader_id);
	validateProgram(shader_id);
}