diff options
author | tfarley <tfarleygithub@gmail.com> | 2015-05-19 06:21:33 +0200 |
---|---|---|
committer | tfarley <tfarleygithub@gmail.com> | 2015-05-23 00:51:18 +0200 |
commit | 05dc633a8c35221ce8d6abe6ddf027f8b0bab6c2 (patch) | |
tree | d080c1efd3b928bda551cb9eee304547e66a4351 /src/video_core/renderer_opengl/gl_state.h | |
parent | INI hw/sw renderer toggle (diff) | |
download | yuzu-05dc633a8c35221ce8d6abe6ddf027f8b0bab6c2.tar yuzu-05dc633a8c35221ce8d6abe6ddf027f8b0bab6c2.tar.gz yuzu-05dc633a8c35221ce8d6abe6ddf027f8b0bab6c2.tar.bz2 yuzu-05dc633a8c35221ce8d6abe6ddf027f8b0bab6c2.tar.lz yuzu-05dc633a8c35221ce8d6abe6ddf027f8b0bab6c2.tar.xz yuzu-05dc633a8c35221ce8d6abe6ddf027f8b0bab6c2.tar.zst yuzu-05dc633a8c35221ce8d6abe6ddf027f8b0bab6c2.zip |
Diffstat (limited to 'src/video_core/renderer_opengl/gl_state.h')
-rw-r--r-- | src/video_core/renderer_opengl/gl_state.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_state.h b/src/video_core/renderer_opengl/gl_state.h new file mode 100644 index 000000000..a56d31371 --- /dev/null +++ b/src/video_core/renderer_opengl/gl_state.h @@ -0,0 +1,70 @@ +// Copyright 2015 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include "generated/gl_3_2_core.h" + +class OpenGLState { +public: + struct { + bool enabled; // GL_CULL_FACE + GLenum mode; // GL_CULL_FACE_MODE + } cull; + + struct { + bool test_enabled; // GL_DEPTH_TEST + GLenum test_func; // GL_DEPTH_FUNC + GLboolean write_mask; // GL_DEPTH_WRITEMASK + } depth; + + struct { + bool test_enabled; // GL_STENCIL_TEST + GLenum test_func; // GL_STENCIL_FUNC + GLint test_ref; // GL_STENCIL_REF + GLuint test_mask; // GL_STENCIL_VALUE_MASK + GLuint write_mask; // GL_STENCIL_WRITEMASK + } stencil; + + struct { + bool enabled; // GL_BLEND + GLenum src_rgb_func; // GL_BLEND_SRC_RGB + GLenum dst_rgb_func; // GL_BLEND_DST_RGB + GLenum src_a_func; // GL_BLEND_SRC_ALPHA + GLenum dst_a_func; // GL_BLEND_DST_ALPHA + + struct { + GLclampf red; + GLclampf green; + GLclampf blue; + GLclampf alpha; + } color; // GL_BLEND_COLOR + } blend; + + // 3 texture units - one for each that is used in PICA fragment shader emulation + struct { + bool enabled_2d; // GL_TEXTURE_2D + GLuint texture_2d; // GL_TEXTURE_BINDING_2D + } texture_units[3]; + + struct { + GLuint framebuffer; // GL_DRAW_FRAMEBUFFER_BINDING + GLuint vertex_array; // GL_VERTEX_ARRAY_BINDING + GLuint vertex_buffer; // GL_ARRAY_BUFFER_BINDING + GLuint shader_program; // GL_CURRENT_PROGRAM + } draw; + + OpenGLState(); + + /// Get the currently active OpenGL state + static const OpenGLState& GetCurState() { + return cur_state; + } + + /// Apply this state as the current OpenGL state + const void Apply(); + +private: + static OpenGLState cur_state; +}; |