...
This commit is contained in:
50
include/opengl/data_managers/shader_program_manager.hpp
Normal file
50
include/opengl/data_managers/shader_program_manager.hpp
Normal file
@@ -0,0 +1,50 @@
|
||||
#pragma once
|
||||
|
||||
#include "shader_manager.hpp"
|
||||
#include "assets/dynamic_data_stores/dynamic_shader_source_store.hpp"
|
||||
#include "opengl/data/shader_program_data.hpp"
|
||||
#include "opengl/shading/requirements/shader_program_requirements.hpp"
|
||||
#include "opengl/metadata/shader_program_metadata.hpp"
|
||||
|
||||
namespace zgl
|
||||
{
|
||||
|
||||
class shader_program_manager
|
||||
{
|
||||
using shader_program_lookup_entry_type = std::pair<
|
||||
shader_program_metadata,
|
||||
shader_program_data
|
||||
>;
|
||||
|
||||
public:
|
||||
void process(
|
||||
const dynamic_shader_source_store& shader_sources
|
||||
);
|
||||
|
||||
void get_handles(
|
||||
const dynamic_shader_source_store& shader_sources,
|
||||
std::span<const shading::shader_program_requirements> requirements,
|
||||
std::span<shader_program_metadata> metadata,
|
||||
std::span<shader_program_handle> shader_programs
|
||||
);
|
||||
|
||||
protected:
|
||||
std::optional<std::pair<shader_program_metadata, shader_program_handle>> find_shader_program(
|
||||
const shading::shader_program_requirements& requirements
|
||||
);
|
||||
|
||||
bool link_shader_program(
|
||||
const shader_handle_set& shaders
|
||||
);
|
||||
|
||||
shader_manager m_shader_manager;
|
||||
std::vector<shader_program_lookup_entry_type> m_shader_program_lookup;
|
||||
|
||||
private:
|
||||
|
||||
std::vector<shading::shader_set_requirements> m_shader_requirements_buffer;
|
||||
std::vector<shader_set_metadata> m_shader_metadata_buffer;
|
||||
std::vector<shader_handle_set> shader_set_buffer;
|
||||
};
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user