aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/video_core/renderer_opengl/gl_state.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/renderer_opengl/gl_state.h')
-rw-r--r--src/video_core/renderer_opengl/gl_state.h70
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 00000000..a56d3137
--- /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;
+};