Started refactor to lazily compilable shaders.

This commit is contained in:
zy4n
2025-03-02 22:56:53 +01:00
parent 447146b7f5
commit 925125e99b
50 changed files with 2181 additions and 738 deletions

View File

@@ -0,0 +1,134 @@
#pragma once
#include "assets/components/mesh_vertex_components.hpp"
#include "assets/components/point_cloud_vertex_components.hpp"
#include "assets/components/material_components.hpp"
#include "shader_program/attributes/mesh_attributes.hpp"
#include "shader_program/uniforms/mesh_uniforms.hpp"
#include <array>
#include <string_view>
namespace shader_program::features::mesh
{
struct type
{
attributes::mesh::flags attributes{
attributes::mesh::flags::none
};
uniforms::mesh::flags uniforms{
uniforms::mesh::flags::none
};
};
namespace indices
{
using type = ztu::u8;
constexpr inline type face = 0;
constexpr inline type line = 1;
constexpr inline type point = 2;
constexpr inline type luminance = 3;
constexpr inline type color = 4;
constexpr inline type alpha = 5;
constexpr inline type lighting = 6;
constexpr inline type texture = 7;
constexpr inline type uniform_color = 8;
}
enum class flags : unsigned
{
none = 0,
face = 1 << indices::face,
line = 1 << indices::line,
point = 1 << indices::point,
luminance = 1 << indices::luminance,
color = 1 << indices::color,
alpha = 1 << indices::alpha,
lighting = 1 << indices::lighting,
texture = 1 << indices::texture,
uniform_color = 1 << indices::uniform_color,
};
constexpr inline auto face = type{
.attributes = attributes::mesh::flags::position,
.uniforms = uniforms::mesh::flags::mvp_matrix
};
constexpr inline auto line = type{
.attributes = attributes::mesh::flags::position,
.uniforms = uniforms::mesh::flags::mvp_matrix
};
constexpr inline auto point = type{
.attributes = attributes::mesh::flags::position,
.uniforms = (
uniforms::mesh::flags::mvp_matrix |
uniforms::mesh::flags::point_size
)
};
constexpr inline auto luminance = type{
.attributes = attributes::mesh::flags::luminance
};
constexpr inline auto color = type{
.attributes = attributes::mesh::flags::color
};
constexpr inline auto alpha = type{
.attributes = attributes::mesh::flags::alpha
};
constexpr inline auto lighting = type{
.attributes = attributes::mesh::flags::normal,
.uniforms = (
uniforms::mesh::flags::model_matrix |
uniforms::mesh::flags::view_pos |
uniforms::mesh::flags::point_light_direction |
uniforms::mesh::flags::point_light_color |
uniforms::mesh::flags::ambient_light_color |
uniforms::mesh::flags::ambient_filter |
uniforms::mesh::flags::diffuse_filter |
uniforms::mesh::flags::specular_filter |
uniforms::mesh::flags::shininess
)
};
constexpr inline auto texture = type{
.attributes = attributes::mesh::flags::tex_coord,
.uniforms = uniforms::mesh::flags::tex
};
constexpr inline auto uniform_color = type{
.uniforms = uniforms::mesh::flags::color
};
constexpr inline auto all = std::array{
face, line, point, luminance, color, alpha, lighting, texture, uniform_color
};
constexpr inline auto names = std::array<std::string_view, 9>{
"face",
"line",
"point",
"luminance",
"color",
"alpha",
"lighting",
"texture",
"uniform_color"
};
constexpr inline auto defines = std::array<std::string_view, 9>{
"FACE",
"LINE",
"POINT",
"V_L",
"V_RGB",
"V_A",
"LIGHTING",
"TEXTURE",
"U_RGBA"
};
}