diff --git a/Libraries/paint/blender.py b/Libraries/paint/blender.py index 2233901c..7177f82c 100644 --- a/Libraries/paint/blender.py +++ b/Libraries/paint/blender.py @@ -3,19 +3,22 @@ import arm.material.mat_utils import arm.write_data import arm.assets import arm.make_renderpath +import arm.make_state def on_make_renderpath(): arm.assets.add_shader_pass('max_luminance_pass') arm.assets.add_shader_pass('copy_mrt3_pass') arm.assets.add_shader_pass('copy_mrt4_pass') -def register(): - if bpy.data.worlds['Arm'].arm_project_name == 'ArmorPaint': - arm.material.mat_utils.add_mesh_contexts.append('voxel') # Defaults to make_ao - arm.write_data.add_compiledglsl = """ - const ivec3 voxelgiResolution = ivec3(256, 256, 256); - const vec3 voxelgiHalfExtents = vec3(2.0, 2.0, 2.0); - """ + if arm.make_state.target == 'krom': + arm.material.mat_utils.add_mesh_contexts = ['voxel'] # Defaults to make_ao + arm.write_data.add_compiledglsl = """ + const ivec3 voxelgiResolution = ivec3(256, 256, 256); + const vec3 voxelgiHalfExtents = vec3(2.0, 2.0, 2.0); + """ + else: + arm.material.mat_utils.add_mesh_contexts = [] +def register(): arm.make_renderpath.callback = on_make_renderpath diff --git a/Sources/arm/UINodes.hx b/Sources/arm/UINodes.hx index cf0f4adf..3c623d5d 100644 --- a/Sources/arm/UINodes.hx +++ b/Sources/arm/UINodes.hx @@ -714,8 +714,8 @@ class UINodes extends iron.Trait { frag.add_function(armory.system.CyclesFunctions.str_octahedronWrap); // Apply normal channel - vert.add_uniform('vec3 eye', '_cameraPosition'); - vert.add_uniform('mat4 W', '_worldMatrix'); + vert.add_uniform('vec3 eye', '_cameraPosition'); // eyeDir discard + vert.add_uniform('mat4 W', '_worldMatrix'); //eyeDir discard vert.write('vec4 spos = vec4(pos, 1.0);'); vert.write('vec4 wposition = W * spos;'); vert.add_out('vec3 eyeDir'); @@ -1168,6 +1168,7 @@ class UINodes extends iron.Trait { if (UITrait.inst.brushType == 2 && UITrait.inst.autoFillHandle.selected) { // Fill UITrait.inst.pdirty = 8; + UITrait.inst.ddirty = 8; } // } // else { diff --git a/Sources/arm/UITrait.hx b/Sources/arm/UITrait.hx index 0ff36452..ba64818e 100644 --- a/Sources/arm/UITrait.hx +++ b/Sources/arm/UITrait.hx @@ -145,9 +145,7 @@ class UITrait extends iron.Trait { public static var defaultWindowW = 280; public static var penPressure = true; - public static var drawWorld = true; public static var undoEnabled = true; - public static var worldColor = 0xffffffff; public var isScrolling = false; public var colorIdPicked = false; @@ -157,6 +155,9 @@ class UITrait extends iron.Trait { var message = ""; var messageTimer = 0.0; + var savedEnvmap:kha.Image = null; + var emptyEnvmap:kha.Image = null; + public var ddirty = 0; public var pdirty = 0; public var rdirty = 0; @@ -255,6 +256,9 @@ class UITrait extends iron.Trait { public var mirrorX = false; public var showGrid = false; public var autoFillHandle = new Zui.Handle({selected: false}); + var newConfirm = false; + var newObject = 0; + var newObjectNames = ["Cube", "Plane", "Sphere", "Cylinder"]; var sub = 0; var vec2 = new iron.math.Vec4(); @@ -1317,8 +1321,7 @@ void main() { UINodes.inst.parseMeshMaterial(); hwnd.redraws = 2; ddirty = 2; - // Auto-disable on brush change - autoFillHandle.selected = false; + autoFillHandle.selected = false; // Auto-disable } function selectObject(o:iron.object.Object) { @@ -1865,8 +1868,10 @@ void main() { if (layers.length < 2) { selectedLayer = new LayerSlot(); layers.push(selectedLayer); + ui.g.end(); UINodes.inst.parseMeshMaterial(); UINodes.inst.parsePaintMaterial(); + ui.g.begin(false); ddirty = 2; iron.App.notifyOnRender(clearLastLayer); } @@ -1992,17 +1997,34 @@ void main() { ui.button("Save.."); ui.button("Save As.."); ui.row([1/2,1/2]); - if (ui.button("New")) { - // currentObject.data.delete(); - // iron.data.Data.cachedMeshes.remove("mesh_Cube"); - iron.data.Data.getMesh("mesh_Cube", "Cube", function(md:MeshData) { - iron.App.notifyOnRender(initLayers); - if (paintHeight) iron.App.notifyOnRender(initHeightLayer); - // currentObject.setData(md); - paintObject = currentObject; - }); + if (newConfirm) { + if (ui.button("Confirm")) { + newConfirm = false; + var n = newObjectNames[newObject]; + iron.data.Data.getMesh("mesh_" + n, n, function(md:MeshData) { + currentObject.setData(md); + paintObject = currentObject; + ui.g.end(); + materials = [new MaterialSlot()]; + selectedMaterial = materials[0]; + layers = [new LayerSlot()]; + selectedLayer = layers[0]; + iron.App.notifyOnRender(initLayers); + if (paintHeight) iron.App.notifyOnRender(initHeightLayer); + UINodes.inst.updateCanvasMap(); + UINodes.inst.parsePaintMaterial(); + makeMaterialPreview(); + ui.g.begin(false); + assets = []; + assetNames = []; + assetId = 0; + }); + } } - ui.combo(Id.handle(), ["Cube", "Plane", "Sphere", "Cylinder"], "Default Object"); + else if (ui.button("New")) { + newConfirm = true; + } + newObject = ui.combo(Id.handle(), newObjectNames, "Default Object"); } if (ui.panel(Id.handle({selected: true}), "Quality", 1)) { @@ -2326,15 +2348,35 @@ void main() { var hsupersample = Id.handle({position: getSuperSampleQuality(apconfig.rp_supersample)}); if (ui.panel(Id.handle({selected: true}), "Viewport", 1)) { apconfig.window_vsync = ui.check(Id.handle({selected: apconfig.window_vsync}), "VSync"); - var drawWorldHandle = Id.handle({selected: drawWorld}); - drawWorld = ui.check(drawWorldHandle, "Envmap"); + var drawWorldHandle = Id.handle({selected: true}); + var drawWorld = ui.check(drawWorldHandle, "Envmap"); if (drawWorldHandle.changed) { ddirty = 2; } + if (savedEnvmap == null) savedEnvmap = iron.Scene.active.world.envmap; if (!drawWorld) { - var hwheel = Id.handle(); - worldColor = Ext.colorWheel(ui, hwheel); + var hwheel = Id.handle({color: 0xff030303}); + var worldColor:kha.Color = Ext.colorWheel(ui, hwheel); + if (emptyEnvmap == null) { + var b = haxe.io.Bytes.alloc(4); + b.set(0, worldColor.Rb); + b.set(1, worldColor.Gb); + b.set(2, worldColor.Bb); + b.set(3, 255); + emptyEnvmap = kha.Image.fromBytes(b, 1, 1); + } + if (hwheel.changed) { + var b = emptyEnvmap.lock(); + b.set(0, worldColor.Rb); + b.set(1, worldColor.Gb); + b.set(2, worldColor.Bb); + emptyEnvmap.unlock(); + ddirty = 2; + } + + iron.Scene.active.world.envmap = emptyEnvmap; } + else iron.Scene.active.world.envmap = savedEnvmap; ui.check(hssgi, "SSAO"); ui.check(hssr, "SSR"); ui.check(hbloom, "Bloom"); diff --git a/Sources/arm/UIView2D.hx b/Sources/arm/UIView2D.hx index caafec24..fca0de5f 100644 --- a/Sources/arm/UIView2D.hx +++ b/Sources/arm/UIView2D.hx @@ -85,7 +85,7 @@ void main() { if (!show) return; if (arm.App.realw() == 0 || arm.App.realh() == 0) return; - if (UITrait.inst.paintDirty()) hwnd.redraws = 2; + if (UITrait.inst.pdirty >= 0) hwnd.redraws = 2; // Paint was active var tw = iron.App.w() * 0.95; var tx = iron.App.w() / 2 - tw / 2; diff --git a/Sources/arm/renderpath/RenderPathDeferred.hx b/Sources/arm/renderpath/RenderPathDeferred.hx index 90be5f67..7f6dbe10 100644 --- a/Sources/arm/renderpath/RenderPathDeferred.hx +++ b/Sources/arm/renderpath/RenderPathDeferred.hx @@ -685,11 +685,7 @@ class RenderPathDeferred { } #else { - // Paint - // path.clearTarget(null, 1.0); - if (!UITrait.drawWorld) path.clearTarget(UITrait.worldColor, 1.0); - else path.clearTarget(null, 1.0); - // + path.clearTarget(null, 1.0); } #end @@ -971,10 +967,7 @@ class RenderPathDeferred { #if (rp_background == "World") { - // Paint - // path.drawSkydome("shader_datas/world_pass/world_pass"); - if (UITrait.drawWorld) path.drawSkydome("shader_datas/world_pass/world_pass"); - // + path.drawSkydome("shader_datas/world_pass/world_pass"); } #end @@ -1281,8 +1274,7 @@ class RenderPathDeferred { } #else { - if (!UITrait.drawWorld) path.clearTarget(UITrait.worldColor, 1.0); - else path.clearTarget(null, 1.0); + path.clearTarget(null, 1.0); } #end @@ -1326,7 +1318,7 @@ class RenderPathDeferred { #if (rp_background == "World") { - if (UITrait.drawWorld) path.drawSkydome("shader_datas/world_pass/world_pass"); + path.drawSkydome("shader_datas/world_pass/world_pass"); } #end @@ -1414,8 +1406,7 @@ class RenderPathDeferred { } #else { - if (!UITrait.drawWorld) path.clearTarget(UITrait.worldColor, 1.0); - else path.clearTarget(null, 1.0); + path.clearTarget(null, 1.0); } #end @@ -1459,7 +1450,7 @@ class RenderPathDeferred { #if (rp_background == "World") { - if (UITrait.drawWorld) path.drawSkydome("shader_datas/world_pass/world_pass"); + path.drawSkydome("shader_datas/world_pass/world_pass"); } #end diff --git a/armorpaint.blend b/armorpaint.blend index ab0a04fd..c4cdf8df 100644 Binary files a/armorpaint.blend and b/armorpaint.blend differ