stuff
This commit is contained in:
96
modules/wallpaper-engine/shaders/editorpaintbrush.frag
Normal file
96
modules/wallpaper-engine/shaders/editorpaintbrush.frag
Normal file
@@ -0,0 +1,96 @@
|
||||
|
||||
#include "common_blur.h"
|
||||
|
||||
varying vec2 v_TexCoord;
|
||||
varying vec3 v_Position;
|
||||
|
||||
uniform vec4 g_BrushPosition; // {"material":"brushposition","default":"0 0"}
|
||||
uniform vec4 g_BrushSettings; // {"material":"brushsettings","default":"0 0 0 0"}
|
||||
uniform vec4 g_BrushColor; // {"material":"brushcolor","default":"0 0 0"}
|
||||
|
||||
uniform sampler2D g_Texture0;
|
||||
|
||||
uniform vec4 g_Texture0Resolution;
|
||||
|
||||
//uniform vec2 g_TexelSize;
|
||||
//uniform vec2 g_TexelSizeHalf;
|
||||
|
||||
#define BRUSHSIZE g_BrushSettings.x
|
||||
|
||||
void main() {
|
||||
vec4 albedo = CAST4(0);
|
||||
albedo.rgb = g_BrushColor;
|
||||
|
||||
vec2 adjusted = (v_Position.xy - g_BrushPosition.xy) * g_BrushPosition.zw + g_BrushPosition.xy;
|
||||
|
||||
vec2 texelSize = 1;
|
||||
vec4 multiSample = vec4(
|
||||
length(vec2(adjusted.x - texelSize.x, adjusted.y - texelSize.y) - g_BrushPosition.xy),
|
||||
length(vec2(adjusted.x + texelSize.x, adjusted.y - texelSize.y) - g_BrushPosition.xy),
|
||||
length(vec2(adjusted.x + texelSize.x, adjusted.y + texelSize.y) - g_BrushPosition.xy),
|
||||
length(vec2(adjusted.x - texelSize.x, adjusted.y + texelSize.y) - g_BrushPosition.xy)
|
||||
);
|
||||
|
||||
float feather = max(0.5f, BRUSHSIZE * 0.5f * (1.0f - g_BrushSettings.y));
|
||||
vec4 blend4 = smoothstep(multiSample - feather, multiSample + feather, CAST4(BRUSHSIZE * 0.5f));
|
||||
float blend = dot(blend4, CAST4(0.25));
|
||||
|
||||
float opacity = mix(0.0f, g_BrushSettings.z, blend);
|
||||
albedo.a = opacity;
|
||||
|
||||
#ifdef PINCH
|
||||
float pinchSign = albedo.g * 2.0 - 1.0;
|
||||
vec2 pinchDelta = ((adjusted - g_BrushPosition.xy) * pinchSign) / BRUSHSIZE;
|
||||
float pinchDistance = length(pinchDelta);
|
||||
pinchDelta /= pinchDistance;
|
||||
pinchDistance = saturate(pinchDistance);
|
||||
|
||||
vec2 pinchColor = pinchDelta * pinchDistance * 0.5 + 0.5;
|
||||
albedo.b = 0.0;
|
||||
albedo.rg = mix(vec2(0.5, 0.5), pinchColor, albedo.r);
|
||||
#endif
|
||||
|
||||
#if SPIN
|
||||
vec2 positionDelta = ((adjusted - g_BrushPosition.xy)) / BRUSHSIZE;
|
||||
positionDelta.y = -positionDelta.y;
|
||||
float temp = positionDelta.x;
|
||||
positionDelta.x = positionDelta.y;
|
||||
positionDelta.y = temp;
|
||||
vec2 spinColor = positionDelta * 0.5 + 0.5;
|
||||
|
||||
albedo.b = 0.0;
|
||||
albedo.rg = mix(vec2(0.5, 0.5), spinColor, albedo.r);
|
||||
#endif
|
||||
|
||||
gl_FragColor = albedo;
|
||||
|
||||
#if BLUR
|
||||
// sample weights 3
|
||||
// 0.14975490496277529 +
|
||||
// 0.23722688396633606 +
|
||||
// 0.23722688396633606 +
|
||||
// 0.37579132710455257
|
||||
// 0.72099
|
||||
// (0.27901 / 0.72099)
|
||||
// (0.44198 / 0.72099)
|
||||
|
||||
// ggrid distance
|
||||
// sum: 0.318663
|
||||
|
||||
|
||||
vec2 tmpTexel = g_BrushColor.r * 10.0 / g_Texture0Resolution.xy;
|
||||
|
||||
gl_FragColor.rgb = texSample2D(g_Texture0, v_TexCoord - tmpTexel * vec2((0.123317 / 0.318663), (0.123317 / 0.318663))).rgb * 0.37579132710455257 +
|
||||
texSample2D(g_Texture0, v_TexCoord + vec2(tmpTexel.x, -tmpTexel.y) * vec2((0.195346 / 0.318663), (0.123317 / 0.318663))).rgb * 0.23722688396633606 +
|
||||
texSample2D(g_Texture0, v_TexCoord + vec2(-tmpTexel.x, tmpTexel.y) * vec2((0.123317 / 0.318663), (0.195346 / 0.318663))).rgb * 0.23722688396633606 +
|
||||
texSample2D(g_Texture0, v_TexCoord + tmpTexel * vec2((0.195346 / 0.318663), (0.195346 / 0.318663))).rgb * 0.14975490496277529;
|
||||
|
||||
//gl_FragColor = texSample2D(g_Texture0, v_TexCoord - tmpTexel) +
|
||||
// texSample2D(g_Texture0, v_TexCoord + vec2(tmpTexel.x, -tmpTexel.y)) +
|
||||
// texSample2D(g_Texture0, v_TexCoord + vec2(-tmpTexel.x, tmpTexel.y)) +
|
||||
// texSample2D(g_Texture0, v_TexCoord + tmpTexel);
|
||||
//gl_FragColor *= 0.25;
|
||||
|
||||
//gl_FragColor.a = 1;
|
||||
#endif
|
||||
}
|
||||
Reference in New Issue
Block a user