mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-11-03 23:28:48 +00:00 
			
		
		
		
	gl_resource_manager: Profile creation and deletion
This commit is contained in:
		
							parent
							
								
									79696a1a43
								
							
						
					
					
						commit
						2b793797e0
					
				
					 1 changed files with 38 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -5,21 +5,29 @@
 | 
			
		|||
#include <utility>
 | 
			
		||||
#include <glad/glad.h>
 | 
			
		||||
#include "common/common_types.h"
 | 
			
		||||
#include "common/microprofile.h"
 | 
			
		||||
#include "video_core/renderer_opengl/gl_resource_manager.h"
 | 
			
		||||
#include "video_core/renderer_opengl/gl_shader_util.h"
 | 
			
		||||
#include "video_core/renderer_opengl/gl_state.h"
 | 
			
		||||
 | 
			
		||||
MICROPROFILE_DEFINE(OpenGL_ResourceCreation, "OpenGL", "Resource Creation", MP_RGB(128, 128, 192));
 | 
			
		||||
MICROPROFILE_DEFINE(OpenGL_ResourceDeletion, "OpenGL", "Resource Deletion", MP_RGB(128, 128, 192));
 | 
			
		||||
 | 
			
		||||
namespace OpenGL {
 | 
			
		||||
 | 
			
		||||
void OGLTexture::Create() {
 | 
			
		||||
    if (handle != 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_ResourceCreation);
 | 
			
		||||
    glGenTextures(1, &handle);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OGLTexture::Release() {
 | 
			
		||||
    if (handle == 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_ResourceDeletion);
 | 
			
		||||
    glDeleteTextures(1, &handle);
 | 
			
		||||
    OpenGLState::GetCurState().ResetTexture(handle).Apply();
 | 
			
		||||
    handle = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -28,12 +36,16 @@ void OGLTexture::Release() {
 | 
			
		|||
void OGLSampler::Create() {
 | 
			
		||||
    if (handle != 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_ResourceCreation);
 | 
			
		||||
    glGenSamplers(1, &handle);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OGLSampler::Release() {
 | 
			
		||||
    if (handle == 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_ResourceDeletion);
 | 
			
		||||
    glDeleteSamplers(1, &handle);
 | 
			
		||||
    OpenGLState::GetCurState().ResetSampler(handle).Apply();
 | 
			
		||||
    handle = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -44,12 +56,16 @@ void OGLShader::Create(const char* source, GLenum type) {
 | 
			
		|||
        return;
 | 
			
		||||
    if (source == nullptr)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_ResourceCreation);
 | 
			
		||||
    handle = LoadShader(source, type);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OGLShader::Release() {
 | 
			
		||||
    if (handle == 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_ResourceDeletion);
 | 
			
		||||
    glDeleteShader(handle);
 | 
			
		||||
    handle = 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -57,6 +73,8 @@ void OGLShader::Release() {
 | 
			
		|||
void OGLProgram::Create(bool separable_program, const std::vector<GLuint>& shaders) {
 | 
			
		||||
    if (handle != 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_ResourceCreation);
 | 
			
		||||
    handle = LoadProgram(separable_program, shaders);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -64,12 +82,16 @@ void OGLProgram::Create(const char* vert_shader, const char* frag_shader) {
 | 
			
		|||
    OGLShader vert, frag;
 | 
			
		||||
    vert.Create(vert_shader, GL_VERTEX_SHADER);
 | 
			
		||||
    frag.Create(frag_shader, GL_FRAGMENT_SHADER);
 | 
			
		||||
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_ResourceCreation);
 | 
			
		||||
    Create(false, {vert.handle, frag.handle});
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OGLProgram::Release() {
 | 
			
		||||
    if (handle == 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_ResourceDeletion);
 | 
			
		||||
    glDeleteProgram(handle);
 | 
			
		||||
    OpenGLState::GetCurState().ResetProgram(handle).Apply();
 | 
			
		||||
    handle = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -78,12 +100,16 @@ void OGLProgram::Release() {
 | 
			
		|||
void OGLPipeline::Create() {
 | 
			
		||||
    if (handle != 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_ResourceCreation);
 | 
			
		||||
    glGenProgramPipelines(1, &handle);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OGLPipeline::Release() {
 | 
			
		||||
    if (handle == 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_ResourceDeletion);
 | 
			
		||||
    glDeleteProgramPipelines(1, &handle);
 | 
			
		||||
    OpenGLState::GetCurState().ResetPipeline(handle).Apply();
 | 
			
		||||
    handle = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -92,12 +118,16 @@ void OGLPipeline::Release() {
 | 
			
		|||
void OGLBuffer::Create() {
 | 
			
		||||
    if (handle != 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_ResourceCreation);
 | 
			
		||||
    glGenBuffers(1, &handle);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OGLBuffer::Release() {
 | 
			
		||||
    if (handle == 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_ResourceDeletion);
 | 
			
		||||
    glDeleteBuffers(1, &handle);
 | 
			
		||||
    OpenGLState::GetCurState().ResetBuffer(handle).Apply();
 | 
			
		||||
    handle = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -106,12 +136,16 @@ void OGLBuffer::Release() {
 | 
			
		|||
void OGLVertexArray::Create() {
 | 
			
		||||
    if (handle != 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_ResourceCreation);
 | 
			
		||||
    glGenVertexArrays(1, &handle);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OGLVertexArray::Release() {
 | 
			
		||||
    if (handle == 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_ResourceDeletion);
 | 
			
		||||
    glDeleteVertexArrays(1, &handle);
 | 
			
		||||
    OpenGLState::GetCurState().ResetVertexArray(handle).Apply();
 | 
			
		||||
    handle = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -120,12 +154,16 @@ void OGLVertexArray::Release() {
 | 
			
		|||
void OGLFramebuffer::Create() {
 | 
			
		||||
    if (handle != 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_ResourceCreation);
 | 
			
		||||
    glGenFramebuffers(1, &handle);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void OGLFramebuffer::Release() {
 | 
			
		||||
    if (handle == 0)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    MICROPROFILE_SCOPE(OpenGL_ResourceDeletion);
 | 
			
		||||
    glDeleteFramebuffers(1, &handle);
 | 
			
		||||
    OpenGLState::GetCurState().ResetFramebuffer(handle).Apply();
 | 
			
		||||
    handle = 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue