#pragma once #include "OpenGLRenderer.h" #include "RuntimeHost.h" #include "ShaderTextureBindings.h" #include #include class ShaderProgramCompiler { public: using LayerProgram = OpenGLRenderer::LayerProgram; using PassProgram = OpenGLRenderer::LayerProgram::PassProgram; ShaderProgramCompiler(OpenGLRenderer& renderer, RuntimeHost& runtimeHost, ShaderTextureBindings& textureBindings); bool CompileLayerProgram(const RuntimeRenderState& state, LayerProgram& layerProgram, int errorMessageSize, char* errorMessage); bool CompilePreparedLayerProgram(const RuntimeRenderState& state, const std::string& fragmentShaderSource, LayerProgram& layerProgram, int errorMessageSize, char* errorMessage); bool CompilePreparedLayerProgram(const RuntimeRenderState& state, const std::vector& passSources, LayerProgram& layerProgram, int errorMessageSize, char* errorMessage); bool CompileDecodeShader(int errorMessageSize, char* errorMessage); bool CompileOutputPackShader(int errorMessageSize, char* errorMessage); private: OpenGLRenderer& mRenderer; RuntimeHost& mRuntimeHost; ShaderTextureBindings& mTextureBindings; };