renderer_opengl.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // SPDX-FileCopyrightText: 2014 Citra Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <vector>
  5. #include <glad/glad.h>
  6. #include "common/common_types.h"
  7. #include "common/math_util.h"
  8. #include "video_core/renderer_base.h"
  9. #include "video_core/renderer_opengl/gl_device.h"
  10. #include "video_core/renderer_opengl/gl_rasterizer.h"
  11. #include "video_core/renderer_opengl/gl_resource_manager.h"
  12. #include "video_core/renderer_opengl/gl_shader_manager.h"
  13. #include "video_core/renderer_opengl/gl_state_tracker.h"
  14. namespace Core {
  15. class System;
  16. class TelemetrySession;
  17. } // namespace Core
  18. namespace Core::Frontend {
  19. class EmuWindow;
  20. }
  21. namespace Tegra {
  22. class GPU;
  23. }
  24. namespace OpenGL {
  25. class BlitScreen;
  26. class RendererOpenGL final : public VideoCore::RendererBase {
  27. public:
  28. explicit RendererOpenGL(Core::TelemetrySession& telemetry_session_,
  29. Core::Frontend::EmuWindow& emu_window_,
  30. Tegra::MaxwellDeviceMemoryManager& device_memory_, Tegra::GPU& gpu_,
  31. std::unique_ptr<Core::Frontend::GraphicsContext> context_);
  32. ~RendererOpenGL() override;
  33. void Composite(std::span<const Tegra::FramebufferConfig> framebuffers) override;
  34. VideoCore::RasterizerInterface* ReadRasterizer() override {
  35. return &rasterizer;
  36. }
  37. [[nodiscard]] std::string GetDeviceVendor() const override {
  38. return device.GetVendorName();
  39. }
  40. private:
  41. void AddTelemetryFields();
  42. void RenderScreenshot(std::span<const Tegra::FramebufferConfig> framebuffers);
  43. Core::TelemetrySession& telemetry_session;
  44. Core::Frontend::EmuWindow& emu_window;
  45. Tegra::MaxwellDeviceMemoryManager& device_memory;
  46. Tegra::GPU& gpu;
  47. Device device;
  48. StateTracker state_tracker;
  49. ProgramManager program_manager;
  50. RasterizerOpenGL rasterizer;
  51. OGLFramebuffer screenshot_framebuffer;
  52. std::unique_ptr<BlitScreen> blit_screen;
  53. };
  54. } // namespace OpenGL