aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/video_core/renderer_opengl/gl_resource_manager.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/renderer_opengl/gl_resource_manager.h')
-rw-r--r--src/video_core/renderer_opengl/gl_resource_manager.h110
1 files changed, 79 insertions, 31 deletions
diff --git a/src/video_core/renderer_opengl/gl_resource_manager.h b/src/video_core/renderer_opengl/gl_resource_manager.h
index 975720d0..6f9dc012 100644
--- a/src/video_core/renderer_opengl/gl_resource_manager.h
+++ b/src/video_core/renderer_opengl/gl_resource_manager.h
@@ -4,76 +4,124 @@
#pragma once
+#include <utility>
+
#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:
- 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
- void Create();
+ void Create() {
+ if (handle != 0) return;
+ glGenTextures(1, &handle);
+ }
/// 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:
- 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
- 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
- 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:
- 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
- void Create();
+ void Create() {
+ if (handle != 0) return;
+ glGenBuffers(1, &handle);
+ }
/// 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:
- 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
- void Create();
+ void Create() {
+ if (handle != 0) return;
+ glGenVertexArrays(1, &handle);
+ }
/// 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:
- 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
- void Create();
+ void Create() {
+ if (handle != 0) return;
+ glGenFramebuffers(1, &handle);
+ }
/// Deletes the internal OpenGL resource
- void Release();
+ void Release() {
+ if (handle == 0) return;
+ glDeleteFramebuffers(1, &handle);
+ handle = 0;
+ }
- GLuint handle;
+ GLuint handle = 0;
};