citra/src/video_core/renderer_opengl/gl_resource_manager.cpp
2015-05-22 15:51:18 -07:00

112 lines
1.8 KiB
C++

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