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; }
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"); }
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); }
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; } }
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); }