8 #ifndef hifi_gpu_gl_GLShader_h
9 #define hifi_gpu_gl_GLShader_h
12 #include <gl/GLShaders.h>
14 namespace gpu {
namespace gl {
17 enum class BindingType
28 using LocationMap = std::unordered_map<std::string, int32_t>;
29 using ReflectionMap = std::map<BindingType, LocationMap>;
30 using UniformMap = std::unordered_map<GLuint, GLuint>;
33 GLuint glprogram{ 0 };
35 UniformMap uniformRemap;
38 class GLShader :
public GPUObject {
40 static GLShader* sync(GLBackend& backend,
const Shader& shader,
const Shader::CompilationHandler& handler =
nullptr);
41 using ShaderObject = gpu::gl::ShaderObject;
42 using ShaderObjects = std::array<ShaderObject, shader::NUM_VARIANTS>;
44 GLShader(
const std::weak_ptr<GLBackend>& backend);
47 ShaderObjects _shaderObjects;
49 GLuint getProgram(shader::Variant version = shader::Variant::Mono)
const {
50 return _shaderObjects[
static_cast<uint32_t
>(version)].glprogram;
53 const std::weak_ptr<GLBackend> _backend;