@@ -51,14 +51,15 @@ UberShader::UberShader(RenderPass* renderPass) {
5151 #define GAMMA 1
5252 #define FALSE_COLOR 2
5353 #define POS_NEG 3
54+ #define HASH 4
5455
5556 #define ERROR 0
5657 #define ABSOLUTE_ERROR 1
5758 #define SQUARED_ERROR 2
5859 #define RELATIVE_ABSOLUTE_ERROR 3
5960 #define RELATIVE_SQUARED_ERROR 4
6061
61- uniform sampler2D image;
62+ uniform highp sampler2D image;
6263 uniform bool hasImage;
6364
6465 uniform sampler2D reference;
@@ -117,6 +118,13 @@ UberShader::UberShader(RenderPass* renderPass) {
117118 }
118119 }
119120
121+ vec3 hash(vec3 co){
122+ co *= mix(vec3(1.0), vec3(1.0 / 1024.0), step(1024.0, abs(co)));
123+ co *= mix(vec3(1.0), vec3(1.0 / 1024.0), step(1024.0, abs(co)));
124+ co *= mix(vec3(1.0), vec3(1.0 / 1024.0), step(1024.0, abs(co)));
125+ return 2.0 * abs(fract(abs(fract(dot(co, vec3(115.191742, 64.0546951, 124.512291))) - 0.5) * vec3(1368.46143, 1523.2019, 1034.50476)) - 0.5);
126+ }
127+
120128 vec3 applyTonemap(vec3 col, vec4 background) {
121129 if (tonemap == SRGB) {
122130 col = col +
@@ -129,6 +137,8 @@ UberShader::UberShader(RenderPass* renderPass) {
129137 return falseColor(log2(average(col)+0.03125) / 10.0 + 0.5) + (background.rgb - falseColor(0.0)) * background.a;
130138 } else if (tonemap == POS_NEG) {
131139 return vec3(-average(min(col, vec3(0.0))) * 2.0, average(max(col, vec3(0.0))) * 2.0, 0.0) + background.rgb * background.a;
140+ } else if (tonemap == HASH) {
141+ return hash(col) + (background.rgb - hash(vec3(offset))) * background.a;
132142 }
133143 return vec3(0.0);
134144 }
@@ -230,6 +240,7 @@ UberShader::UberShader(RenderPass* renderPass) {
230240 #define GAMMA 1
231241 #define FALSE_COLOR 2
232242 #define POS_NEG 3
243+ #define HASH 4
233244
234245 #define ERROR 0
235246 #define ABSOLUTE_ERROR 1
@@ -272,6 +283,13 @@ UberShader::UberShader(RenderPass* renderPass) {
272283 }
273284 }
274285
286+ float3 hash(float3 co){
287+ co *= mix(float3(1.0f), float3(1.0f / 1024.0f), step(1024.0f, abs(co)));
288+ co *= mix(float3(1.0f), float3(1.0f / 1024.0f), step(1024.0f, abs(co)));
289+ co *= mix(float3(1.0f), float3(1.0f / 1024.0f), step(1024.0f, abs(co)));
290+ return 2.0f * abs(fract(abs(fract(dot(co.xyz, float3(115.191742f, 64.0546951f, 124.512291f))) - 0.5f) * float3(1368.46143f, 1523.2019f, 1034.50476f)) - 0.5f);
291+ }
292+
275293 float3 applyTonemap(float3 col, float4 background, int tonemap, float offset, float gamma, texture2d<float, access::sample> colormap, sampler colormapSampler) {
276294 switch (tonemap) {
277295 case SRGB:
@@ -286,6 +304,8 @@ UberShader::UberShader(RenderPass* renderPass) {
286304 return falseColor(log2(average(col)+0.03125f) / 10.0f + 0.5f, colormap, colormapSampler) + (background.rgb - falseColor(0.0f, colormap, colormapSampler)) * background.a;
287305 case POS_NEG:
288306 return float3(-average(min(col, float3(0.0f))) * 2.0f, average(max(col, float3(0.0f))) * 2.0f, 0.0f) + background.rgb * background.a;
307+ case HASH:
308+ return hash(col) + (background.rgb - hash(float3(offset))) * background.a;
289309 }
290310 return float3(0.0f);
291311 }
0 commit comments