diff --git a/Sources/arm/App.hx b/Sources/arm/App.hx index 9e0185d7..a8637e53 100644 --- a/Sources/arm/App.hx +++ b/Sources/arm/App.hx @@ -411,7 +411,15 @@ class App { } public static function enumTexts(nodeType:String):Array { - return Project.assetNames.length > 0 ? Project.assetNames : [""]; + if (nodeType == "TEX_IMAGE") { + return Project.assetNames.length > 0 ? Project.assetNames : [""]; + } + else if (nodeType == "LAYER") { + var layerNames:Array = []; + for (l in Project.layers) layerNames.push(l.name); + return layerNames; + } + return null; } public static function getAssetIndex(filename:String):Int { diff --git a/Sources/arm/node/Material.hx b/Sources/arm/node/Material.hx index 2557c591..402c26e1 100644 --- a/Sources/arm/node/Material.hx +++ b/Sources/arm/node/Material.hx @@ -799,6 +799,19 @@ class Material { return 'vVecCam'; } + else if (node.type == 'LAYER') { + if (socket == node.outputs[0]) { // Base + var l = node.buttons[0].default_value; + curshader.add_uniform("sampler2D texpaint", "_texpaint" + l); + return 'texture(texpaint, texCoord).rgb'; + } + else if (socket == node.outputs[5]) { // Normal + var l = node.buttons[0].default_value; + curshader.add_uniform("sampler2D texpaint_nor", "_texpaint_nor" + l); + return 'texture(texpaint_nor, texCoord).rgb'; + } + } + else if (node.type == 'NEW_GEOMETRY') { if (socket == node.outputs[0]) { // Position curshader.wposition = true; @@ -1129,6 +1142,38 @@ class Material { } } + else if (node.type == 'LAYER') { + if (socket == node.outputs[1]) { // Opac + var l = node.buttons[0].default_value; + curshader.add_uniform("sampler2D texpaint", "_texpaint" + l); + return 'texture(texpaint, texCoord).a'; + } + else if (socket == node.outputs[2]) { // Occ + var l = node.buttons[0].default_value; + curshader.add_uniform("sampler2D texpaint_pack", "_texpaint_pack" + l); + return 'texture(texpaint_pack, texCoord).r'; + } + else if (socket == node.outputs[3]) { // Rough + var l = node.buttons[0].default_value; + curshader.add_uniform("sampler2D texpaint_pack", "_texpaint_pack" + l); + return 'texture(texpaint_pack, texCoord).g'; + } + else if (socket == node.outputs[4]) { // Metal + var l = node.buttons[0].default_value; + curshader.add_uniform("sampler2D texpaint_pack", "_texpaint_pack" + l); + return 'texture(texpaint_pack, texCoord).b'; + } + // else if (socket == node.outputs[6]) { // Emission + // } + else if (socket == node.outputs[7]) { // Height + var l = node.buttons[0].default_value; + curshader.add_uniform("sampler2D texpaint_pack", "_texpaint_pack" + l); + return 'texture(texpaint_pack, texCoord).a'; + } + // else if (socket == node.outputs[8]) { // Subsurface + // } + } + else if (node.type == 'FRESNEL') { var ior = parse_value_input(node.inputs[0]); // var nor = parse_vector_input(node.inputs[1]) diff --git a/Sources/arm/render/Uniforms.hx b/Sources/arm/render/Uniforms.hx index 987d73a8..f7fb5509 100644 --- a/Sources/arm/render/Uniforms.hx +++ b/Sources/arm/render/Uniforms.hx @@ -301,9 +301,21 @@ class Uniforms { return RenderPath.active.renderTargets.get("texpaint_pack_undo" + i).image; } if (link.startsWith("_texpaint_pack_vert")) { - var tid = link.substr(19); + var tid = link.substr(link.length - 1); return RenderPath.active.renderTargets.get("texpaint_pack" + tid).image; } + if (link.startsWith("_texpaint")) { + var tid = Std.parseInt(link.substr(link.length - 1)); + return Project.layers[tid].texpaint; + } + if (link.startsWith("_texpaint_nor")) { + var tid = Std.parseInt(link.substr(link.length - 1)); + return Project.layers[tid].texpaint_nor; + } + if (link.startsWith("_texpaint_pack")) { + var tid = Std.parseInt(link.substr(link.length - 1)); + return Project.layers[tid].texpaint_pack; + } if (link == "_texpaint_mask") { return Context.layer.texpaint_mask; }