# HG changeset patch # User Markus Mützel # Date 1710002364 -3600 # Sat Mar 09 17:39:24 2024 +0100 # Branch stable # Node ID 649ed9dab999db47d4308d6061ec9fcd91017967 # Parent c7237277d4bfb484e9c3930d2037bad92e9b59a7 Keep per-vertex "cdata" consistent with "facevertexcdata" in patch object (bug #65431). * libinterp/corefcn/graphics.cc (patch::properties::update_fvc): Correctly update "facevertexcdata" for per-vertex "cdata". diff -r c7237277d4bf -r 649ed9dab999 libinterp/corefcn/graphics.cc --- a/libinterp/corefcn/graphics.cc Sat Mar 09 17:01:33 2024 +0100 +++ b/libinterp/corefcn/graphics.cc Sat Mar 09 17:39:24 2024 +0100 @@ -9460,6 +9460,14 @@ return; } + bool pervertex = false; + if (ncv == nv) + pervertex = true; + + bool isRGB = false; + if (cd.ndims () == 3) + isRGB = true; + // Faces and Vertices dim_vector dv; bool is3D = false; @@ -9484,6 +9492,20 @@ Matrix vert (dv); Matrix idx (nf, nv); + Matrix fvc; + if (pervertex) + { + // "facevertexcdata" holds color data per vertex + fvc.resize (nv * nf, (isRGB ? 3 : 1)); + } + else if (! cd.isempty ()) + { + // "facevertexcdata" holds color data per face + dv(0) = ncf; + dv(1) = (isRGB ? 3 : 1); + fvc = cd.reshape (dv); + } + // FIXME: This might duplicate shared vertices. octave_idx_type kk = 0; for (octave_idx_type jj = 0; jj < nf; jj++) @@ -9495,23 +9517,22 @@ if (is3D) vert(kk, 2) = zd(ii, jj); + if (pervertex) + { + fvc(kk, 0) = cd(ii, jj, 0); + if (isRGB) + { + fvc(kk, 1) = cd(ii, jj, 1); + fvc(kk, 2) = cd(ii, jj, 2); + } + } + idx(jj, ii) = static_cast (kk+1); kk++; } } - // facevertexcdata - Matrix fvc; - if (cd.ndims () == 3) - { - dv(0) = cd.rows () * cd.columns (); - dv(1) = cd.dims ()(2); - fvc = cd.reshape (dv); - } - else - fvc = cd.as_column (); - // FIXME: shouldn't we update facevertexalphadata here ? octave::unwind_protect_var restore_var (updating_patch_data, true);