X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=builtin_data%2F_ambientocclusion.glsl;h=ecdaed7a46256e1101cc5b332d8ad2001f6b499c;hb=HEAD;hp=81aac182acb4683412d429d7d33b58938bdd1722;hpb=e6bb00e2d6b817b81a555b6cbebe3ba4ec28cf80;p=libs%2Fgl.git diff --git a/builtin_data/_ambientocclusion.glsl b/builtin_data/_ambientocclusion.glsl index 81aac182..0fca6bb2 100644 --- a/builtin_data/_ambientocclusion.glsl +++ b/builtin_data/_ambientocclusion.glsl @@ -1,6 +1,6 @@ -const int max_samples = 32; +const int max_samples = 128; -uniform CameraTransform +layout(set=0) uniform CameraTransform { mat4 eye_world_matrix; mat4 world_eye_matrix; @@ -8,11 +8,11 @@ uniform CameraTransform mat4 eye_clip_matrix; }; -uniform sampler2D source; -uniform sampler2D depth; -uniform sampler2D occlusion; -uniform sampler2D rotate; -uniform AmbientOcclusionParams +layout(set=2) uniform sampler2D source; +layout(set=2) uniform sampler2D depth; +layout(set=2) uniform sampler2D occlusion; +layout(set=2) uniform sampler2D rotate; +layout(set=2) uniform AmbientOcclusionParams { float darkness; vec3 sample_points[max_samples]; @@ -35,3 +35,15 @@ vec3 unproject(vec3 position) vec4 upp = eye_clip_matrix*vec4(position, 1.0); return upp.xyz/upp.w; } + +vec3 get_fragment_position(vec2 tc) +{ + return unproject(vec3(tc*2.0-1.0, texture(depth, tc).r)); +} + +vec3 get_slope(vec3 a, vec3 x, vec3 b) +{ + float dz1 = abs(x.z-a.z); + float dz2 = abs(b.z-x.z); + return (dz1>2.0*dz2 ? b-x : dz2>2.0*dz1 ? x-a : b-a); +}