50 lines
1.2 KiB
C++
50 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include <unordered_map>
|
|
#include "assets/dynamic_data_stores/dynamic_shader_source_store.hpp"
|
|
#include "opengl/shader_program_lookup.hpp"
|
|
#include "opengl/handles/shader_handle.hpp"
|
|
#include "opengl/handles/shader_program_handle.hpp"
|
|
#include "../metadata/shader_source_metadata.hpp"
|
|
#include "shading/shader_program_requirements.hpp"
|
|
|
|
namespace zgl
|
|
{
|
|
|
|
class shader_program_compiler
|
|
{
|
|
|
|
public:
|
|
|
|
|
|
// compile shader programs for given requirements
|
|
// cache shader programs with their capabilities
|
|
// store sstream for creating defines
|
|
|
|
// register shader source code
|
|
// store define types for these shaders as bitmap
|
|
void register_shader_sources(
|
|
const dynamic_shader_source_store& shader_sources
|
|
);
|
|
|
|
void compile_shader_programs(
|
|
const dynamic_shader_source_store& shader_sources,
|
|
std::span<const shading::shader_program_metadata> requirements,
|
|
std::vector<shader_program_handle>& shader_handles
|
|
);
|
|
|
|
// create metadata for all sources
|
|
|
|
// get
|
|
ś
|
|
protected:
|
|
|
|
|
|
|
|
private:
|
|
std::vector<shading::compiled_shader_metadata_type, shader_handle> shader_lookup;
|
|
std::vector<shading::shader_program_metadata, shader_program_handle> shader_program_lookup;
|
|
|
|
};
|
|
|
|
} |