作为带有渲染功能的 SDK ,在完成某些特定需求的情况下,需要在游戏引擎(Unity、Unreal、Native 等)的线程里进行绘制。同时,绘制某些物体需要特定的 OpenGL 环境,因此不得不改变 OpenGL Context 。
然而,在 SDK 进行切换 OpenGL Context 时,并不清楚之前在 游戏引擎 中的 OpenGL Context State。理论上,应该由游戏引擎每一帧开始绘制时重新重置 OpenGL Context 环境状态。但是,仍然会存在一些问题,而且,在某些其他的场景下,可能我们也想实现在我们的渲染命令执行完成后,恢复初始的 OpenGL 环境。因此,接下来这个 GlStateSave 类实在是很不错的设计。
#ifndef GLSTATESAVE_H
#define GLSTATESAVE_H
#include "GlUtils.h"
class GLStateSave
{
public:
// If our code only uses VertexArrayObjects, we don't need to
// save and restore all the buffer related state
static const bool exclusivelyVAO = true;
GLStateSave()
{
glGetIntegerv( GL_BLEND, &Blend );
glGetIntegerv( GL_BLEND_DST_ALPHA, &BlendDstAlpha );
glGetIntegerv( GL_BLEND_DST_RGB, &BlendDstRGB );
glGetIntegerv( GL_BLEND_EQUATION_ALPHA, &BlendEquationAlpha );
glGetIntegerv( GL_BLEND_EQUATION_RGB, &BlendEquationRgb );
glGetIntegerv( GL_BLEND_SRC_ALPHA, &BlendSrcAlpha );
glGetIntegerv( GL_BLEND_SRC_RGB, &BlendSrcRGB );