소스 검색

renderer: Create rasterizer and cleanup.

bunnei 8 년 전
부모
커밋
656de23d93
4개의 변경된 파일16개의 추가작업 그리고 4개의 파일을 삭제
  1. 6 1
      src/video_core/renderer_base.cpp
  2. 6 1
      src/video_core/renderer_base.h
  3. 2 2
      src/video_core/renderer_opengl/gl_rasterizer_cache.h
  4. 2 0
      src/video_core/video_core.h

+ 6 - 1
src/video_core/renderer_base.cpp

@@ -5,6 +5,11 @@
 #include <atomic>
 #include <memory>
 #include "video_core/renderer_base.h"
+#include "video_core/renderer_opengl/gl_rasterizer.h"
 #include "video_core/video_core.h"
 
-void RendererBase::RefreshRasterizerSetting() {}
+void RendererBase::RefreshRasterizerSetting() {
+    if (rasterizer == nullptr) {
+        rasterizer = std::make_unique<RasterizerOpenGL>();
+    }
+}

+ 6 - 1
src/video_core/renderer_base.h

@@ -8,6 +8,7 @@
 #include <boost/optional.hpp>
 #include "common/assert.h"
 #include "common/common_types.h"
+#include "video_core/rasterizer_interface.h"
 
 class EmuWindow;
 
@@ -74,12 +75,16 @@ public:
         return m_current_frame;
     }
 
+    VideoCore::RasterizerInterface* Rasterizer() const {
+        return rasterizer.get();
+    }
+
     void RefreshRasterizerSetting();
 
 protected:
+    std::unique_ptr<VideoCore::RasterizerInterface> rasterizer;
     f32 m_current_fps = 0.0f; ///< Current framerate, should be set by the renderer
     int m_current_frame = 0;  ///< Current frame, should be set by the renderer
 
 private:
-    bool opengl_rasterizer_active = false;
 };

+ 2 - 2
src/video_core/renderer_opengl/gl_rasterizer_cache.h

@@ -211,8 +211,8 @@ struct SurfaceParams {
     MathUtil::Rectangle<u32> GetSubRect(const SurfaceParams& sub_surface) const;
     MathUtil::Rectangle<u32> GetScaledSubRect(const SurfaceParams& sub_surface) const;
 
-    PAddr addr = 0;
-    PAddr end = 0;
+    VAddr addr = 0;
+    VAddr end = 0;
     u64 size = 0;
 
     u32 width = 0;

+ 2 - 0
src/video_core/video_core.h

@@ -15,6 +15,8 @@ class RendererBase;
 
 namespace VideoCore {
 
+enum class Renderer { Software, OpenGL };
+
 extern std::unique_ptr<RendererBase> g_renderer; ///< Renderer plugin
 extern EmuWindow* g_emu_window;                  ///< Emu window