::here is an attempt at putting together a draft for a patched version of Edge
the assembly of texcoords and sampler nodes is not clear atm, also got lost in filetypes
having it working at some point could make for a basic effect patching help patch
edge.vl (136.7 KB)
anyone care to explain missing parts is welcome ::
edge 01.vl (147.6 KB)
did some cleaning up,
added comments to the sections that dont click together,
mostly its seems because of filetypes that do not match:
GpuInteger32 vs GpuFloat32
GpuValueVector4 vs GpuValueGpuVector4
GpuValueFloat32 vs GpuFloat32
GpuVector4 vs GpuValueVector4
looking at the code of Edge, I wouldn’t patch it, that would be a big graph of nodes… why not just make a new TextureFX?
float4 q(float2 x,float2 off,float v){return InputTexture.SampleLevel(s0,x+off/R,v);}
float4 pEDGE(float4 PosWVP:SV_POSITION,float2 x:TEXCOORD0):SV_Target{
float rad=max(Radius,0);
float3 e=float3(1,-1,0)*rad;
float v=log2(rad);
float4 cx=q(x,e.xy,v)+q(x,e.xz,v)+q(x,e.xx,v)-q(x,e.yy,v)-q(x,e.yz,v)-q(x,e.yx,v);
float4 cy=q(x,e.yy,v)+q(x,e.zy,v)+q(x,e.xy,v)-q(x,e.yx,v)-q(x,e.zx,v)-q(x,e.xx,v);
float4 c=sqrt(cx*cx+cy*cy)*Bright*pow(2,rad/max(R.x,R.y))/sqrt(saturate(rad)+.001);
c.a=InputTexture.SampleLevel(s0,x,0).a;
return c;
}
The ShaderFX nodes are more meant to plug together parts of shaders, patching algorithms with them is possible, but just a lot of work and has not much benefit, except not using code, or of course, learning something about shader patching.
so you seem to mix two shader patching systems, GpuValue<T> is a shader patching system from the VL.Fuse library. and GPU<T> is a type from the VL.Stride ShaderFX system. they are not really compatible in that sense, as they work differently in how they build the shader.
however, they both do a very similar thing. so what you are doing is probably best done exclusively with Fuse nodes and then in the end, use a ToShaderFX node to convert the output to GPU<Vecort4>.
have a look at this discussion: You're invited to talk on Matrix which i will add to the gray book soon.
except not using code, or of course, learning something about shader patching
this
use a ToShaderFX node to convert the output to `GPU
thanks for clarifying
but what is missing in this texture to sampler to shaderfx basic patch ?
image to fuse to shaderfx .vl (16.9 KB)
kind of stuck at the fuse sampler, as mentioned here
Fuse can’t deal with a GpuValue<Spread<…>>
can i implement the kernel operations without making use of GpuValue<Spread<>> ?
in theory yes, this is not possible. but to upload a spread to the GPU you need to use a buffer. but it might be simpler to just use a buffer input directly…

