diff --git a/Shaders/painter/glsl/cursor.frag.glsl b/Shaders/painter/cursor.frag.glsl similarity index 100% rename from Shaders/painter/glsl/cursor.frag.glsl rename to Shaders/painter/cursor.frag.glsl diff --git a/Shaders/painter/glsl/cursor.vert.glsl b/Shaders/painter/cursor.vert.glsl similarity index 88% rename from Shaders/painter/glsl/cursor.vert.glsl rename to Shaders/painter/cursor.vert.glsl index 51fc5f27..ba4353a0 100644 --- a/Shaders/painter/glsl/cursor.vert.glsl +++ b/Shaders/painter/cursor.vert.glsl @@ -6,6 +6,9 @@ uniform vec2 texStep; uniform float radius; uniform vec3 cameraRight; uniform sampler2D gbufferD; +#ifdef HLSL +uniform sampler2D texa; // direct3d12 unit align +#endif in vec4 pos; in vec2 nor; in vec2 tex; @@ -18,7 +21,12 @@ out vec2 texCoord; // return p * (1.0 - c) + q; // } vec3 getPos(vec2 uv) { + #ifdef HLSL + float keep = textureLod(texa, vec2(0.0, 0.0), 0.0).r + pos.x + nor.x; // direct3d12 unit align + float depth = textureLod(gbufferD, vec2(uv.x, 1.0 - uv.y), 0.0).r; + #else float depth = textureLod(gbufferD, uv, 0.0).r; + #endif vec4 wpos = vec4(uv * 2.0 - 1.0, depth * 2.0 - 1.0, 1.0); wpos = invVP * wpos; return wpos.xyz / wpos.w; diff --git a/Shaders/painter/hlsl/cursor.frag.glsl b/Shaders/painter/hlsl/cursor.frag.glsl deleted file mode 100644 index a07c2a6e..00000000 Binary files a/Shaders/painter/hlsl/cursor.frag.glsl and /dev/null differ diff --git a/Shaders/painter/hlsl/cursor.vert.glsl b/Shaders/painter/hlsl/cursor.vert.glsl deleted file mode 100644 index f73830c2..00000000 Binary files a/Shaders/painter/hlsl/cursor.vert.glsl and /dev/null differ diff --git a/Shaders/painter/hlsl/layer_copy.frag.glsl b/Shaders/painter/hlsl/layer_copy.frag.glsl deleted file mode 100644 index e732fbcf..00000000 Binary files a/Shaders/painter/hlsl/layer_copy.frag.glsl and /dev/null differ diff --git a/Shaders/painter/hlsl/layer_merge.frag.glsl b/Shaders/painter/hlsl/layer_merge.frag.glsl deleted file mode 100644 index e0389d52..00000000 Binary files a/Shaders/painter/hlsl/layer_merge.frag.glsl and /dev/null differ diff --git a/Shaders/painter/hlsl/layer_merge.vert.glsl b/Shaders/painter/hlsl/layer_merge.vert.glsl deleted file mode 100644 index 64937e0e..00000000 Binary files a/Shaders/painter/hlsl/layer_merge.vert.glsl and /dev/null differ diff --git a/Shaders/painter/hlsl/layer_view.frag.glsl b/Shaders/painter/hlsl/layer_view.frag.glsl deleted file mode 100644 index 00707559..00000000 Binary files a/Shaders/painter/hlsl/layer_view.frag.glsl and /dev/null differ diff --git a/Shaders/painter/hlsl/layer_view.vert.glsl b/Shaders/painter/hlsl/layer_view.vert.glsl deleted file mode 100644 index f9fe5d88..00000000 Binary files a/Shaders/painter/hlsl/layer_view.vert.glsl and /dev/null differ diff --git a/Shaders/painter/hlsl/mask_merge.frag.glsl b/Shaders/painter/hlsl/mask_merge.frag.glsl deleted file mode 100644 index 044dac21..00000000 Binary files a/Shaders/painter/hlsl/mask_merge.frag.glsl and /dev/null differ diff --git a/Shaders/painter/hlsl/src/build.bat b/Shaders/painter/hlsl/src/build.bat deleted file mode 100644 index 935b19e3..00000000 --- a/Shaders/painter/hlsl/src/build.bat +++ /dev/null @@ -1,8 +0,0 @@ -..\..\..\bin\hlslbin.exe cursor.vert.hlsl ..\cursor.vert.glsl vs_5_0 -i nor -i pos -i tex -..\..\..\bin\hlslbin.exe cursor.frag.hlsl ..\cursor.frag.glsl ps_5_0 -..\..\..\bin\hlslbin.exe layer_view.vert.hlsl ..\layer_view.vert.glsl vs_5_0 -i col -i pos -i tex -..\..\..\bin\hlslbin.exe layer_view.frag.hlsl ..\layer_view.frag.glsl ps_5_0 -..\..\..\bin\hlslbin.exe layer_copy.frag.hlsl ..\layer_copy.frag.glsl ps_5_0 -..\..\..\bin\hlslbin.exe layer_merge.vert.hlsl ..\layer_merge.vert.glsl vs_5_0 -i pos -..\..\..\bin\hlslbin.exe layer_merge.frag.hlsl ..\layer_merge.frag.glsl ps_5_0 -..\..\..\bin\hlslbin.exe mask_merge.frag.hlsl ..\mask_merge.frag.glsl ps_5_0 diff --git a/Shaders/painter/hlsl/src/cursor.frag.hlsl b/Shaders/painter/hlsl/src/cursor.frag.hlsl deleted file mode 100644 index f5c6ff1b..00000000 --- a/Shaders/painter/hlsl/src/cursor.frag.hlsl +++ /dev/null @@ -1,7 +0,0 @@ -uniform float3 tint; -Texture2D tex; -SamplerState _tex_sampler; -float4 main(float2 texCoord : TEXCOORD0) : SV_Target0 { - float4 col = tex.Sample(_tex_sampler, texCoord); - return float4((col.rgb / col.a) * tint, col.a); -} diff --git a/Shaders/painter/hlsl/src/cursor.vert.hlsl b/Shaders/painter/hlsl/src/cursor.vert.hlsl deleted file mode 100644 index 3165d51c..00000000 --- a/Shaders/painter/hlsl/src/cursor.vert.hlsl +++ /dev/null @@ -1,60 +0,0 @@ -uniform float4x4 VP; -uniform float4x4 invVP; -uniform float2 mouse; -uniform float2 texStep; -uniform float radius; -uniform float3 cameraRight; -Texture2D texa; // direct3d12 unit align -SamplerState _texa_sampler; // direct3d12 unit align -Texture2D gbufferD; -SamplerState _gbufferD_sampler; - -float3 getPos(float2 uv) { - float2 uvinv = float2(uv.x, 1.0 - uv.y); - float depth = gbufferD.SampleLevel(_gbufferD_sampler, uvinv, 0).r; - float4 wpos = float4(uv * 2.0 - 1.0, depth * 2.0 - 1.0, 1.0); - wpos = mul(wpos, invVP); - return wpos.xyz / wpos.w; -} - -float3 getNormal(float3 p0, float2 uv) { - float3 p1 = getPos(uv + float2(texStep.x, 0)); - float3 p2 = getPos(uv + float2(0, texStep.y)); - return normalize(cross(p2 - p0, p1 - p0)); -} - -void createBasis(float3 normal, out float3 tangent, out float3 binormal) { - // Project vector onto plane - tangent = normalize(cameraRight - normal * dot(cameraRight, normal)); - binormal = cross(tangent, normal); -} - -struct SPIRV_Cross_Output { float2 texCoord : TEXCOORD0; float4 gl_Position : SV_Position; }; -SPIRV_Cross_Output main(float2 nor : TEXCOORD0, float4 pos : TEXCOORD1, float2 tex : TEXCOORD2, uint gl_VertexID : SV_VertexID) { - SPIRV_Cross_Output stage_output; - stage_output.texCoord = tex; - float3 wpos = getPos(mouse); - float2 uv1 = mouse + texStep * 4; - float2 uv2 = mouse - texStep * 4; - float3 wpos1 = getPos(uv1); - float3 wpos2 = getPos(uv2); - float keep = texa.SampleLevel(_texa_sampler, mouse, 0).r; // direct3d12 unit align - wpos.x += keep * 0.0000001; // direct3d12 unit align; - float3 n = normalize( - getNormal(wpos, mouse) + - getNormal(wpos1, uv1) + - getNormal(wpos2, uv2) - ); - - float3 n_tan; - float3 n_bin; - createBasis(n, n_tan, n_bin); - if (gl_VertexID == 0) wpos += normalize(-n_tan - n_bin) * 0.7 * radius; - else if (gl_VertexID == 1) wpos += normalize( n_tan - n_bin) * 0.7 * radius; - else if (gl_VertexID == 2) wpos += normalize( n_tan + n_bin) * 0.7 * radius; - else if (gl_VertexID == 3) wpos += normalize(-n_tan + n_bin) * 0.7 * radius; - - stage_output.gl_Position = mul(float4(wpos, 1.0), VP); - stage_output.gl_Position.z = (stage_output.gl_Position.z + stage_output.gl_Position.w) * 0.5; - return stage_output; -} diff --git a/Shaders/painter/hlsl/src/layer_copy.frag.hlsl b/Shaders/painter/hlsl/src/layer_copy.frag.hlsl deleted file mode 100644 index 6a653ae3..00000000 --- a/Shaders/painter/hlsl/src/layer_copy.frag.hlsl +++ /dev/null @@ -1,5 +0,0 @@ -Texture2D tex; -SamplerState _tex_sampler; -float4 main(float4 color : TEXCOORD0, float2 texCoord : TEXCOORD1) : SV_Target0 { - return tex.SampleLevel(_tex_sampler, texCoord, 0).rgba * color; -} diff --git a/Shaders/painter/hlsl/src/layer_merge.frag.hlsl b/Shaders/painter/hlsl/src/layer_merge.frag.hlsl deleted file mode 100644 index a422f0a7..00000000 --- a/Shaders/painter/hlsl/src/layer_merge.frag.hlsl +++ /dev/null @@ -1,90 +0,0 @@ -Texture2D tex0; -SamplerState _tex0_sampler; -Texture2D tex1; -SamplerState _tex1_sampler; -Texture2D texmask; -SamplerState _texmask_sampler; -Texture2D texa; -SamplerState _texa_sampler; -uniform float opac; -uniform int blending; -float3 hsv_to_rgb(const float3 c) { - const float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); - float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); - return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); -} -float3 rgb_to_hsv(const float3 c) { - const float4 K = float4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); - float4 p = lerp(float4(c.bg, K.wz), float4(c.gb, K.xy), step(c.b, c.g)); - float4 q = lerp(float4(p.xyw, c.r), float4(c.r, p.yzx), step(p.x, c.r)); - float d = q.x - min(q.w, q.y); - float e = 1.0e-10; - return float3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); -} -struct SPIRV_Cross_Output { float4 color0 : SV_Target0; }; -SPIRV_Cross_Output main(float2 texCoord : TEXCOORD0) { - float4 col0 = tex0.SampleLevel(_tex0_sampler, texCoord, 0); - float4 cola = texa.SampleLevel(_texa_sampler, texCoord, 0); - float str = col0.a * opac; - str *= texmask.SampleLevel(_texmask_sampler, texCoord, 0).r; - SPIRV_Cross_Output stage_output; - if (blending == -1) { // Merging _nor and _pack - float4 col1 = tex1.SampleLevel(_tex1_sampler, texCoord, 0); - stage_output.color0 = float4(lerp(cola, col1, str)); - } - else if (blending == 0) { // Mix - stage_output.color0 = float4(lerp(cola.rgb, col0.rgb, str), max(col0.a, cola.a)); - } - else if (blending == 1) { // Darken - stage_output.color0 = float4(lerp(cola.rgb, min(cola.rgb, col0.rgb), str), max(col0.a, cola.a)); - } - else if (blending == 2) { // Multiply - stage_output.color0 = float4(lerp(cola.rgb, cola.rgb * col0.rgb, str), max(col0.a, cola.a)); - } - else if (blending == 3) { // Burn - stage_output.color0 = float4(lerp(cola.rgb, float3(1.0, 1.0, 1.0) - (float3(1.0, 1.0, 1.0) - cola.rgb) / col0.rgb, str), max(col0.a, cola.a)); - } - else if (blending == 4) { // Lighten - stage_output.color0 = float4(max(cola.rgb, col0.rgb * str), max(col0.a, cola.a)); - } - else if (blending == 5) { // Screen - stage_output.color0 = float4((float3(1.0, 1.0, 1.0) - (float3(1.0 - str, 1.0 - str, 1.0 - str) + str * (float3(1.0, 1.0, 1.0) - col0.rgb)) * (float3(1.0, 1.0, 1.0) - cola.rgb)), max(col0.a, cola.a)); - } - else if (blending == 6) { // Dodge - stage_output.color0 = float4(lerp(cola.rgb, cola.rgb / (float3(1.0, 1.0, 1.0) - col0.rgb), str), max(col0.a, cola.a)); - } - else if (blending == 7) { // Add - stage_output.color0 = float4(lerp(cola.rgb, cola.rgb + col0.rgb, str), max(col0.a, cola.a)); - } - else if (blending == 8) { // Overlay - stage_output.color0 = float4(lerp(cola.rgb, (cola.rgb < float3(0.5, 0.5, 0.5) ? float3(2.0, 2.0, 2.0) * cola.rgb * col0.rgb : float3(1.0, 1.0, 1.0) - float3(2.0, 2.0, 2.0) * (float3(1.0, 1.0, 1.0) - col0.rgb) * (float3(1.0, 1.0, 1.0) - cola.rgb)), str), max(col0.a, cola.a)); - } - else if (blending == 9) { // Soft Light - stage_output.color0 = float4(((1.0 - str) * cola.rgb + str * ((float3(1.0, 1.0, 1.0) - cola.rgb) * col0.rgb * cola.rgb + cola.rgb * (float3(1.0, 1.0, 1.0) - (float3(1.0, 1.0, 1.0) - col0.rgb) * (float3(1.0, 1.0, 1.0) - cola.rgb)))), max(col0.a, cola.a)); - } - else if (blending == 10) { // Linear Light - stage_output.color0 = float4((cola.rgb + str * (float3(2.0, 2.0, 2.0) * (col0.rgb - float3(0.5, 0.5, 0.5)))), max(col0.a, cola.a)); - } - else if (blending == 11) { // Difference - stage_output.color0 = float4(lerp(cola.rgb, abs(cola.rgb - col0.rgb), str), max(col0.a, cola.a)); - } - else if (blending == 12) { // Subtract - stage_output.color0 = float4(lerp(cola.rgb, cola.rgb - col0.rgb, str), max(col0.a, cola.a)); - } - else if (blending == 13) { // Divide - stage_output.color0 = float4(float3(1.0 - str, 1.0 - str, 1.0 - str) * cola.rgb + float3(str, str, str) * cola.rgb / col0.rgb, max(col0.a, cola.a)); - } - else if (blending == 14) { // Hue - stage_output.color0 = float4(lerp(cola.rgb, hsv_to_rgb(float3(rgb_to_hsv(col0.rgb).r, rgb_to_hsv(cola.rgb).g, rgb_to_hsv(cola.rgb).b)), str), max(col0.a, cola.a)); - } - else if (blending == 15) { // Saturation - stage_output.color0 = float4(lerp(cola.rgb, hsv_to_rgb(float3(rgb_to_hsv(cola.rgb).r, rgb_to_hsv(col0.rgb).g, rgb_to_hsv(cola.rgb).b)), str), max(col0.a, cola.a)); - } - else if (blending == 16) { // Color - stage_output.color0 = float4(lerp(cola.rgb, hsv_to_rgb(float3(rgb_to_hsv(col0.rgb).r, rgb_to_hsv(col0.rgb).g, rgb_to_hsv(cola.rgb).b)), str), max(col0.a, cola.a)); - } - else { // Value - stage_output.color0 = float4(lerp(cola.rgb, hsv_to_rgb(float3(rgb_to_hsv(cola.rgb).r, rgb_to_hsv(cola.rgb).g, rgb_to_hsv(col0.rgb).b)), str), max(col0.a, cola.a)); - } - return stage_output; -} diff --git a/Shaders/painter/hlsl/src/layer_merge.vert.hlsl b/Shaders/painter/hlsl/src/layer_merge.vert.hlsl deleted file mode 100644 index 1cd347f6..00000000 --- a/Shaders/painter/hlsl/src/layer_merge.vert.hlsl +++ /dev/null @@ -1,10 +0,0 @@ -struct SPIRV_Cross_Output { float2 texCoord : TEXCOORD0; float4 gl_Position : SV_Position; }; -SPIRV_Cross_Output main(float2 pos : TEXCOORD0) { - SPIRV_Cross_Output stage_output; - stage_output.gl_Position = float4(pos.xy, 0.0, 1.0); - stage_output.gl_Position.z = (stage_output.gl_Position.z + stage_output.gl_Position.w) * 0.5; - const float2 madd = float2(0.5, 0.5); - stage_output.texCoord = pos.xy * madd + madd; - stage_output.texCoord.y = 1.0 - stage_output.texCoord.y; - return stage_output; -} diff --git a/Shaders/painter/hlsl/src/layer_view.frag.hlsl b/Shaders/painter/hlsl/src/layer_view.frag.hlsl deleted file mode 100644 index 419fdfbe..00000000 --- a/Shaders/painter/hlsl/src/layer_view.frag.hlsl +++ /dev/null @@ -1,25 +0,0 @@ -Texture2D tex; -SamplerState _tex_sampler; -uniform int channel; -float4 main(float4 color : TEXCOORD0, float2 texCoord : TEXCOORD1) : SV_Target0 { - if (channel == 1) { - return tex.SampleLevel(_tex_sampler, texCoord, 0).rrra * color; - } - else if (channel == 2) { - return tex.SampleLevel(_tex_sampler, texCoord, 0).ggga * color; - } - else if (channel == 3) { - return tex.SampleLevel(_tex_sampler, texCoord, 0).bbba * color; - } - else if (channel == 4) { - return tex.SampleLevel(_tex_sampler, texCoord, 0).aaaa * color; - } - else if (channel == 5) { - return tex.SampleLevel(_tex_sampler, texCoord, 0).rgba * color; - } - else { - float4 sample = tex.SampleLevel(_tex_sampler, texCoord, 0).rgba; - sample.rgb *= sample.a; - return sample.rgba * color; - } -} diff --git a/Shaders/painter/hlsl/src/layer_view.vert.hlsl b/Shaders/painter/hlsl/src/layer_view.vert.hlsl deleted file mode 100644 index f07c6cee..00000000 --- a/Shaders/painter/hlsl/src/layer_view.vert.hlsl +++ /dev/null @@ -1,10 +0,0 @@ -uniform float4x4 projectionMatrix; -struct SPIRV_Cross_Output { float4 color : TEXCOORD0; float2 texCoord : TEXCOORD1; float4 gl_Position : SV_Position; }; -SPIRV_Cross_Output main(float4 col : TEXCOORD0, float3 pos : TEXCOORD1, float2 tex : TEXCOORD2) { - SPIRV_Cross_Output stage_output; - stage_output.gl_Position = mul(float4(pos, 1.0f), projectionMatrix); - stage_output.gl_Position.z = (stage_output.gl_Position.z + stage_output.gl_Position.w) * 0.5; - stage_output.texCoord = tex; - stage_output.color = col; - return stage_output; -} diff --git a/Shaders/painter/hlsl/src/mask_merge.frag.hlsl b/Shaders/painter/hlsl/src/mask_merge.frag.hlsl deleted file mode 100644 index 96ad14a2..00000000 --- a/Shaders/painter/hlsl/src/mask_merge.frag.hlsl +++ /dev/null @@ -1,12 +0,0 @@ -Texture2D tex0; -SamplerState _tex0_sampler; -Texture2D texa; -SamplerState _texa_sampler; -struct SPIRV_Cross_Output { float4 color0 : SV_Target0; }; -SPIRV_Cross_Output main(float2 texCoord : TEXCOORD0) { - float4 col0 = tex0.SampleLevel(_tex0_sampler, texCoord, 0); - float mask = texa.SampleLevel(_texa_sampler, texCoord, 0).r; - SPIRV_Cross_Output stage_output; - stage_output.color0 = float4(col0.rgb, col0.a * mask); - return stage_output; -} diff --git a/Shaders/painter/glsl/layer_copy.frag.glsl b/Shaders/painter/layer_copy.frag.glsl similarity index 100% rename from Shaders/painter/glsl/layer_copy.frag.glsl rename to Shaders/painter/layer_copy.frag.glsl diff --git a/Shaders/painter/glsl/layer_merge.frag.glsl b/Shaders/painter/layer_merge.frag.glsl similarity index 100% rename from Shaders/painter/glsl/layer_merge.frag.glsl rename to Shaders/painter/layer_merge.frag.glsl diff --git a/Shaders/painter/glsl/layer_merge.vert.glsl b/Shaders/painter/layer_merge.vert.glsl similarity index 76% rename from Shaders/painter/glsl/layer_merge.vert.glsl rename to Shaders/painter/layer_merge.vert.glsl index e6f07bcc..ba55c4c5 100644 --- a/Shaders/painter/glsl/layer_merge.vert.glsl +++ b/Shaders/painter/layer_merge.vert.glsl @@ -5,4 +5,7 @@ void main() { gl_Position = vec4(pos.xy, 0.0, 1.0); const vec2 madd = vec2(0.5, 0.5); texCoord = pos.xy * madd + madd; + #ifdef HLSL + texCoord.y = 1.0 - texCoord.y; + #endif } diff --git a/Shaders/painter/glsl/layer_view.frag.glsl b/Shaders/painter/layer_view.frag.glsl similarity index 100% rename from Shaders/painter/glsl/layer_view.frag.glsl rename to Shaders/painter/layer_view.frag.glsl diff --git a/Shaders/painter/glsl/layer_view.vert.glsl b/Shaders/painter/layer_view.vert.glsl similarity index 100% rename from Shaders/painter/glsl/layer_view.vert.glsl rename to Shaders/painter/layer_view.vert.glsl diff --git a/Shaders/painter/glsl/mask_merge.frag.glsl b/Shaders/painter/mask_merge.frag.glsl similarity index 100% rename from Shaders/painter/glsl/mask_merge.frag.glsl rename to Shaders/painter/mask_merge.frag.glsl diff --git a/khafile.js b/khafile.js index ce83edf3..b26ed29f 100644 --- a/khafile.js +++ b/khafile.js @@ -124,12 +124,6 @@ else { // painter, creator project.addAssets("Assets/painter/export_presets/*", { notinlist: true, destination: "data/export_presets/{name}" }); project.addAssets("Assets/painter/keymap_presets/*", { notinlist: true, destination: "data/keymap_presets/{name}" }); - if (process.platform === "win32" && win_hlsl && !android && !ios) { - project.addShaders("Shaders/painter/hlsl/*.glsl", { noprocessing: true, noembed: false }); - } - else { - project.addShaders("Shaders/painter/glsl/*.glsl", { noembed: false }); - } } if (build === "painter") {