mirror of
https://github.com/citra-mirror/citra.git
synced 2024-08-19 18:13:21 +02:00
Merge pull request #991 from yuriks/globjects
OpenGL: Make OpenGL object resource wrappers fully inline
This commit is contained in:
commit
e1a3fed6ff
@ -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
|
||||||
|
@ -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;
|
|
||||||
}
|
|
@ -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() = default;
|
||||||
~OGLTexture();
|
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() = default;
|
||||||
~OGLShader();
|
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() = default;
|
||||||
~OGLBuffer();
|
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() = default;
|
||||||
~OGLVertexArray();
|
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() = default;
|
||||||
~OGLFramebuffer();
|
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;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user