bool GroundRenderer::setup(const mat4& projection, unsigned int texture) { projection_ = projection; texture_ = texture; // Program set up static const vec4 materialDiffuse(0.3f, 0.3f, 0.3f, 1.0f); static const string vtx_shader_filename(GLMARK_DATA_PATH"/shaders/shadow.vert"); static const string frg_shader_filename(GLMARK_DATA_PATH"/shaders/shadow.frag"); ShaderSource vtx_source(vtx_shader_filename); ShaderSource frg_source(frg_shader_filename); vtx_source.add_const("MaterialDiffuse", materialDiffuse); if (!Scene::load_shaders_from_strings(program_, vtx_source.str(), frg_source.str())) { return false; } positionLocation_ = program_["position"].location(); // Set up the position data for our "quad". vertices_.push_back(vec2(-1.0, -1.0)); vertices_.push_back(vec2(1.0, -1.0)); vertices_.push_back(vec2(-1.0, 1.0)); vertices_.push_back(vec2(1.0, 1.0)); // Set up the VBO and stash our position data in it. glGenBuffers(1, &bufferObject_); glBindBuffer(GL_ARRAY_BUFFER, bufferObject_); glBufferData(GL_ARRAY_BUFFER, vertices_.size() * sizeof(vec2), &vertices_.front(), GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); // Set up the light matrix with a bias that will convert values // in the range of [-1, 1] to [0, 1)], then add in the projection // and the "look at" matrix from the light position. light_ *= LibMatrix::Mat4::translate(0.5, 0.5, 0.5); light_ *= LibMatrix::Mat4::scale(0.5, 0.5, 0.5); light_ *= projection_; light_ *= LibMatrix::Mat4::lookAt(lightPosition.x(), lightPosition.y(), lightPosition.z(), 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); return true; }
bool GradientRenderer::init() { // Program set up static const string vtx_shader_filename(GLMARK_DATA_PATH"/shaders/gradient.vert"); static const string frg_shader_filename(GLMARK_DATA_PATH"/shaders/gradient.frag"); ShaderSource vtx_source(vtx_shader_filename); ShaderSource frg_source(frg_shader_filename); if (!Scene::load_shaders_from_strings(program_, vtx_source.str(), frg_source.str())) { return false; } positionLocation_ = program_["position"].location(); uvLocation_ = program_["uvIn"].location(); // Set up the position data for our "quad". vertices_.push_back(vec2(-1.0, -1.0)); vertices_.push_back(vec2(1.0, -1.0)); vertices_.push_back(vec2(-1.0, 1.0)); vertices_.push_back(vec2(1.0, 1.0)); uvs_.push_back(vec2(1.0, 1.0)); uvs_.push_back(vec2(1.0, 1.0)); uvs_.push_back(vec2(0.0, 0.0)); uvs_.push_back(vec2(0.0, 0.0)); uvOffset_ = vertices_.size() * sizeof(vec2); // Set up the VBO and stash our position data in it. glGenBuffers(1, &bufferObject_); glBindBuffer(GL_ARRAY_BUFFER, bufferObject_); glBufferData(GL_ARRAY_BUFFER, (vertices_.size() + uvs_.size()) * sizeof(vec2), 0, GL_STATIC_DRAW); glBufferSubData(GL_ARRAY_BUFFER, 0, vertices_.size() * sizeof(vec2), &vertices_.front()); glBufferSubData(GL_ARRAY_BUFFER, uvOffset_, uvs_.size() * sizeof(vec2), &uvs_.front()); glBindBuffer(GL_ARRAY_BUFFER, 0); return true; }