#pragma once #include "OpenGLESDispatch/GLESv2Dispatch.h" #include #include #include #include #include namespace gfxstream { namespace gl { namespace snapshot { struct GLValue { std::vector enums; std::vector bytes; std::vector shorts; std::vector ints; std::vector floats; std::vector int64s; }; typedef std::map GlobalStateMap; typedef std::map GlobalEnables; struct GLShaderState { GLenum type; std::string source; bool compileStatus; }; struct GLProgramState { std::map linkage; bool linkStatus; }; class GLSnapshotState { public: GLSnapshotState(const GLESv2Dispatch* gl); void save(); void restore(); // Shaders GLuint createShader(GLuint shader, GLenum shaderType); GLuint createProgram(GLuint program); void shaderString(GLuint shader, const GLchar* string); void genBuffers(GLsizei n, GLuint* buffers); GLuint getProgramName(GLuint name); private: void getGlobalStateEnum(GLenum name, int size); void getGlobalStateByte(GLenum name, int size); void getGlobalStateInt(GLenum name, int size); void getGlobalStateFloat(GLenum name, int size); void getGlobalStateInt64(GLenum name, int size); void getGlobalStateEnable(GLenum name); const GLESv2Dispatch* mGL; GlobalStateMap mGlobals; GlobalEnables mEnables; GLuint mProgramCounter = 1; std::map mProgramNames; std::map mProgramNamesBack; std::map mShaderState; std::map mShaderProgramState; }; } // namespace snapshot } // namespace gl } // namespace gfxstream