#pragma once #include "GLExtensions.h" #include class SimpleMotionRenderer { public: SimpleMotionRenderer() = default; bool InitializeGl(unsigned width, unsigned height); void RenderFrame(uint64_t frameIndex); void RenderTexture(GLuint texture); void ShutdownGl(); unsigned Width() const { return mWidth; } unsigned Height() const { return mHeight; } private: bool EnsureTextureProgram(); bool EnsurePatternProgram(); void DestroyTextureProgram(); void DestroyPatternProgram(); static bool CompileShader(GLenum shaderType, const char* source, GLuint& shader); unsigned mWidth = 0; unsigned mHeight = 0; GLuint mPatternProgram = 0; GLuint mPatternVertexShader = 0; GLuint mPatternFragmentShader = 0; GLuint mPatternVertexArray = 0; GLuint mTextureProgram = 0; GLuint mTextureVertexShader = 0; GLuint mTextureFragmentShader = 0; GLuint mTextureVertexArray = 0; };