More clean up
This commit is contained in:
parent
c94ffcc506
commit
f03da42b5e
43 changed files with 827 additions and 1085 deletions
|
|
@ -20,6 +20,7 @@ const TILE_TEXEL_COUNT = TILE_SIZE_X * TILE_SIZE_Y;
|
|||
@group(0) @binding(2) var trailMapOut: texture_storage_2d<rgba16float, write>;
|
||||
|
||||
var<workgroup> tile: array<vec4<f32>, 324>;
|
||||
var<workgroup> tileTrailStrength: array<f32, 324>;
|
||||
|
||||
@compute @workgroup_size(16, 16)
|
||||
fn main(
|
||||
|
|
@ -28,31 +29,32 @@ fn main(
|
|||
@builtin(workgroup_id) workgroup_id: vec3<u32>
|
||||
) {
|
||||
let textureSize = vec2<i32>(textureDimensions(trailMap, 0));
|
||||
let textureSizeU32 = vec2<u32>(textureSize);
|
||||
let localLinearIndex = local_id.y * WORKGROUP_SIZE_X + local_id.x;
|
||||
var tileIndex = localLinearIndex;
|
||||
|
||||
loop {
|
||||
if tileIndex >= TILE_TEXEL_COUNT {
|
||||
break;
|
||||
}
|
||||
let workgroupOrigin = workgroup_id.xy * vec2<u32>(WORKGROUP_SIZE_X, WORKGROUP_SIZE_Y);
|
||||
let isInteriorTile =
|
||||
workgroupOrigin.x > 0u &&
|
||||
workgroupOrigin.y > 0u &&
|
||||
workgroupOrigin.x + WORKGROUP_SIZE_X < textureSizeU32.x &&
|
||||
workgroupOrigin.y + WORKGROUP_SIZE_Y < textureSizeU32.y;
|
||||
|
||||
for (var tileIndex = localLinearIndex; tileIndex < TILE_TEXEL_COUNT; tileIndex += WORKGROUP_SIZE_X * WORKGROUP_SIZE_Y) {
|
||||
let tilePosition = vec2<u32>(tileIndex % TILE_SIZE_X, tileIndex / TILE_SIZE_X);
|
||||
let sourcePixelU32 =
|
||||
workgroup_id.xy * vec2<u32>(WORKGROUP_SIZE_X, WORKGROUP_SIZE_Y) +
|
||||
tilePosition;
|
||||
let sourcePixel = clamp(
|
||||
vec2<i32>(i32(sourcePixelU32.x), i32(sourcePixelU32.y)) - vec2<i32>(1, 1),
|
||||
vec2<i32>(0, 0),
|
||||
textureSize - vec2<i32>(1, 1)
|
||||
);
|
||||
tile[tileIndex] = textureLoad(trailMap, sourcePixel, 0);
|
||||
tileIndex += WORKGROUP_SIZE_X * WORKGROUP_SIZE_Y;
|
||||
let unclampedSourcePixel = vec2<i32>(workgroupOrigin + tilePosition) - vec2<i32>(1, 1);
|
||||
var sourcePixel = unclampedSourcePixel;
|
||||
if !isInteriorTile {
|
||||
sourcePixel = clamp(unclampedSourcePixel, vec2<i32>(0, 0), textureSize - vec2<i32>(1, 1));
|
||||
}
|
||||
let texel = textureLoad(trailMap, sourcePixel, 0);
|
||||
tile[tileIndex] = texel;
|
||||
tileTrailStrength[tileIndex] = length(texel.rgb);
|
||||
}
|
||||
|
||||
workgroupBarrier();
|
||||
|
||||
let pixel = vec2<i32>(i32(global_id.x), i32(global_id.y));
|
||||
if pixel.x >= textureSize.x || pixel.y >= textureSize.y {
|
||||
let inBounds = pixel.x < textureSize.x && pixel.y < textureSize.y;
|
||||
if !inBounds {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -110,11 +112,12 @@ fn propagate(
|
|||
brushWeight: f32
|
||||
) -> vec4<f32> {
|
||||
let neighbourIndex = i32(centerTileIndex) + offsetY * i32(TILE_SIZE_X) + offsetX;
|
||||
let neighbour = tile[u32(neighbourIndex)];
|
||||
let neighbourTileIndex = u32(neighbourIndex);
|
||||
let neighbour = tile[neighbourTileIndex];
|
||||
let difference = clamp(neighbour - currentColor, vec4(0), vec4(1));
|
||||
|
||||
return vec4(
|
||||
vec3(length(neighbour.rgb) * trailWeight),
|
||||
vec3(tileTrailStrength[neighbourTileIndex] * trailWeight),
|
||||
neighbour.a * brushWeight
|
||||
) * difference;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue