Prechádzať zdrojové kódy

OpenGL: Make OpenGL object resource wrappers fully inline

The functions are so simple that having them separate only bloats the
code and hinders optimization.
Yuri Kunde Schlesner 11 rokov pred
rodič
commit
1762267de4

+ 0 - 1
src/video_core/CMakeLists.txt

@@ -2,7 +2,6 @@ set(SRCS
             renderer_opengl/generated/gl_3_2_core.c
             renderer_opengl/generated/gl_3_2_core.c
             renderer_opengl/gl_rasterizer.cpp
             renderer_opengl/gl_rasterizer.cpp
             renderer_opengl/gl_rasterizer_cache.cpp
             renderer_opengl/gl_rasterizer_cache.cpp
-            renderer_opengl/gl_resource_manager.cpp
             renderer_opengl/gl_shader_util.cpp
             renderer_opengl/gl_shader_util.cpp
             renderer_opengl/gl_state.cpp
             renderer_opengl/gl_state.cpp
             renderer_opengl/renderer_opengl.cpp
             renderer_opengl/renderer_opengl.cpp

+ 0 - 111
src/video_core/renderer_opengl/gl_resource_manager.cpp

@@ -1,111 +0,0 @@
-// Copyright 2015 Citra Emulator Project
-// Licensed under GPLv2 or any later version
-// Refer to the license.txt file included.
-
-#include "video_core/renderer_opengl/gl_resource_manager.h"
-#include "video_core/renderer_opengl/gl_shader_util.h"
-
-// Textures
-OGLTexture::OGLTexture() : handle(0) {
-}
-
-OGLTexture::~OGLTexture() {
-    Release();
-}
-
-void OGLTexture::Create() {
-    if (handle != 0) {
-        return;
-    }
-
-    glGenTextures(1, &handle);
-}
-
-void OGLTexture::Release() {
-    glDeleteTextures(1, &handle);
-    handle = 0;
-}
-
-// Shaders
-OGLShader::OGLShader() : handle(0) {
-}
-
-OGLShader::~OGLShader() {
-    Release();
-}
-
-void OGLShader::Create(const char* vert_shader, const char* frag_shader) {
-    if (handle != 0) {
-        return;
-    }
-
-    handle = ShaderUtil::LoadShaders(vert_shader, frag_shader);
-}
-
-void OGLShader::Release() {
-    glDeleteProgram(handle);
-    handle = 0;
-}
-
-// Buffer objects
-OGLBuffer::OGLBuffer() : handle(0) {
-}
-
-OGLBuffer::~OGLBuffer() {
-    Release();
-}
-
-void OGLBuffer::Create() {
-    if (handle != 0) {
-        return;
-    }
-
-    glGenBuffers(1, &handle);
-}
-
-void OGLBuffer::Release() {
-    glDeleteBuffers(1, &handle);
-    handle = 0;
-}
-
-// Vertex array objects
-OGLVertexArray::OGLVertexArray() : handle(0) {
-}
-
-OGLVertexArray::~OGLVertexArray() {
-    Release();
-}
-
-void OGLVertexArray::Create() {
-    if (handle != 0) {
-        return;
-    }
-
-    glGenVertexArrays(1, &handle);
-}
-
-void OGLVertexArray::Release() {
-    glDeleteVertexArrays(1, &handle);
-    handle = 0;
-}
-
-// Framebuffers
-OGLFramebuffer::OGLFramebuffer() : handle(0) {
-}
-
-OGLFramebuffer::~OGLFramebuffer() {
-    Release();
-}
-
-void OGLFramebuffer::Create() {
-    if (handle != 0) {
-        return;
-    }
-
-    glGenFramebuffers(1, &handle);
-}
-
-void OGLFramebuffer::Release() {
-    glDeleteFramebuffers(1, &handle);
-    handle = 0;
-}

+ 79 - 31
src/video_core/renderer_opengl/gl_resource_manager.h

@@ -4,76 +4,124 @@
 
 
 #pragma once
 #pragma once
 
 
+#include <utility>
+
 #include "common/common_types.h"
 #include "common/common_types.h"
 
 
-#include "generated/gl_3_2_core.h"
+#include "video_core/renderer_opengl/generated/gl_3_2_core.h"
+#include "video_core/renderer_opengl/gl_shader_util.h"
 
 
-class OGLTexture : public NonCopyable {
+class OGLTexture : private NonCopyable {
 public:
 public:
-    OGLTexture();
-    ~OGLTexture();
+    OGLTexture() = default;
+    OGLTexture(OGLTexture&& o) { std::swap(handle, o.handle); }
+    ~OGLTexture() { Release(); }
+    OGLTexture& operator=(OGLTexture&& o) { std::swap(handle, o.handle); return *this; }
 
 
     /// Creates a new internal OpenGL resource and stores the handle
     /// Creates a new internal OpenGL resource and stores the handle
-    void Create();
+    void Create() {
+        if (handle != 0) return;
+        glGenTextures(1, &handle);
+    }
 
 
     /// Deletes the internal OpenGL resource
     /// Deletes the internal OpenGL resource
-    void Release();
+    void Release() {
+        if (handle == 0) return;
+        glDeleteTextures(1, &handle);
+        handle = 0;
+    }
 
 
-    GLuint handle;
+    GLuint handle = 0;
 };
 };
 
 
-class OGLShader : public NonCopyable {
+class OGLShader : private NonCopyable {
 public:
 public:
-    OGLShader();
-    ~OGLShader();
+    OGLShader() = default;
+    OGLShader(OGLShader&& o) { std::swap(handle, o.handle); }
+    ~OGLShader() { Release(); }
+    OGLShader& operator=(OGLShader&& o) { std::swap(handle, o.handle); return *this; }
 
 
     /// Creates a new internal OpenGL resource and stores the handle
     /// Creates a new internal OpenGL resource and stores the handle
-    void Create(const char* vert_shader, const char* frag_shader);
+    void Create(const char* vert_shader, const char* frag_shader) {
+        if (handle != 0) return;
+        handle = ShaderUtil::LoadShaders(vert_shader, frag_shader);
+    }
 
 
     /// Deletes the internal OpenGL resource
     /// Deletes the internal OpenGL resource
-    void Release();
+    void Release() {
+        if (handle == 0) return;
+        glDeleteProgram(handle);
+        handle = 0;
+    }
 
 
-    GLuint handle;
+    GLuint handle = 0;
 };
 };
 
 
-class OGLBuffer : public NonCopyable {
+class OGLBuffer : private NonCopyable {
 public:
 public:
-    OGLBuffer();
-    ~OGLBuffer();
+    OGLBuffer() = default;
+    OGLBuffer(OGLBuffer&& o) { std::swap(handle, o.handle); }
+    ~OGLBuffer() { Release(); }
+    OGLBuffer& operator=(OGLBuffer&& o) { std::swap(handle, o.handle); return *this; }
 
 
     /// Creates a new internal OpenGL resource and stores the handle
     /// Creates a new internal OpenGL resource and stores the handle
-    void Create();
+    void Create() {
+        if (handle != 0) return;
+        glGenBuffers(1, &handle);
+    }
 
 
     /// Deletes the internal OpenGL resource
     /// Deletes the internal OpenGL resource
-    void Release();
+    void Release() {
+        if (handle == 0) return;
+        glDeleteBuffers(1, &handle);
+        handle = 0;
+    }
 
 
-    GLuint handle;
+    GLuint handle = 0;
 };
 };
 
 
-class OGLVertexArray : public NonCopyable {
+class OGLVertexArray : private NonCopyable {
 public:
 public:
-    OGLVertexArray();
-    ~OGLVertexArray();
+    OGLVertexArray() = default;
+    OGLVertexArray(OGLVertexArray&& o) { std::swap(handle, o.handle); }
+    ~OGLVertexArray() { Release(); }
+    OGLVertexArray& operator=(OGLVertexArray&& o) { std::swap(handle, o.handle); return *this; }
 
 
     /// Creates a new internal OpenGL resource and stores the handle
     /// Creates a new internal OpenGL resource and stores the handle
-    void Create();
+    void Create() {
+        if (handle != 0) return;
+        glGenVertexArrays(1, &handle);
+    }
 
 
     /// Deletes the internal OpenGL resource
     /// Deletes the internal OpenGL resource
-    void Release();
+    void Release() {
+        if (handle == 0) return;
+        glDeleteVertexArrays(1, &handle);
+        handle = 0;
+    }
 
 
-    GLuint handle;
+    GLuint handle = 0;
 };
 };
 
 
-class OGLFramebuffer : public NonCopyable {
+class OGLFramebuffer : private NonCopyable {
 public:
 public:
-    OGLFramebuffer();
-    ~OGLFramebuffer();
+    OGLFramebuffer() = default;
+    OGLFramebuffer(OGLFramebuffer&& o) { std::swap(handle, o.handle); }
+    ~OGLFramebuffer() { Release(); }
+    OGLFramebuffer& operator=(OGLFramebuffer&& o) { std::swap(handle, o.handle); return *this; }
 
 
     /// Creates a new internal OpenGL resource and stores the handle
     /// Creates a new internal OpenGL resource and stores the handle
-    void Create();
+    void Create() {
+        if (handle != 0) return;
+        glGenFramebuffers(1, &handle);
+    }
 
 
     /// Deletes the internal OpenGL resource
     /// Deletes the internal OpenGL resource
-    void Release();
+    void Release() {
+        if (handle == 0) return;
+        glDeleteFramebuffers(1, &handle);
+        handle = 0;
+    }
 
 
-    GLuint handle;
+    GLuint handle = 0;
 };
 };