feat(shaders_lab): visual node editor (imgui-node-editor) + multi-source
- cpp/vendor/imgui-node-editor: vendorized thedmd/imgui-node-editor v0.9.4 - cpp/functions/gfx/dag_node_editor: new visual pipeline editor replacing dag_panel - DagStep: source_ids[4] + editor_pos + editor_uid (multi-input support) - DagNodeDef: num_inputs explicit; circle reclassified as Op - dag_compile: N inputs per node, topological ordering preserved - main: use node editor; destroy on shutdown - patch imgui_extra_math.inl: guard operator*(float, ImVec2) for imgui >= 18955 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -14,6 +14,7 @@ static const std::vector<DagNodeDef>& build_catalog() {
|
||||
n.label = "solid";
|
||||
n.desc = "color constante";
|
||||
n.kind = DagKind::Gen;
|
||||
n.num_inputs = 0;
|
||||
n.param_names = {"r", "g", "b", ""};
|
||||
n.param_defaults = {0.35f, 0.25f, 0.55f, 0.0f};
|
||||
n.controls = {
|
||||
@@ -34,6 +35,7 @@ static const std::vector<DagNodeDef>& build_catalog() {
|
||||
n.label = "gradient";
|
||||
n.desc = "gradiente direccional";
|
||||
n.kind = DagKind::Gen;
|
||||
n.num_inputs = 0;
|
||||
n.param_names = {"angle", "hue", "", ""};
|
||||
n.param_defaults = {0.8f, 0.5f, 0.0f, 0.0f};
|
||||
n.controls = {
|
||||
@@ -58,6 +60,7 @@ static const std::vector<DagNodeDef>& build_catalog() {
|
||||
n.label = "plasma";
|
||||
n.desc = "onda trigonometrica";
|
||||
n.kind = DagKind::Gen;
|
||||
n.num_inputs = 0;
|
||||
n.param_names = {"speed", "scale", "", ""};
|
||||
n.param_defaults = {1.0f, 2.0f, 0.0f, 0.0f};
|
||||
n.controls = {
|
||||
@@ -73,13 +76,15 @@ static const std::vector<DagNodeDef>& build_catalog() {
|
||||
v.push_back(std::move(n));
|
||||
}
|
||||
|
||||
// ── Gen: circle ───────────────────────────────────────────────
|
||||
// ── Op: circle ────────────────────────────────────────────────
|
||||
// Reclassified as Op (num_inputs=1): composites circle over input 'a'
|
||||
{
|
||||
DagNodeDef n;
|
||||
n.name = "circle";
|
||||
n.label = "circle";
|
||||
n.desc = "sdf de circulo";
|
||||
n.kind = DagKind::Gen;
|
||||
n.desc = "sdf de circulo (composita sobre input)";
|
||||
n.kind = DagKind::Op;
|
||||
n.num_inputs = 1;
|
||||
n.param_names = {"cx", "cy", "radius", "soft"};
|
||||
n.param_defaults = {0.0f, 0.0f, 0.35f, 0.01f};
|
||||
n.controls = {
|
||||
@@ -94,7 +99,7 @@ static const std::vector<DagNodeDef>& build_catalog() {
|
||||
" vec2 pos = vec2((uv.x - 0.5) * aspect - p.x, uv.y - 0.5 - p.y);\n"
|
||||
" float d = length(pos) - p.z;\n"
|
||||
" float fill = smoothstep(p.w, -p.w, d);\n"
|
||||
" return mix(c, vec4(1.0), fill);";
|
||||
" return mix(a, vec4(1.0), fill);";
|
||||
};
|
||||
v.push_back(std::move(n));
|
||||
}
|
||||
@@ -106,11 +111,12 @@ static const std::vector<DagNodeDef>& build_catalog() {
|
||||
n.label = "invert";
|
||||
n.desc = "1 - rgb";
|
||||
n.kind = DagKind::Op;
|
||||
n.num_inputs = 1;
|
||||
n.param_names = {"", "", "", ""};
|
||||
n.param_defaults = {0.0f, 0.0f, 0.0f, 0.0f};
|
||||
n.controls = {};
|
||||
n.body_glsl = [](int /*idx*/) -> std::string {
|
||||
return " return vec4(1.0 - c.rgb, c.a);";
|
||||
return " return vec4(1.0 - a.rgb, a.a);";
|
||||
};
|
||||
v.push_back(std::move(n));
|
||||
}
|
||||
@@ -122,6 +128,7 @@ static const std::vector<DagNodeDef>& build_catalog() {
|
||||
n.label = "gamma";
|
||||
n.desc = "pow(rgb, gamma)";
|
||||
n.kind = DagKind::Op;
|
||||
n.num_inputs = 1;
|
||||
n.param_names = {"gamma", "", "", ""};
|
||||
n.param_defaults = {1.0f, 0.0f, 0.0f, 0.0f};
|
||||
n.controls = {
|
||||
@@ -130,7 +137,7 @@ static const std::vector<DagNodeDef>& build_catalog() {
|
||||
n.body_glsl = [](int idx) -> std::string {
|
||||
std::string i = std::to_string(idx);
|
||||
return " vec4 p = u_params[" + i + "];\n"
|
||||
" return vec4(pow(c.rgb, vec3(1.0 / max(p.x, 0.001))), c.a);";
|
||||
" return vec4(pow(a.rgb, vec3(1.0 / max(p.x, 0.001))), a.a);";
|
||||
};
|
||||
v.push_back(std::move(n));
|
||||
}
|
||||
@@ -142,6 +149,7 @@ static const std::vector<DagNodeDef>& build_catalog() {
|
||||
n.label = "hue shift";
|
||||
n.desc = "rotar matiz";
|
||||
n.kind = DagKind::Op;
|
||||
n.num_inputs = 1;
|
||||
n.param_names = {"h", "", "", ""};
|
||||
n.param_defaults = {0.0f, 0.0f, 0.0f, 0.0f};
|
||||
n.controls = {
|
||||
@@ -150,14 +158,14 @@ static const std::vector<DagNodeDef>& build_catalog() {
|
||||
n.body_glsl = [](int idx) -> std::string {
|
||||
std::string i = std::to_string(idx);
|
||||
return " vec4 p = u_params[" + i + "];\n"
|
||||
" float a = 6.28318 * p.x;\n"
|
||||
" float ca = cos(a), sa = sin(a);\n"
|
||||
" float ang = 6.28318 * p.x;\n"
|
||||
" float ca = cos(ang), sa = sin(ang);\n"
|
||||
" mat3 hueMat = mat3(\n"
|
||||
" vec3(0.299 + 0.701 * ca + 0.168 * sa, 0.587 - 0.587 * ca + 0.330 * sa, 0.114 - 0.114 * ca - 0.497 * sa),\n"
|
||||
" vec3(0.299 - 0.299 * ca - 0.328 * sa, 0.587 + 0.413 * ca + 0.035 * sa, 0.114 - 0.114 * ca + 0.292 * sa),\n"
|
||||
" vec3(0.299 - 0.300 * ca + 1.250 * sa, 0.587 - 0.588 * ca - 1.050 * sa, 0.114 + 0.886 * ca - 0.203 * sa)\n"
|
||||
" );\n"
|
||||
" return vec4(clamp(hueMat * c.rgb, 0.0, 1.0), c.a);";
|
||||
" return vec4(clamp(hueMat * a.rgb, 0.0, 1.0), a.a);";
|
||||
};
|
||||
v.push_back(std::move(n));
|
||||
}
|
||||
@@ -169,6 +177,7 @@ static const std::vector<DagNodeDef>& build_catalog() {
|
||||
n.label = "mix";
|
||||
n.desc = "interpolacion mix(a, b, t)";
|
||||
n.kind = DagKind::Blend;
|
||||
n.num_inputs = 2;
|
||||
n.param_names = {"t", "", "", ""};
|
||||
n.param_defaults = {0.5f, 0.0f, 0.0f, 0.0f};
|
||||
n.controls = {
|
||||
@@ -189,6 +198,7 @@ static const std::vector<DagNodeDef>& build_catalog() {
|
||||
n.label = "multiply";
|
||||
n.desc = "a * b";
|
||||
n.kind = DagKind::Blend;
|
||||
n.num_inputs = 2;
|
||||
n.param_names = {"", "", "", ""};
|
||||
n.param_defaults = {0.0f, 0.0f, 0.0f, 0.0f};
|
||||
n.controls = {};
|
||||
@@ -205,6 +215,7 @@ static const std::vector<DagNodeDef>& build_catalog() {
|
||||
n.label = "screen";
|
||||
n.desc = "1 - (1-a)(1-b)";
|
||||
n.kind = DagKind::Blend;
|
||||
n.num_inputs = 2;
|
||||
n.param_names = {"", "", "", ""};
|
||||
n.param_defaults = {0.0f, 0.0f, 0.0f, 0.0f};
|
||||
n.controls = {};
|
||||
|
||||
Reference in New Issue
Block a user