From 05dc633a8c35221ce8d6abe6ddf027f8b0bab6c2 Mon Sep 17 00:00:00 2001 From: tfarley Date: Mon, 18 May 2015 21:21:33 -0700 Subject: OpenGL renderer --- src/video_core/renderer_opengl/gl_state.h | 70 +++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/video_core/renderer_opengl/gl_state.h (limited to 'src/video_core/renderer_opengl/gl_state.h') 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; +}; -- cgit v1.2.3