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

size assignment related fixes

parent af769160
No related branches found
No related tags found
No related merge requests found
......@@ -75,6 +75,7 @@ export function createTextureColor(colors: TextureImage<Uint8Array>, type: Color
export function createInstanceColor(locationIt: LocationIterator, color: LocationColor, colorData?: ColorData): ColorData {
const { instanceCount } = locationIt
const colors = colorData && colorData.tColor.ref.value.array.length >= instanceCount * 3 ? colorData.tColor.ref.value : createTextureImage(instanceCount, 3)
locationIt.reset()
while (locationIt.hasNext) {
const { location, isSecondary, instanceIndex } = locationIt.move()
Color.toArray(color(location, isSecondary), colors.array, instanceIndex * 3)
......@@ -87,6 +88,7 @@ export function createInstanceColor(locationIt: LocationIterator, color: Locatio
export function createGroupColor(locationIt: LocationIterator, color: LocationColor, colorData?: ColorData): ColorData {
const { groupCount } = locationIt
const colors = colorData && colorData.tColor.ref.value.array.length >= groupCount * 3 ? colorData.tColor.ref.value : createTextureImage(groupCount, 3)
locationIt.reset()
while (locationIt.hasNext && !locationIt.isNextNewInstance) {
const { location, isSecondary, groupIndex } = locationIt.move()
Color.toArray(color(location, isSecondary), colors.array, groupIndex * 3)
......@@ -99,6 +101,7 @@ export function createGroupInstanceColor(locationIt: LocationIterator, color: Lo
const { groupCount, instanceCount } = locationIt
const count = instanceCount * groupCount
const colors = colorData && colorData.tColor.ref.value.array.length >= count * 3 ? colorData.tColor.ref.value : createTextureImage(count, 3)
locationIt.reset()
while (locationIt.hasNext) {
const { location, isSecondary, index } = locationIt.move()
Color.toArray(color(location, isSecondary), colors.array, index * 3)
......
......@@ -11,6 +11,7 @@ import { LocationIterator } from '../util/location-iterator';
import { Location, NullLocation } from 'mol-model/location';
import { SizeTheme } from 'mol-theme/size';
import { getGranularity } from './geometry';
import { encodeFloatLog } from 'mol-util/float-packing';
export type SizeType = 'uniform' | 'instance' | 'group' | 'groupInstance'
......@@ -83,9 +84,10 @@ export function createTextureSize(sizes: TextureImage<Uint8Array>, type: SizeTyp
export function createInstanceSize(locationIt: LocationIterator, sizeFn: LocationSize, sizeData?: SizeData): SizeData {
const { instanceCount} = locationIt
const sizes = sizeData && sizeData.tSize.ref.value.array.length >= instanceCount ? sizeData.tSize.ref.value : createTextureImage(instanceCount, 1)
locationIt.reset()
while (locationIt.hasNext && !locationIt.isNextNewInstance) {
const v = locationIt.move()
sizes.array[v.instanceIndex] = sizeFn(v.location)
sizes.array[v.instanceIndex] = encodeFloatLog(sizeFn(v.location)) * 255
locationIt.skipInstance()
}
return createTextureSize(sizes, 'instance', sizeData)
......@@ -95,9 +97,10 @@ export function createInstanceSize(locationIt: LocationIterator, sizeFn: Locatio
export function createGroupSize(locationIt: LocationIterator, sizeFn: LocationSize, sizeData?: SizeData): SizeData {
const { groupCount } = locationIt
const sizes = sizeData && sizeData.tSize.ref.value.array.length >= groupCount ? sizeData.tSize.ref.value : createTextureImage(groupCount, 1)
locationIt.reset()
while (locationIt.hasNext && !locationIt.isNextNewInstance) {
const v = locationIt.move()
sizes.array[v.groupIndex] = sizeFn(v.location)
sizes.array[v.groupIndex] = encodeFloatLog(sizeFn(v.location)) * 255
}
return createTextureSize(sizes, 'group', sizeData)
}
......@@ -107,9 +110,10 @@ export function createGroupInstanceSize(locationIt: LocationIterator, sizeFn: Lo
const { groupCount, instanceCount } = locationIt
const count = instanceCount * groupCount
const sizes = sizeData && sizeData.tSize.ref.value.array.length >= count ? sizeData.tSize.ref.value : createTextureImage(count, 1)
locationIt.reset()
while (locationIt.hasNext && !locationIt.isNextNewInstance) {
const v = locationIt.move()
sizes.array[v.index] = sizeFn(v.location)
sizes.array[v.index] = encodeFloatLog(sizeFn(v.location)) * 255
}
return createTextureSize(sizes, 'groupInstance', sizeData)
}
\ No newline at end of file
......@@ -3,9 +3,13 @@
#elif defined(dSizeType_attribute)
float size = aSize;
#elif defined(dSizeType_instance)
float size = readFromTexture(tSize, aInstance, uSizeTexDim).r;
float size = readFromTexture(tSize, aInstance, uSizeTexDim).a;
#elif defined(dSizeType_group)
float size = readFromTexture(tSize, aGroup, uSizeTexDim).r;
float size = readFromTexture(tSize, aGroup, uSizeTexDim).a;
#elif defined(dSizeType_groupInstance)
float size = readFromTexture(tSize, aInstance * float(uGroupCount) + aGroup, uSizeTexDim).r;
float size = readFromTexture(tSize, aInstance * float(uGroupCount) + aGroup, uSizeTexDim).a;
#endif
#if defined(dSizeType_instance) || defined(dSizeType_group) || defined(dSizeType_groupInstance)
size = decodeFloatLog(size);
#endif
\ No newline at end of file
......@@ -5,4 +5,5 @@
#elif defined(dSizeType_instance) || defined(dSizeType_group) || defined(dSizeType_groupInstance)
uniform vec2 uSizeTexDim;
uniform sampler2D tSize;
#pragma glslify: decodeFloatLog = require(../utils/decode-float-log.glsl)
#endif
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment