Skip to content

Commit 9429679

Browse files
committed
Fix mesh face/element colors
1 parent b78e152 commit 9429679

2 files changed

Lines changed: 13 additions & 7 deletions

File tree

ngsolve_webgpu/mesh.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -590,12 +590,18 @@ def __init__(
590590
self, data: MeshData, clipping=None, colors: list | None = None, label="MeshElements2d"
591591
):
592592
super().__init__(data, label=label, clipping=clipping)
593+
594+
def get_color(fd):
595+
color = [int(ci*255) for ci in fd.color]
596+
if len(color) == 3:
597+
color = color + [255]
598+
return color
593599
if colors is None:
594600
mesh = data.mesh
595-
colors = [[int(ci * 255) for ci in fd.color] for fd in mesh.FaceDescriptors()]
596-
self.gpu_objects.colormap = Colormap(colormap=colors, minval=-0.5, maxval=len(colors) - 0.5)
601+
colors = [get_color(fd) for fd in mesh.FaceDescriptors()]
602+
self.gpu_objects.colormap = Colormap(colormap=colors, minval=0, maxval=len(colors)-1)
597603
self.gpu_objects.colormap.discrete = 0
598-
self.gpu_objects.colormap.n_colors = 4 * len(colors)
604+
self.gpu_objects.colormap.n_colors = len(colors)
599605

600606
@property
601607
def colormap(self):
@@ -731,8 +737,8 @@ def __init__(self, data: MeshData, clipping=None, colors: list | None = None, sy
731737
if colors is None:
732738
colors = [[255, 0, 0, 255] for _ in range(len(data.ngs_mesh.GetMaterials()))]
733739
self.gpu_objects.colormap = Colormap(colormap=colors, minval=-0.5, maxval=len(colors) - 0.5)
734-
self.gpu_objects.colormap.discrete = 0
735-
self.gpu_objects.colormap.n_colors = 4 * len(colors)
740+
self.gpu_objects.colormap.discrete = 1
741+
self.gpu_objects.colormap.n_colors = len(colors)
736742
self.symmetry = symmetry
737743

738744
@property

ngsolve_webgpu/shaders/mesh/render.wgsl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ fn fragmentMesh(input: MeshFragmentInput) -> @location(0) vec4<f32> {
265265
@fragment
266266
fn fragment2dElement(input: VertexOutput2d) -> @location(0) vec4<f32> {
267267
checkClipping(input.p);
268-
let color = getColor(f32(input.index));
268+
let color = getColor(f32(input.index) + 0.5);
269269
if(color.a < 0.01) {
270270
discard;
271271
}
@@ -277,7 +277,7 @@ fn fragment2dElement(input: VertexOutput2d) -> @location(0) vec4<f32> {
277277
input: VertexOutput2d
278278
) -> @location(0) vec4<u32> {
279279
checkClipping(input.p);
280-
let color = getColor(f32(input.index));
280+
let color = getColor(f32(input.index) + 0.5);
281281
if(color.a < 0.01) {
282282
discard;
283283
}

0 commit comments

Comments
 (0)