1
// expected #define: int gridX, gridY
2
highp float encodingFactor = (exp2(24.0) - 1.0) / exp2(24.0);
3
const vec2 gridSize = vec2(gridX, gridY);
5
uniform sampler2D modelHeight;
6
//we will scale the result by that value, it helps for chaining renderers
9
highp float DecodeFloatRGB(vec3 rgb) {
10
return dot(rgb, vec3(1.0, 1.0 / 255.0, 1.0 / 255.0 / 255.0)) / encodingFactor;
13
highp vec3 EncodeFloatRGB(highp float v) {
14
highp vec3 enc = fract(vec3(1.0, 255.0, 255.0 * 255.0) * encodingFactor * v);
15
enc -= enc.yzz * vec3(1.0 / 255.0, 1.0 / 255.0, 0.0);
19
vec3 FakeEncodeFloatRGB(highp float v) {
20
return vec3(v, 0.0, 0.0);
23
highp float FakeDecodeFloatRGB(vec3 rgb) {
27
float readValue(int dx,int dy) {
28
return FakeDecodeFloatRGB(texture2D(modelHeight, vec2(float(dx), float(dy)) / gridSize).rgb);
32
float maxValue = readValue(0, 0);
33
for(int i = 0; i < gridX; i++)
34
for(int j = 0; j < gridY; j++)
35
maxValue = max(maxValue, readValue(i, j));
36
gl_FragColor = vec4(FakeEncodeFloatRGB(maxValue * scale), 1.0);