Program Listing for File ShaderIncludes.hpp

Return to documentation for file (Src/GraphicsEngineOpenGL/renderer/ShaderIncludes.hpp)

#pragma once

#include <glad/glad.h>
#include <string>
#include <vector>

// https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shading_language_include.txt
class ShaderIncludes
{
  public:
    ShaderIncludes();

    ~ShaderIncludes();

  private:
    bool isExtensionSupported(const std::string &extension)
    {
        GLint numExtensions = 0;
        glGetIntegerv(GL_NUM_EXTENSIONS, &numExtensions);

        for (int i = 0; i < numExtensions; ++i) {
            const char *ext = reinterpret_cast<const char *>(glGetStringi(GL_EXTENSIONS, i));
            if (extension == ext) { return true; }
        }
        return false;
    }
    std::vector<const char *> includeNames = { "host_device_shared.hpp",
        "Matlib.glsl",
        "microfacet.glsl",
        "ShadingLibrary.glsl",
        "disney.glsl",
        "frostbite.glsl",
        "pbrBook.glsl",
        "phong.glsl",
        "unreal4.glsl",
        "clouds.glsl",
        "grad_noise.glsl",
        "worley_noise.glsl",
        "bindings.hpp",
        "GlobalValues.hpp",
        "directional_light.glsl",
        "light.glsl",
        "material.glsl",
        "point_light.glsl" };

    std::vector<const char *> file_locations_relative = { "Shaders/hostDevice/host_device_shared.hpp",
        "Shaders/common/Matlib.glsl",
        "Shaders/pbr/microfacet.glsl",
        "Shaders/common/ShadingLibrary.glsl",
        "Shaders/pbr/brdf/disney.glsl",
        "Shaders/pbr/brdf/frostbite.glsl",
        "Shaders/pbr/brdf/pbrBook.glsl",
        "Shaders/pbr/brdf/phong.glsl",
        "Shaders/pbr/brdf/unreal4.glsl",
        "Shaders/clouds/clouds.glsl",
        "Shaders/common/grad_noise.glsl",
        "Shaders/common/worley_noise.glsl",
        "Shaders/hostDevice/bindings.hpp",
        "Shaders/hostDevice/GlobalValues.hpp",
        "Shaders/common/directional_light.glsl",
        "Shaders/common/light.glsl",
        "Shaders/common/material.glsl",
        "Shaders/common/point_light.glsl" };
};