Skip to content
Snippets Groups Projects
Commit a0fef0c2 authored by Alexander Rose's avatar Alexander Rose
Browse files

rename en/decodeFloatRGB

- since they only work for positive integers
- encodeFloatRGB -> packIntToRGB
- decodeFloatRGB -> unpackRGBToInt
parent 605432dd
No related branches found
No related tags found
No related merge requests found
Showing
with 47 additions and 47 deletions
......@@ -25,7 +25,7 @@ import { sizeDataFactor } from '../../mol-geo/geometry/size-data';
import { Vec3 } from '../../mol-math/linear-algebra';
import { RuntimeContext } from '../../mol-task';
import { Color } from '../../mol-util/color/color';
import { decodeFloatRGB } from '../../mol-util/float-packing';
import { unpackRGBToInt } from '../../mol-util/float-packing';
import { RenderObjectExporter, RenderObjectExportData } from './render-object-exporter';
import { readAlphaTexture, readTexture } from '../../mol-gl/compute/util';
......@@ -65,7 +65,7 @@ export abstract class MeshExporter<D extends RenderObjectExportData> implements
const r = tSize.array[i * 3];
const g = tSize.array[i * 3 + 1];
const b = tSize.array[i * 3 + 2];
return decodeFloatRGB(r, g, b) / sizeDataFactor;
return unpackRGBToInt(r, g, b) / sizeDataFactor;
}
private static getSize(values: BaseValues & SizeValues, instanceIndex: number, group: number): number {
......@@ -95,9 +95,9 @@ export abstract class MeshExporter<D extends RenderObjectExportData> implements
const g = groups[i4 + 1];
const b = groups[i4 + 2];
if (groups instanceof Float32Array) {
return decodeFloatRGB(r * 255 + 0.5, g * 255 + 0.5, b * 255 + 0.5);
return unpackRGBToInt(r * 255 + 0.5, g * 255 + 0.5, b * 255 + 0.5);
}
return decodeFloatRGB(r, g, b);
return unpackRGBToInt(r, g, b);
}
protected static getInterpolatedColors(webgl: WebGLContext, input: { vertices: Float32Array, vertexCount: number, values: BaseValues, stride: 3 | 4, colorType: 'volume' | 'volumeInstance' }) {
......
......@@ -12,7 +12,7 @@ import { GraphicsRenderVariant } from '../../mol-gl/webgl/render-item';
import { RenderTarget } from '../../mol-gl/webgl/render-target';
import { Vec3 } from '../../mol-math/linear-algebra';
import { spiral2d } from '../../mol-math/misc';
import { decodeFloatRGB, unpackRGBAToDepth } from '../../mol-util/float-packing';
import { unpackRGBToInt, unpackRGBAToDepth } from '../../mol-util/float-packing';
import { Camera, ICamera } from '../camera';
import { StereoCamera } from '../camera/stereo';
import { cameraUnproject } from '../camera/util';
......@@ -174,7 +174,7 @@ export class PickHelper {
private getId(x: number, y: number, buffer: Uint8Array) {
const idx = this.getBufferIdx(x, y);
return decodeFloatRGB(buffer[idx], buffer[idx + 1], buffer[idx + 2]);
return unpackRGBToInt(buffer[idx], buffer[idx + 1], buffer[idx + 2]);
}
private render(camera: Camera | StereoCamera) {
......
......@@ -11,7 +11,7 @@ import { LocationIterator } from '../util/location-iterator';
import { Location, NullLocation } from '../../mol-model/location';
import { SizeTheme } from '../../mol-theme/size';
import { Geometry } from './geometry';
import { decodeFloatRGB, encodeFloatRGBtoArray } from '../../mol-util/float-packing';
import { unpackRGBToInt, packIntToRGBArray } from '../../mol-util/float-packing';
export type SizeType = 'uniform' | 'instance' | 'group' | 'groupInstance'
......@@ -44,7 +44,7 @@ export function getMaxSize(sizeData: SizeData): number {
let maxSize = 0;
const array = sizeData.tSize.ref.value.array;
for (let i = 0, il = array.length; i < il; i += 3) {
const value = decodeFloatRGB(array[i], array[i + 1], array[i + 2]);
const value = unpackRGBToInt(array[i], array[i + 1], array[i + 2]);
if (maxSize < value) maxSize = value;
}
return maxSize / sizeDataFactor;
......@@ -103,7 +103,7 @@ export function createInstanceSize(locationIt: LocationIterator, sizeFn: Locatio
locationIt.reset();
while (locationIt.hasNext && !locationIt.isNextNewInstance) {
const v = locationIt.move();
encodeFloatRGBtoArray(sizeFn(v.location) * sizeDataFactor, sizes.array, v.instanceIndex * 3);
packIntToRGBArray(sizeFn(v.location) * sizeDataFactor, sizes.array, v.instanceIndex * 3);
locationIt.skipInstance();
}
return createTextureSize(sizes, 'instance', sizeData);
......@@ -116,7 +116,7 @@ export function createGroupSize(locationIt: LocationIterator, sizeFn: LocationSi
locationIt.reset();
while (locationIt.hasNext && !locationIt.isNextNewInstance) {
const v = locationIt.move();
encodeFloatRGBtoArray(sizeFn(v.location) * sizeDataFactor, sizes.array, v.groupIndex * 3);
packIntToRGBArray(sizeFn(v.location) * sizeDataFactor, sizes.array, v.groupIndex * 3);
}
return createTextureSize(sizes, 'group', sizeData);
}
......@@ -129,7 +129,7 @@ export function createGroupInstanceSize(locationIt: LocationIterator, sizeFn: Lo
locationIt.reset();
while (locationIt.hasNext) {
const v = locationIt.move();
encodeFloatRGBtoArray(sizeFn(v.location) * sizeDataFactor, sizes.array, v.index * 3);
packIntToRGBArray(sizeFn(v.location) * sizeDataFactor, sizes.array, v.index * 3);
}
return createTextureSize(sizes, 'groupInstance', sizeData);
}
\ No newline at end of file
......@@ -11,7 +11,7 @@ import { Values, TextureSpec } from '../../renderable/schema';
import { Texture } from '../../../mol-gl/webgl/texture';
import { ShaderCode } from '../../../mol-gl/shader-code';
import { ValueCell } from '../../../mol-util';
import { decodeFloatRGB } from '../../../mol-util/float-packing';
import { unpackRGBToInt } from '../../../mol-util/float-packing';
import { QuadSchema, QuadValues } from '../util';
import { quad_vert } from '../../../mol-gl/shader/quad.vert';
import { sum_frag } from '../../../mol-gl/shader/histogram-pyramid/sum.frag';
......@@ -96,5 +96,5 @@ export function getHistopyramidSum(ctx: WebGLContext, pyramidTopTexture: Texture
return isWebGL2(gl)
? sumInts[0]
: decodeFloatRGB(sumBytes[0], sumBytes[1], sumBytes[2]);
: unpackRGBToInt(sumBytes[0], sumBytes[1], sumBytes[2]);
}
\ No newline at end of file
......@@ -57,11 +57,11 @@ export const assign_color_varying = `
#endif
#elif defined(dRenderVariant_pick)
if (uPickType == 1) {
vColor = vec4(encodeFloatRGB(float(uObjectId)), 1.0);
vColor = vec4(packIntToRGB(float(uObjectId)), 1.0);
} else if (uPickType == 2) {
vColor = vec4(encodeFloatRGB(aInstance), 1.0);
vColor = vec4(packIntToRGB(aInstance), 1.0);
} else {
vColor = vec4(encodeFloatRGB(group), 1.0);
vColor = vec4(packIntToRGB(group), 1.0);
}
#endif
......
export const assign_group = `
#ifdef dGeometryType_textureMesh
float group = decodeFloatRGB(readFromTexture(tGroup, VertexID, uGeoTexDim).rgb);
float group = unpackRGBToInt(readFromTexture(tGroup, VertexID, uGeoTexDim).rgb);
#else
float group = aGroup;
#endif
......
......@@ -4,11 +4,11 @@ export const assign_size = `
#elif defined(dSizeType_attribute)
float size = aSize;
#elif defined(dSizeType_instance)
float size = decodeFloatRGB(readFromTexture(tSize, aInstance, uSizeTexDim).rgb);
float size = unpackRGBToInt(readFromTexture(tSize, aInstance, uSizeTexDim).rgb);
#elif defined(dSizeType_group)
float size = decodeFloatRGB(readFromTexture(tSize, group, uSizeTexDim).rgb);
float size = unpackRGBToInt(readFromTexture(tSize, group, uSizeTexDim).rgb);
#elif defined(dSizeType_groupInstance)
float size = decodeFloatRGB(readFromTexture(tSize, aInstance * float(uGroupCount) + group, uSizeTexDim).rgb);
float size = unpackRGBToInt(readFromTexture(tSize, aInstance * float(uGroupCount) + group, uSizeTexDim).rgb);
#endif
#if defined(dSizeType_instance) || defined(dSizeType_group) || defined(dSizeType_groupInstance)
......
......@@ -37,7 +37,7 @@ const float floatLogFactor = 9.210440366976517; // log(maxFloat + 1.0);
float encodeFloatLog(const in float value) { return log(value + 1.0) / floatLogFactor; }
float decodeFloatLog(const in float value) { return exp(value * floatLogFactor) - 1.0; }
vec3 encodeFloatRGB(in float value) {
vec3 packIntToRGB(in float value) {
value = clamp(round(value), 0.0, 16777216.0 - 1.0) + 1.0;
vec3 c = vec3(0.0);
c.b = mod(value, 256.0);
......@@ -47,7 +47,7 @@ vec3 encodeFloatRGB(in float value) {
c.r = mod(value, 256.0);
return c / 255.0;
}
float decodeFloatRGB(const in vec3 rgb) {
float unpackRGBToInt(const in vec3 rgb) {
return (floor(rgb.r * 255.0 + 0.5) * 256.0 * 256.0 + floor(rgb.g * 255.0 + 0.5) * 256.0 + floor(rgb.b * 255.0 + 0.5)) - 1.0;
}
......
......@@ -35,7 +35,7 @@ uniform float uResolution;
void main() {
vec3 position = readFromTexture(tPosition, SampleID, uGeoTexDim).xyz;
float group = decodeFloatRGB(readFromTexture(tGroup, SampleID, uGeoTexDim).rgb);
float group = unpackRGBToInt(readFromTexture(tGroup, SampleID, uGeoTexDim).rgb);
position = (aTransform * vec4(position, 1.0)).xyz;
gl_PointSize = 7.0;
......
......@@ -251,7 +251,7 @@ vec4 raymarch(vec3 startLoc, vec3 step, vec3 rayDir) {
material.a = transferFunction(value);
#ifdef dPackedGroup
float group = decodeFloatRGB(textureGroup(floor(unitPos * uGridDim + 0.5) / uGridDim).rgb);
float group = unpackRGBToInt(textureGroup(floor(unitPos * uGridDim + 0.5) / uGridDim).rgb);
#else
vec3 g = floor(unitPos * uGridDim + 0.5);
// note that we swap x and z because the texture is flipped around y
......
......@@ -51,7 +51,7 @@ void main() {
#endif
if (dist * uRadiusFactorInv > minDistance + uResolution * 0.05)
discard;
gl_FragColor.rgb = encodeFloatRGB(vGroup);
gl_FragColor.rgb = packIntToRGB(vGroup);
#endif
}
`;
\ No newline at end of file
......@@ -33,12 +33,12 @@ void main(void) {
c = texture2D(tInputLevel, position + vec2(0.0, k)).r * 255.0;
d = texture2D(tInputLevel, position + vec2(k, k)).r * 255.0;
} else {
a = decodeFloatRGB(texture2D(tPreviousLevel, position).rgb);
b = decodeFloatRGB(texture2D(tPreviousLevel, position + vec2(k, 0.0)).rgb);
c = decodeFloatRGB(texture2D(tPreviousLevel, position + vec2(0.0, k)).rgb);
d = decodeFloatRGB(texture2D(tPreviousLevel, position + vec2(k, k)).rgb);
a = unpackRGBToInt(texture2D(tPreviousLevel, position).rgb);
b = unpackRGBToInt(texture2D(tPreviousLevel, position + vec2(k, 0.0)).rgb);
c = unpackRGBToInt(texture2D(tPreviousLevel, position + vec2(0.0, k)).rgb);
d = unpackRGBToInt(texture2D(tPreviousLevel, position + vec2(k, k)).rgb);
}
gl_FragColor = vec4(encodeFloatRGB(a + b + c + d), 1.0);
gl_FragColor = vec4(packIntToRGB(a + b + c + d), 1.0);
#else
int a, b, c, d;
......
......@@ -105,9 +105,9 @@ void main() {
if (imageData.a < 0.3)
discard;
if (uPickType == 1) {
gl_FragColor = vec4(encodeFloatRGB(float(uObjectId)), 1.0);
gl_FragColor = vec4(packIntToRGB(float(uObjectId)), 1.0);
} else if (uPickType == 2) {
gl_FragColor = vec4(encodeFloatRGB(vInstance), 1.0);
gl_FragColor = vec4(packIntToRGB(vInstance), 1.0);
} else {
gl_FragColor = vec4(texture2D(tGroupTex, vUv).rgb, 1.0);
}
......@@ -118,7 +118,7 @@ void main() {
#elif defined(dRenderVariant_marking)
float marker = uMarker;
if (uMarker == -1.0) {
float group = decodeFloatRGB(texture2D(tGroupTex, vUv).rgb);
float group = unpackRGBToInt(texture2D(tGroupTex, vUv).rgb);
marker = readFromTexture(tMarker, vInstance * float(uGroupCount) + group, uMarkerTexDim).a;
marker = floor(marker * 255.0 + 0.5); // rounding required to work on some cards on win
}
......@@ -144,7 +144,7 @@ void main() {
float marker = uMarker;
if (uMarker == -1.0) {
float group = decodeFloatRGB(texture2D(tGroupTex, vUv).rgb);
float group = unpackRGBToInt(texture2D(tGroupTex, vUv).rgb);
marker = readFromTexture(tMarker, vInstance * float(uGroupCount) + group, uMarkerTexDim).a;
marker = floor(marker * 255.0 + 0.5); // rounding required to work on some cards on win
}
......
......@@ -74,7 +74,7 @@ int idot4(const in ivec4 a, const in ivec4 b) {
#if __VERSION__ == 100
int pyramidVoxel(vec2 pos) {
return int(decodeFloatRGB(texture2D(tActiveVoxelsPyramid, pos / (vec2(1.0, 0.5) * uSize)).rgb));
return int(unpackRGBToInt(texture2D(tActiveVoxelsPyramid, pos / (vec2(1.0, 0.5) * uSize)).rgb));
}
#else
int pyramidVoxel(vec2 pos) {
......@@ -257,7 +257,7 @@ void main(void) {
#else
vec3 gridDim = uGridDim - vec3(1.0, 1.0, 0.0); // remove xy padding
float group = coord3d.z + coord3d.y * gridDim.z + coord3d.x * gridDim.z * gridDim.y;
gl_FragData[1] = vec4(group > 16777215.5 ? vec3(1.0) : encodeFloatRGB(group), 1.0);
gl_FragData[1] = vec4(group > 16777215.5 ? vec3(1.0) : packIntToRGB(group), 1.0);
#endif
#else
#ifdef dPackedGroup
......@@ -266,7 +266,7 @@ void main(void) {
vec3 b = t < 0.5 ? b0 : b1;
vec3 gridDim = uGridDim - vec3(1.0, 1.0, 0.0); // remove xy padding
float group = b.z + b.y * gridDim.z + b.x * gridDim.z * gridDim.y;
gl_FragData[1] = vec4(group > 16777215.5 ? vec3(1.0) : encodeFloatRGB(group), 1.0);
gl_FragData[1] = vec4(group > 16777215.5 ? vec3(1.0) : packIntToRGB(group), 1.0);
#endif
#endif
......
......@@ -14,7 +14,7 @@ import { ValueCell } from '../../../mol-util';
import { createComputeRenderable, ComputeRenderable } from '../../../mol-gl/renderable';
import { WebGLContext } from '../../../mol-gl/webgl/context';
import { Texture, TextureFilter, TextureFormat, TextureKind, TextureType } from '../../../mol-gl/webgl/texture';
import { decodeFloatRGB } from '../../../mol-util/float-packing';
import { unpackRGBToInt } from '../../../mol-util/float-packing';
import { ShaderCode } from '../../../mol-gl/shader-code';
import { createComputeRenderItem } from '../../../mol-gl/webgl/render-item';
import { ValueSpec, AttributeSpec, UniformSpec, TextureSpec, DefineSpec, Values } from '../../../mol-gl/renderable/schema';
......@@ -462,7 +462,7 @@ function fieldFromTexture2d(ctx: WebGLContext, texture: Texture, dim: Vec3, texD
for (let ix = 0; ix < dx; ++ix) {
const idx = 4 * (tmpCol * dx + (iy + tmpRow) * width + ix);
data[j] = image[idx + 3] / 255;
idData[j] = decodeFloatRGB(image[idx], image[idx + 1], image[idx + 2]);
idData[j] = unpackRGBToInt(image[idx], image[idx + 1], image[idx + 2]);
j++;
}
}
......
......@@ -21,7 +21,7 @@ import { transformPositionArray } from '../../mol-geo/util';
import { RenderableState } from '../../mol-gl/renderable';
import { Color } from '../../mol-util/color';
import { ColorTheme } from '../../mol-theme/color';
import { encodeFloatRGBtoArray } from '../../mol-util/float-packing';
import { packIntToRGBArray } from '../../mol-util/float-packing';
import { eachVolumeLoci } from './util';
export async function createImage(ctx: VisualContext, volume: Volume, theme: Theme, props: PD.Values<SliceParams>, image?: Image) {
......@@ -116,7 +116,7 @@ function getPackedGroupArray(grid: Grid, props: PD.Values<SliceParams>) {
for (let iy = y0; iy < ny; ++iy) {
for (let ix = x0; ix < nx; ++ix) {
for (let iz = z0; iz < nz; ++iz) {
encodeFloatRGBtoArray(space.dataOffset(ix, iy, iz), groupArray, j);
packIntToRGBArray(space.dataOffset(ix, iy, iz), groupArray, j);
j += 4;
}
}
......
......@@ -9,7 +9,7 @@ import { Loci } from '../../mol-model/loci';
import { Interval, OrderedSet } from '../../mol-data/int';
import { equalEps } from '../../mol-math/linear-algebra/3d/common';
import { Vec3 } from '../../mol-math/linear-algebra/3d/vec3';
import { encodeFloatRGBtoArray } from '../../mol-util/float-packing';
import { packIntToRGBArray } from '../../mol-util/float-packing';
// avoiding namespace lookup improved performance in Chrome (Aug 2020)
const v3set = Vec3.set;
......@@ -110,7 +110,7 @@ export function createVolumeTexture2d(volume: Volume, variant: 'normals' | 'grou
array[index] = Math.round(((data[offset] - min) / diff) * 255);
} else {
if (variant === 'groups') {
encodeFloatRGBtoArray(offset, array, index);
packIntToRGBArray(offset, array, index);
} else {
v3set(n0,
data[o(Math.max(0, x - 1), y, z)],
......
......@@ -18,8 +18,8 @@ export function encodeFloatLog(value: number) { return fasterLog(value + 1) / fl
/** decode logarithmically encoded float */
export function decodeFloatLog(value: number) { return fasterExp(value * floatLogFactor) - 1; }
/** encode float as rgb triplet into array at offset */
export function encodeFloatRGBtoArray(value: number, array: NumberArray, offset: number) {
/** encode positive integer as rgb byte triplet into array at offset */
export function packIntToRGBArray(value: number, array: NumberArray, offset: number) {
value = clamp(Math.round(value), 0, 16777216 - 1) + 1;
array[offset + 2] = value % 256;
value = Math.floor(value / 256);
......@@ -29,8 +29,8 @@ export function encodeFloatRGBtoArray(value: number, array: NumberArray, offset:
return array;
}
/** decode float encoded as rgb triplet */
export function decodeFloatRGB(r: number, g: number, b: number) {
/** decode positive integer encoded as rgb byte triplet */
export function unpackRGBToInt(r: number, g: number, b: number) {
return (Math.floor(r) * 256 * 256 + Math.floor(g) * 256 + Math.floor(b)) - 1;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment