diff --git a/Sources/Main.hx b/Sources/Main.hx index dbdc9a08..e766d678 100644 --- a/Sources/Main.hx +++ b/Sources/Main.hx @@ -45,7 +45,7 @@ class Main { if (c.window_maximizable) windowFeatures |= FeatureMaximizable; if (c.window_minimizable) windowFeatures |= FeatureMinimizable; - System.start({title: "untitled - ArmorPaint", width: c.window_w, height: c.window_h, window: {mode: windowMode, windowFeatures: windowFeatures}, framebuffer: {samplesPerPixel: c.window_msaa, verticalSync: c.window_vsync}}, function(window:Window) { + System.start({title: "untitled - ArmorPaint", width: c.window_w, height: c.window_h, window: {mode: windowMode, windowFeatures: windowFeatures}, framebuffer: {samplesPerPixel: c.window_msaa, verticalSync: c.window_vsync}}, function(window:Window) { iron.App.init(function() { Scene.setActive("Scene", function(object:Object) { var path = new RenderPath(); diff --git a/Sources/arm/data/ConstData.hx b/Sources/arm/data/ConstData.hx index 42fd977a..7cddf2ea 100644 --- a/Sources/arm/data/ConstData.hx +++ b/Sources/arm/data/ConstData.hx @@ -9,7 +9,7 @@ import iron.system.ArmPack; class ConstData { // 2D layer view - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) public static var layerViewVert = " uniform float4x4 projectionMatrix; @@ -59,7 +59,7 @@ void main() { // 2D layer merge - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) public static var layerMergeVert = " struct SPIRV_Cross_Output { float2 texCoord : TEXCOORD0; float4 gl_Position : SV_Position; }; @@ -165,7 +165,7 @@ void main() { "; #end - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) public static var cursorVert = " uniform float4x4 VP; @@ -173,6 +173,8 @@ uniform float4x4 invVP; uniform float2 mouse; uniform float2 step; uniform float radius; +Texture2D texa; // direct3d12 unit align +SamplerState _texa_sampler; // direct3d12 unit align Texture2D gbufferD; SamplerState _gbufferD_sampler; Texture2D gbuffer0; @@ -198,6 +200,8 @@ SPIRV_Cross_Output main(float4 pos : TEXCOORD1, float2 nor : TEXCOORD0, float2 t stage_output.texCoord = tex; float2 mouseinv = float2(mouse.x, 1.0 - mouse.y); float depth = gbufferD.SampleLevel(_gbufferD_sampler, mouseinv, 0).r; + float keep = texa.SampleLevel(_texa_sampler, mouseinv, 0).r; // direct3d12 unit align + depth += keep * 0.0; // direct3d12 unit align float4 wpos = float4(mouse * 2.0 - 1.0, depth * 2.0 - 1.0, 1.0); wpos = mul(wpos, invVP); wpos.xyz /= wpos.w; diff --git a/Sources/arm/nodes/Cycles.hx b/Sources/arm/nodes/Cycles.hx index a7c6de2c..2c3033be 100644 --- a/Sources/arm/nodes/Cycles.hx +++ b/Sources/arm/nodes/Cycles.hx @@ -1133,7 +1133,7 @@ class Cycles { frag.add_function(CyclesFunctions.str_cotangentFrame); } frag.n = true; - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) frag.write('mat3 TBN = cotangentFrame(n, vVec, texCoord);'); #else frag.write('mat3 TBN = cotangentFrame(n, -vVec, texCoord);'); @@ -1203,7 +1203,7 @@ class Cycles { // View Z Depth if (socket == node.outputs[1]) { curshader.add_uniform('vec2 cameraProj', '_cameraPlaneProj'); - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) curshader.wvpposition = true; return '(cameraProj.y / ((wvpposition.z / wvpposition.w) - cameraProj.x))'; #else @@ -1227,7 +1227,7 @@ class Cycles { else if (node.type == 'NEW_GEOMETRY') { if (socket == node.outputs[6]) // Backfacing - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) return '0.0'; // SV_IsFrontFace #else return '(1.0 - float(gl_FrontFacing))'; @@ -1813,7 +1813,7 @@ class Cycles { } static function to_vec3(s:String):String { - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) return '($s).xxx'; #else return 'vec3($s)'; diff --git a/Sources/arm/nodes/CyclesShader.hx b/Sources/arm/nodes/CyclesShader.hx index 4fc29a76..3af84927 100644 --- a/Sources/arm/nodes/CyclesShader.hx +++ b/Sources/arm/nodes/CyclesShader.hx @@ -291,7 +291,7 @@ class CyclesShader { sharedSampler = sharedSamplers[0].split(' ')[1] + '_sampler'; } - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) var s = '#define HLSL\n'; s += '#define sampler2D Texture2D\n'; s += '#define sampler3D Texture3D\n'; @@ -381,7 +381,7 @@ class CyclesShader { for (a in uniforms) { s += 'uniform ' + a + ';\n'; - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) if (StringTools.startsWith(a, 'sampler')) { s += 'SamplerState ' + a.split(' ')[1] + '_sampler;\n'; } @@ -392,7 +392,7 @@ class CyclesShader { for (a in sharedSamplers) { s += 'uniform ' + a + ';\n'; } - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) s += 'SamplerState $sharedSampler;\n'; #end } diff --git a/Sources/arm/nodes/MaterialBuilder.hx b/Sources/arm/nodes/MaterialBuilder.hx index 2dc46929..07583713 100644 --- a/Sources/arm/nodes/MaterialBuilder.hx +++ b/Sources/arm/nodes/MaterialBuilder.hx @@ -92,7 +92,7 @@ class MaterialBuilder { vert.write('vec2 subtex = tex;'); } - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) vert.write('vec2 tpos = vec2(subtex.x * 2.0 - 1.0, (1.0 - subtex.y) * 2.0 - 1.0);'); #else vert.write('vec2 tpos = vec2(subtex.xy * 2.0 - 1.0);'); @@ -277,7 +277,7 @@ class MaterialBuilder { if (UITrait.inst.pickerMaskHandle.position == 1) { // material id mask frag.wvpposition = true; frag.write('vec2 picker_sample_tc = vec2(wvpposition.x / wvpposition.w, wvpposition.y / wvpposition.w) * 0.5 + 0.5;'); - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) frag.write('picker_sample_tc.y = 1.0 - picker_sample_tc.y;'); #end frag.add_uniform('sampler2D texpaint_nor_undo', '_texpaint_nor_undo'); @@ -392,7 +392,7 @@ class MaterialBuilder { if (Context.material.paintSubs) { frag.write('float subs = 0.0;'); } - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) frag.write('const float blur_weight[15] = {0.034619 / 2.0, 0.044859 / 2.0, 0.055857 / 2.0, 0.066833 / 2.0, 0.076841 / 2.0, 0.084894 / 2.0, 0.090126 / 2.0, 0.09194 / 2.0, 0.090126 / 2.0, 0.084894 / 2.0, 0.076841 / 2.0, 0.066833 / 2.0, 0.055857 / 2.0, 0.044859 / 2.0, 0.034619 / 2.0};'); #else frag.write('const float blur_weight[15] = float[](0.034619 / 2.0, 0.044859 / 2.0, 0.055857 / 2.0, 0.066833 / 2.0, 0.076841 / 2.0, 0.084894 / 2.0, 0.090126 / 2.0, 0.09194 / 2.0, 0.090126 / 2.0, 0.084894 / 2.0, 0.076841 / 2.0, 0.066833 / 2.0, 0.055857 / 2.0, 0.044859 / 2.0, 0.034619 / 2.0);'); @@ -483,7 +483,7 @@ class MaterialBuilder { // Manual blending to preserve memory frag.wvpposition = true; frag.write('vec2 sample_tc = vec2(wvpposition.x / wvpposition.w, wvpposition.y / wvpposition.w) * 0.5 + 0.5;'); - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) frag.write('sample_tc.y = 1.0 - sample_tc.y;'); #end frag.add_uniform('sampler2D paintmask'); @@ -608,7 +608,7 @@ class MaterialBuilder { frag.n = true; frag.vVec = true; frag.add_function(CyclesFunctions.str_cotangentFrame); - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) frag.write('mat3 TBN = cotangentFrame(n, vVec, texCoord);'); #else frag.write('mat3 TBN = cotangentFrame(n, -vVec, texCoord);'); @@ -772,7 +772,7 @@ class MaterialBuilder { } else { frag.vVec = true; - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) frag.write('mat3 TBN = cotangentFrame(n, vVec, texCoord);'); #else frag.write('mat3 TBN = cotangentFrame(n, -vVec, texCoord);'); @@ -952,7 +952,7 @@ class MaterialBuilder { frag.vVec = true; frag.add_function(CyclesFunctions.str_cotangentFrame); - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) frag.write('mat3 TBN = cotangentFrame(n, vVec, texCoord);'); #else frag.write('mat3 TBN = cotangentFrame(n, -vVec, texCoord);'); @@ -1203,7 +1203,7 @@ class MaterialBuilder { } static function getMaxVisibleLayers():Int { - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) // 128 texture slots available // 4 textures per layer (3 + 1 mask) // 32 layers - base + 31 on top @@ -1227,7 +1227,7 @@ class MaterialBuilder { var ds = UITrait.inst.displaceStrength * 0.02; pipeState.vertexShader = kha.graphics4.VertexShader.fromSource( - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) "uniform float4x4 W; uniform float3x3 N; Texture2D texpaint_pack; diff --git a/Sources/arm/render/RenderPathDeferred.hx b/Sources/arm/render/RenderPathDeferred.hx index 8fe94e93..df71a141 100644 --- a/Sources/arm/render/RenderPathDeferred.hx +++ b/Sources/arm/render/RenderPathDeferred.hx @@ -955,7 +955,6 @@ class RenderPathDeferred { #if rp_overlays { path.setTarget("buf"); - path.clearTarget(null, 1.0); var currentG = path.currentG; path.drawMeshes("overlay"); diff --git a/Sources/arm/render/RenderPathPreview.hx b/Sources/arm/render/RenderPathPreview.hx index b7fa0b8a..4946afab 100644 --- a/Sources/arm/render/RenderPathPreview.hx +++ b/Sources/arm/render/RenderPathPreview.hx @@ -29,7 +29,7 @@ class RenderPathPreview { // --- // Deferred light // --- - #if (!kha_opengl) + #if (!kha_opengl && !kha_direct3d12) path.setDepthFrom("mtex", "mgbuffer1"); // Unbind depth so we can read it #end path.setTarget("mtex"); @@ -43,7 +43,7 @@ class RenderPathPreview { #end path.drawShader("shader_datas/deferred_light/deferred_light"); - #if (!kha_opengl) + #if (!kha_opengl && !kha_direct3d12) path.setDepthFrom("mtex", "mgbuffer0"); // Re-bind depth #end @@ -92,7 +92,7 @@ class RenderPathPreview { // --- // Deferred light // --- - #if (!kha_opengl) + #if (!kha_opengl && !kha_direct3d12) path.setDepthFrom("tex", "gbuffer1"); // Unbind depth so we can read it #end path.setTarget("tex"); @@ -106,7 +106,7 @@ class RenderPathPreview { #end path.drawShader("shader_datas/deferred_light/deferred_light"); - #if (!kha_opengl) + #if (!kha_opengl && !kha_direct3d12) path.setDepthFrom("tex", "gbuffer0"); // Re-bind depth #end diff --git a/Sources/arm/ui/UIMenu.hx b/Sources/arm/ui/UIMenu.hx index c1a315d8..a304b511 100644 --- a/Sources/arm/ui/UIMenu.hx +++ b/Sources/arm/ui/UIMenu.hx @@ -168,7 +168,7 @@ class UIMenu { var sha = Macro.buildSha(); sha = sha.substr(1, sha.length - 2); var date = Macro.buildDate().split(" ")[0]; - var gapi = #if (kha_direct3d11) "Direct3D11" #else "OpenGL" #end; + var gapi = #if (kha_direct3d11) "Direct3D11" #elseif (kha_direct3d12) "Direct3D12" #else "OpenGL" #end; var msg = "ArmorPaint.org - v" + App.version + " (" + date + ") - " + sha + "\n"; msg += System.systemId + " - " + gapi; diff --git a/Sources/arm/ui/UITrait.hx b/Sources/arm/ui/UITrait.hx index 699b2c18..46165b6e 100644 --- a/Sources/arm/ui/UITrait.hx +++ b/Sources/arm/ui/UITrait.hx @@ -750,7 +750,7 @@ class UITrait { if (!brush3d || in2dView || decal) { if (decal) { psize = Std.int(256 * (brushRadius * brushNodesRadius)); - #if kha_direct3d11 + #if (kha_direct3d11 || kha_direct3d12) g.drawScaledImage(decalImage, mx - psize / 2, my - psize / 2, psize, psize); #else g.drawScaledImage(decalImage, mx - psize / 2, my - psize / 2 + psize, psize, -psize);