/** * Draws the emulated screens to the emulator window. */ void RendererOpenGL::DrawScreens() { auto layout = render_window->GetFramebufferLayout(); glViewport(0, 0, layout.width, layout.height); glClear(GL_COLOR_BUFFER_BIT); state.draw.shader_program = program_id; state.Apply(); // Set projection matrix std::array<GLfloat, 3 * 2> ortho_matrix = MakeOrthographicMatrix((float)layout.width, (float)layout.height); glUniformMatrix3x2fv(uniform_modelview_matrix, 1, GL_FALSE, ortho_matrix.data()); // Bind texture in Texture Unit 0 glActiveTexture(GL_TEXTURE0); glUniform1i(uniform_color_texture, 0); DrawSingleScreenRotated(textures[0], (float)layout.top_screen.left, (float)layout.top_screen.top, (float)layout.top_screen.GetWidth(), (float)layout.top_screen.GetHeight()); DrawSingleScreenRotated(textures[1], (float)layout.bottom_screen.left,(float)layout.bottom_screen.top, (float)layout.bottom_screen.GetWidth(), (float)layout.bottom_screen.GetHeight()); m_current_frame++; }
/** * Draws the emulated screens to the emulator window. */ void RendererOpenGL::DrawScreens() { auto viewport_extent = GetViewportExtent(); glViewport(viewport_extent.left, viewport_extent.top, viewport_extent.GetWidth(), viewport_extent.GetHeight()); // TODO: Or bottom? glClear(GL_COLOR_BUFFER_BIT); glUseProgram(program_id); // Set projection matrix std::array<GLfloat, 3*2> ortho_matrix = MakeOrthographicMatrix((float)resolution_width, (float)resolution_height); glUniformMatrix3x2fv(uniform_modelview_matrix, 1, GL_FALSE, ortho_matrix.data()); // Bind texture in Texture Unit 0 glActiveTexture(GL_TEXTURE0); glUniform1i(uniform_color_texture, 0); const float max_width = std::max((float)VideoCore::kScreenTopWidth, (float)VideoCore::kScreenBottomWidth); const float top_x = 0.5f * (max_width - VideoCore::kScreenTopWidth); const float bottom_x = 0.5f * (max_width - VideoCore::kScreenBottomWidth); DrawSingleScreenRotated(textures[0], top_x, 0, (float)VideoCore::kScreenTopWidth, (float)VideoCore::kScreenTopHeight); DrawSingleScreenRotated(textures[1], bottom_x, (float)VideoCore::kScreenTopHeight, (float)VideoCore::kScreenBottomWidth, (float)VideoCore::kScreenBottomHeight); m_current_frame++; }