|
|
@@ -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;
|
|
|
};
|