56 lines
2.1 KiB
PostScript
56 lines
2.1 KiB
PostScript
|
/*
|
||
|
Edge detection pass
|
||
|
Author: LVutner (Discord: @lvutner)
|
||
|
|
||
|
|
||
|
This is free and unencumbered software released into the public domain.
|
||
|
|
||
|
Anyone is free to copy, modify, publish, use, compile, sell, or
|
||
|
distribute this software, either in source code form or as a compiled
|
||
|
binary, for any purpose, commercial or non-commercial, and by any
|
||
|
means.
|
||
|
|
||
|
In jurisdictions that recognize copyright laws, the author or authors
|
||
|
of this software dedicate any and all copyright interest in the
|
||
|
software to the public domain. We make this dedication for the benefit
|
||
|
of the public at large and to the detriment of our heirs and
|
||
|
successors. We intend this dedication to be an overt act of
|
||
|
relinquishment in perpetuity of all present and future rights to this
|
||
|
software under copyright law.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||
|
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||
|
|
||
|
For more information, please refer to <https://unlicense.org>
|
||
|
*/
|
||
|
|
||
|
#include "fluid_common_render.h"
|
||
|
|
||
|
#define fs_edge_threshold 0.97 //Higher = more strict edge detection
|
||
|
|
||
|
float main(float4 hpos : SV_Position) : SV_Target
|
||
|
{
|
||
|
//Dimensions
|
||
|
float4 sc_res = float4(RTWidth, RTHeight, 1.0 / RTWidth, 1.0 / RTHeight);
|
||
|
|
||
|
//Screen UV
|
||
|
float2 texcoord = hpos.xy * sc_res.zw;
|
||
|
|
||
|
//3x3 neighborhood
|
||
|
float4 tap0 = rayDataTexSmall.GatherAlpha(samPointClamp, texcoord);
|
||
|
float4 tap1 = rayDataTexSmall.GatherAlpha(samPointClamp, texcoord, int2(-1, -1));
|
||
|
float4 tap2 = rayDataTexSmall.GatherAlpha(samPointClamp, texcoord, int2(-1, 1));
|
||
|
float4 tap3 = rayDataTexSmall.GatherAlpha(samPointClamp, texcoord, int2(1, -1));
|
||
|
|
||
|
float4 delta0 = abs(float4(tap1.xzw, tap2.w) - tap0.wwww);
|
||
|
float4 delta1 = abs(float4(tap3.wx, tap0.xy) - tap0.wwww);
|
||
|
|
||
|
//Get da edges
|
||
|
return step(fs_edge_threshold, dot((delta0 + delta1), 0.5));
|
||
|
}
|