43 lines
2 KiB
C++
43 lines
2 KiB
C++
#include <ShaderGraph.h>
|
|
//#include "srell.hpp"
|
|
|
|
namespace {
|
|
K::String BuildNode(const K::ShaderGraph::NodeInstance& n) {
|
|
K::String r = n.node->shader_template;
|
|
// for (u32 i = 0; i < n.node->inputs.size(); i++) {
|
|
// K::String sub{};
|
|
// if (n.inputs[i] != nullptr)
|
|
// sub = BuildNode(*n.inputs[i]);
|
|
// else
|
|
// sub = K::ShaderGraph::VarToString(n.values[i]); // should be made into uniform instead !!
|
|
// r = srell::regex_replace(r, srell::regex("\\{" + std::to_string(i) + "\\}"), sub);
|
|
// }
|
|
return r;
|
|
}
|
|
}
|
|
|
|
namespace K::ShaderGraph {
|
|
T_Map<T_Count>::type ExpandVariant(u32 i) {
|
|
static T_Map<T_Count>::type table[] = { f32{}, i32{}, RGBA{}, XY{}, XYZ{} };
|
|
return table[i];
|
|
}
|
|
String VarToString(const T_Map<T_Count>::type& var) {
|
|
return std::visit([](auto&& arg) -> String {
|
|
using T = std::decay_t<decltype(arg)>;
|
|
if constexpr (std::is_same_v<T, T_Map<T_Float>::type>)
|
|
return std::to_string(arg) + "f";
|
|
else if constexpr (std::is_same_v<T, T_Map<T_Int>::type>)
|
|
return std::to_string(arg);
|
|
else if constexpr (std::is_same_v<T, T_Map<T_RGBA>::type>)
|
|
return "vec4(" + std::to_string(arg.r) + "," + std::to_string(arg.g) + "," + std::to_string(arg.b) + "," + std::to_string(arg.a) + ")";
|
|
else if constexpr (std::is_same_v<T, T_Map<T_XY>::type>)
|
|
return "vec2(" + std::to_string(arg.x) + "," + std::to_string(arg.y) + ")";
|
|
else if constexpr (std::is_same_v<T, T_Map<T_XYZ>::type>)
|
|
return "vec3(" + std::to_string(arg.x) + "," + std::to_string(arg.y) + "," + std::to_string(arg.z) + ")";
|
|
}, var);
|
|
}
|
|
String ShaderGraph::GenerateShader() const {
|
|
if (RGBA_node->node->out_types[RGBA_node_out_index] != Type::T_RGBA) return {};
|
|
return BuildNode(*RGBA_node);
|
|
}
|
|
}
|