From 99174e4e5fb4b7079da80b35a6dfd68f3fd56a1c Mon Sep 17 00:00:00 2001 From: lbavoil Date: Fri, 25 Mar 2016 13:01:54 +0100 Subject: GFSDK_HBAO+_distro_r3.0_cl20573789 --- src/AppState_GL.cpp | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 src/AppState_GL.cpp (limited to 'src/AppState_GL.cpp') diff --git a/src/AppState_GL.cpp b/src/AppState_GL.cpp new file mode 100644 index 0000000..85bf40f --- /dev/null +++ b/src/AppState_GL.cpp @@ -0,0 +1,104 @@ +/* +* Copyright (c) 2008-2016, NVIDIA CORPORATION. All rights reserved. +* +* NVIDIA CORPORATION and its licensors retain all intellectual property +* and proprietary rights in and to this software, related documentation +* and any modifications thereto. Any use, reproduction, disclosure or +* distribution of this software and related documentation without an express +* license agreement from NVIDIA CORPORATION is strictly prohibited. +*/ + +#include "AppState_GL.h" + +#if SUPPORT_GL + +//-------------------------------------------------------------------------------- +void GFSDK::SSAO::GL::AppState::Save(const GFSDK_SSAO_GLFunctions& GL) +{ + ASSERT_GL_ERROR(GL); + + GL.glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &m_DrawFBO); + GL.glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &m_VAO); + GL.glGetIntegerv(GL_UNIFORM_BUFFER_BINDING, &m_ContextUBO); + for (GLuint BindingPoint = 0; BindingPoint < SIZEOF_ARRAY(m_BindPointUBOs); ++BindingPoint) + { + GL.glGetIntegeri_v(GL_UNIFORM_BUFFER_BINDING, BindingPoint, &m_BindPointUBOs[BindingPoint]); + } + + GL.glGetIntegerv(GL_ACTIVE_TEXTURE, &m_ActiveTexture); + GL.glGetIntegerv(GL_TEXTURE_BINDING_2D, &m_TextureBinding2D); + GL.glGetIntegerv(GL_TEXTURE_BINDING_2D_ARRAY, &m_TextureBinding2DArray); + GL.glGetIntegerv(GL_CURRENT_PROGRAM, &m_Program); + GL.glGetIntegerv(GL_VIEWPORT, m_Viewport); + GL.glGetFloatv(GL_POLYGON_OFFSET_FACTOR, &m_PolygonOffsetFactor); + GL.glGetFloatv(GL_POLYGON_OFFSET_UNITS, &m_PolygonOffsetUnits); + + m_CullFace = GL.glIsEnabled(GL_CULL_FACE); + m_ScissorTest = GL.glIsEnabled(GL_SCISSOR_TEST); + m_Multisample = GL.glIsEnabled(GL_MULTISAMPLE); + m_DepthTest = GL.glIsEnabled(GL_DEPTH_TEST); + m_StencilTest = GL.glIsEnabled(GL_STENCIL_TEST); + +#if !USE_GLES + m_ColorLogicOp = GL.glIsEnabled(GL_COLOR_LOGIC_OP); +#endif + + m_SampleCoverage = GL.glIsEnabled(GL_SAMPLE_COVERAGE); + m_SampleAlphaToCoverage = GL.glIsEnabled(GL_SAMPLE_ALPHA_TO_COVERAGE); + m_Blend = GL.glIsEnabledi(GL_BLEND, 0); + + GL.glGetIntegerv(GL_BLEND_SRC_RGB, &m_BlendSrcRGB); + GL.glGetIntegerv(GL_BLEND_SRC_ALPHA, &m_BlendSrcAlpha); + GL.glGetIntegerv(GL_BLEND_DST_RGB, &m_BlendDstRGB); + GL.glGetIntegerv(GL_BLEND_DST_ALPHA, &m_BlendDstAlpha); + GL.glGetIntegerv(GL_BLEND_EQUATION_RGB, &m_BlendEquationRGB); + GL.glGetIntegerv(GL_BLEND_EQUATION_ALPHA, &m_BlendEquationAlpha); + GL.glGetFloatv(GL_BLEND_COLOR, m_BlendColor); + GL.glGetBooleani_v(GL_COLOR_WRITEMASK, 0, m_ColorWriteMask); + + ASSERT_GL_ERROR(GL); +} + +//-------------------------------------------------------------------------------- +void GFSDK::SSAO::GL::AppState::Restore(const GFSDK_SSAO_GLFunctions& GL) +{ + ASSERT_GL_ERROR(GL); + + GL.glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_DrawFBO); + GL.glBindVertexArray(m_VAO); + GL.glBindBuffer(GL_UNIFORM_BUFFER, m_ContextUBO); + for (GLuint BindingPoint = 0; BindingPoint < SIZEOF_ARRAY(m_BindPointUBOs); ++BindingPoint) + { + GL.glBindBufferBase(GL_UNIFORM_BUFFER, BindingPoint, m_BindPointUBOs[BindingPoint]); + } + + GL.glActiveTexture(m_ActiveTexture); + GL.glBindTexture(GL_TEXTURE_2D, m_TextureBinding2D); + GL.glBindTexture(GL_TEXTURE_2D_ARRAY, m_TextureBinding2DArray); + GL.glUseProgram(m_Program); + GL.glViewport(m_Viewport[0], m_Viewport[1], m_Viewport[2], m_Viewport[3]); + GL.glPolygonOffset(m_PolygonOffsetFactor, m_PolygonOffsetUnits); + + EnableState(GL, m_CullFace, GL_CULL_FACE); + EnableState(GL, m_ScissorTest, GL_SCISSOR_TEST); + EnableState(GL, m_Multisample, GL_MULTISAMPLE); + EnableState(GL, m_DepthTest, GL_DEPTH_TEST); + EnableState(GL, m_StencilTest, GL_STENCIL_TEST); + +#if !USE_GLES + EnableState(GL, m_ColorLogicOp, GL_COLOR_LOGIC_OP); +#endif + + EnableState(GL, m_SampleCoverage, GL_SAMPLE_COVERAGE); + EnableState(GL, m_SampleAlphaToCoverage, GL_SAMPLE_ALPHA_TO_COVERAGE); + EnableState(GL, m_Blend, GL_BLEND); + + GL.glBlendFuncSeparate(m_BlendSrcRGB, m_BlendDstRGB, m_BlendSrcAlpha, m_BlendDstAlpha); + GL.glBlendEquationSeparate(m_BlendEquationRGB, m_BlendEquationAlpha); + GL.glBlendColor(m_BlendColor[0], m_BlendColor[1], m_BlendColor[2], m_BlendColor[3]); + GL.glColorMaski(0, m_ColorWriteMask[0], m_ColorWriteMask[1], m_ColorWriteMask[2], m_ColorWriteMask[3]); + + ASSERT_GL_ERROR(GL); +} + +#endif //SUPPORT_GL -- cgit v1.2.3