mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-11-04 12:34:39 +08:00 
			
		
		
		
	OpenGL: Make OpenGL object resource wrappers fully inline
The functions are so simple that having them separate only bloats the code and hinders optimization.
This commit is contained in:
		
							parent
							
								
									392c7feba0
								
							
						
					
					
						commit
						1762267de4
					
				@ -2,7 +2,6 @@ set(SRCS
 | 
			
		||||
            renderer_opengl/generated/gl_3_2_core.c
 | 
			
		||||
            renderer_opengl/gl_rasterizer.cpp
 | 
			
		||||
            renderer_opengl/gl_rasterizer_cache.cpp
 | 
			
		||||
            renderer_opengl/gl_resource_manager.cpp
 | 
			
		||||
            renderer_opengl/gl_shader_util.cpp
 | 
			
		||||
            renderer_opengl/gl_state.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
 | 
			
		||||
 | 
			
		||||
#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;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user