void TBRendererGL::BeginPaint(int render_target_w, int render_target_h) { #ifdef TB_RUNTIME_DEBUG_INFO dbg_bitmap_validations = 0; #endif TBRendererBatcher::BeginPaint(render_target_w, render_target_h); g_current_texture = (GLuint)-1; g_current_batch = nullptr; glMatrixMode(GL_PROJECTION); glLoadIdentity(); Ortho2D(0, (GLfloat)render_target_w, (GLfloat)render_target_h, 0); glMatrixMode(GL_MODELVIEW); glViewport(0, 0, render_target_w, render_target_h); glScissor(0, 0, render_target_w, render_target_h); glEnable(GL_BLEND); glEnable(GL_TEXTURE_2D); glDisable(GL_DEPTH_TEST); glEnable(GL_SCISSOR_TEST); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_VERTEX_ARRAY); }
void MainWindow::OnDisplay() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); m_rc->PushModelView(); gun->Draw(); camera.ApplyTransform(m_rc); skybox->Draw(); static int viewLoc = mainShader->GetUniformLocation("View"); Matrix44f view = m_rc->GetModelView(); mainShader->Use(); glUniformMatrix4fv(viewLoc, 1, FALSE, view.data); int drawCalls = sponza->Draw(); WCHAR buf[20] = L""; StringCchPrintfW(buf, 20, L"Meshes: %d", drawCalls); text->SetText(buf); glEnable(GL_BLEND); glDisable(GL_CULL_FACE); if (fShowMuzzleFlash) { m_rc->PushModelView(); m_rc->SetModelView(Matrix44f::Identity()); muzzle_flash->Draw(); m_rc->PopModelView(); } m_rc->PushModelView(); m_rc->PushProjection(); float viewport[4] = { }; glGetFloatv(GL_VIEWPORT, viewport); m_rc->SetProjection(Ortho2D(0, viewport[2], viewport[3], 0)); m_rc->SetModelView(Matrix44f::Identity()); crosshair->location = Vector3f(viewport[2]*0.5f, viewport[3]*0.5f, 0); crosshair->Draw(); m_rc->PopModelView(); m_rc->PopProjection(); glEnable(GL_CULL_FACE); glDisable(GL_BLEND); text->Draw(10, 10); m_rc->PopModelView(); }
void Text2D::Draw(int x, int y) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); font->fontTexture.Bind(); rc->PushProjection(); rc->PushModelView(); float viewport[4] = { }; glGetFloatv(GL_VIEWPORT, viewport); rc->SetProjection(Ortho2D(0, viewport[2], viewport[3], 0)); rc->SetModelView(Translate((float)x, (float)y, 0)); if (!GLEW_ARB_shader_objects) drawFixed(x, y); else { glEnableVertexAttribArray(AttribsLocations.Vertex); glEnableVertexAttribArray(AttribsLocations.TexCoord); prog->Use(); prog->Uniform("Color", 1, font.color.data); vertices.AttribPointer(AttribsLocations.Vertex, 3, GL_FLOAT); texCoords.AttribPointer(AttribsLocations.TexCoord, 2, GL_FLOAT); vertices.DrawArrays(GL_TRIANGLES, 0, numVerts); glDisableVertexAttribArray(AttribsLocations.Vertex); glDisableVertexAttribArray(AttribsLocations.TexCoord); } glDisable(GL_BLEND); rc->PopModelView(); rc->PopProjection(); }
void MainWindow::OnDisplay() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); m_rc->PushModelView(); mainShader->Uniform("Mode", 1); gun->Draw(); camera.ApplyTransform(m_rc); skybox->Draw(); Matrix44f view = m_rc->GetModelView(); mainShader->UniformMatrix("View", 1, false, view.data); mainShader->Uniform("Mode", 3); for (int i = 0; i < numTargets; i++) targets[i].model->Draw(); terrainShader->Use(); terrainShader->UniformMatrix("View", 1, false, view.data); tex_ground->Bind(); tex_grass->Bind(); tex_rocks->Bind(); terrain->Draw(); glEnable(GL_BLEND); glDisable(GL_CULL_FACE); glEnableVertexAttribArray(bottomPosLoc); glEnableVertexAttribArray(topPosLoc); glVertexAttribDivisor(bottomPosLoc, 1); glVertexAttribDivisor(topPosLoc, 1); grass_pos[0]->AttribPointer(bottomPosLoc, 3, GL_FLOAT); grass_pos[1]->AttribPointer(topPosLoc, 3, GL_FLOAT); grassShader->Use(); grass_mesh->DrawInstanced(grassInstanceCount); glVertexAttribDivisor(bottomPosLoc, 0); glVertexAttribDivisor(topPosLoc, 0); glDisableVertexAttribArray(bottomPosLoc); glDisableVertexAttribArray(topPosLoc); if (fShowMuzzleFlash) { m_rc->PushModelView(); m_rc->SetModelView(Matrix44f::Identity()); mainShader->Uniform("Mode", 2); muzzle_flash->Draw(); m_rc->PopModelView(); } m_rc->PushModelView(); m_rc->PushProjection(); float viewport[4] = { }; glGetFloatv(GL_VIEWPORT, viewport); m_rc->SetProjection(Ortho2D(0, viewport[2], viewport[3], 0)); m_rc->SetModelView(Matrix44f::Identity()); mainShader->Uniform("Mode", 2); crosshair->location = Vector3f(viewport[2]*0.5f, viewport[3]*0.5f, 0); crosshair->Draw(); m_rc->PopModelView(); m_rc->PopProjection(); glEnable(GL_CULL_FACE); glDisable(GL_BLEND); m_rc->PopModelView(); }