mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	Merge pull request #991 from yuriks/globjects
OpenGL: Make OpenGL object resource wrappers fully inline
This commit is contained in:
		
						commit
						e1a3fed6ff
					
				
					 3 changed files with 79 additions and 143 deletions
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue