]> OCCT Git - occt.git/commitdiff
Fix bugs with color buffer
authormzernova <mzernova@opencascade.com>
Fri, 23 Aug 2024 16:42:56 +0000 (17:42 +0100)
committermzernova <mzernova@opencascade.com>
Mon, 3 Mar 2025 12:11:32 +0000 (12:11 +0000)
15 files changed:
src/AIS/AIS_ColorScale.cxx
src/Graphic3d/Graphic3d_ArrayFlags.hxx
src/Graphic3d/Graphic3d_ArrayOfPoints.hxx
src/Graphic3d/Graphic3d_ArrayOfPolygons.hxx
src/Graphic3d/Graphic3d_ArrayOfPolylines.hxx
src/Graphic3d/Graphic3d_ArrayOfPrimitives.cxx
src/Graphic3d/Graphic3d_ArrayOfPrimitives.hxx
src/Graphic3d/Graphic3d_ArrayOfQuadrangleStrips.hxx
src/Graphic3d/Graphic3d_ArrayOfQuadrangles.hxx
src/Graphic3d/Graphic3d_ArrayOfSegments.hxx
src/Graphic3d/Graphic3d_ArrayOfTriangleFans.hxx
src/Graphic3d/Graphic3d_ArrayOfTriangleStrips.hxx
src/Graphic3d/Graphic3d_ArrayOfTriangles.hxx
src/OpenGl/OpenGl_FrameStatsPrs.cxx
src/OpenGl/OpenGl_VertexBuffer.cxx

index 08ec0bcf75a1739aabb0c11f65219ca792e1cc49..3493c39c3ca6af63f67b6ed5cbd0c29212652c12 100644 (file)
@@ -48,7 +48,7 @@ namespace
     theTris->AddVertex (gp_Pnt (theXLeft,            theYBottom + theSizeY, 0.0), theColorTop);
     theTris->AddVertex (gp_Pnt (theXLeft + theSizeX, theYBottom + theSizeY, 0.0), theColorTop);
     theTris->AddEdges (aVertIndex,     aVertIndex + 1, aVertIndex + 2);
-    theTris->AddEdges (aVertIndex + 1, aVertIndex + 2, aVertIndex + 3);
+    theTris->AddEdges (aVertIndex + 1, aVertIndex + 3, aVertIndex + 2);
   }
 
   //! Compute hue angle from specified value.
index cb2da070aeb7541f63a9e6ec2f08c1e2edbdd0dd..34741312ce3b928233826f0cd84ff3dfbb32dda7 100644 (file)
@@ -20,11 +20,12 @@ typedef Standard_Integer Graphic3d_ArrayFlags;
 //! Graphic3d_ArrayFlags bitmask values.
 enum
 {
-  Graphic3d_ArrayFlags_None          = 0x00,  //!< no flags
-  Graphic3d_ArrayFlags_VertexNormal  = 0x01,  //!< per-vertex normal attribute
-  Graphic3d_ArrayFlags_VertexColor   = 0x02,  //!< per-vertex color  attribute
-  Graphic3d_ArrayFlags_VertexTexel   = 0x04,  //!< per-vertex texel coordinates (UV) attribute
-  Graphic3d_ArrayFlags_BoundColor    = 0x10,
+  Graphic3d_ArrayFlags_None            = 0x00,  //!< no flags
+  Graphic3d_ArrayFlags_VertexNormal    = 0x01,  //!< per-vertex normal attribute
+  Graphic3d_ArrayFlags_VertexColor     = 0x02,  //!< per-vertex color  attribute
+  Graphic3d_ArrayFlags_VertexColorBack = 0x04,  //!< per-vertex color back attribute
+  Graphic3d_ArrayFlags_VertexTexel     = 0x08,  //!< per-vertex texel coordinates (UV) attribute
+  Graphic3d_ArrayFlags_BoundColor      = 0x10,
   // advanced
   Graphic3d_ArrayFlags_AttribsMutable       = 0x20,  //!< mutable array, which can be invalidated during lifetime without re-creation
   Graphic3d_ArrayFlags_AttribsDeinterleaved = 0x40,  //!< non-interleaved vertex attributes packed into single array
index d43905ce411776bde1528ff0ea63eaed815b9e8d..116c3d9bd85850a24e6c68d25951622fc35f4589 100644 (file)
@@ -38,10 +38,12 @@ public:
   //! @param theHasVNormals when TRUE, AddVertex(Point,Normal) should be used for specifying vertex normal
   Graphic3d_ArrayOfPoints (Standard_Integer theMaxVertexs,
                            Standard_Boolean theHasVColors  = Standard_False,
-                           Standard_Boolean theHasVNormals = Standard_False)
+                           Standard_Boolean theHasVNormals = Standard_False,
+                           Standard_Boolean theHasVColorsBack = Standard_False)
   : Graphic3d_ArrayOfPrimitives (Graphic3d_TOPA_POINTS, theMaxVertexs, 0, 0,
                                  (theHasVColors  ? Graphic3d_ArrayFlags_VertexColor  : Graphic3d_ArrayFlags_None)
-                               | (theHasVNormals ? Graphic3d_ArrayFlags_VertexNormal : Graphic3d_ArrayFlags_None)) {}
+                               | (theHasVNormals ? Graphic3d_ArrayFlags_VertexNormal : Graphic3d_ArrayFlags_None)
+                               | (theHasVColorsBack ? Graphic3d_ArrayFlags_VertexColorBack : Graphic3d_ArrayFlags_None)) {}
 
 };
 
index 58c2adb64526ddb1db3013d1890935e8d0eb8799..9fc2af66853d2b77d36b0cdade9779f352b170b8 100644 (file)
@@ -106,12 +106,14 @@ public:
                              const Standard_Boolean theHasVNormals = Standard_False,
                              const Standard_Boolean theHasVColors  = Standard_False,
                              const Standard_Boolean theHasBColors  = Standard_False,
-                             const Standard_Boolean theHasVTexels  = Standard_False)
+                             const Standard_Boolean theHasVTexels  = Standard_False,
+                             const Standard_Boolean theHasVColorsBack = Standard_False)
   : Graphic3d_ArrayOfPrimitives (Graphic3d_TOPA_POLYGONS, theMaxVertexs, theMaxBounds, theMaxEdges,
                                  (theHasVNormals ? Graphic3d_ArrayFlags_VertexNormal : Graphic3d_ArrayFlags_None)
                                | (theHasVColors  ? Graphic3d_ArrayFlags_VertexColor  : Graphic3d_ArrayFlags_None)
                                | (theHasBColors  ? Graphic3d_ArrayFlags_BoundColor   : Graphic3d_ArrayFlags_None)
-                               | (theHasVTexels  ? Graphic3d_ArrayFlags_VertexTexel  : Graphic3d_ArrayFlags_None)) {}
+                               | (theHasVTexels  ? Graphic3d_ArrayFlags_VertexTexel  : Graphic3d_ArrayFlags_None)
+                               | (theHasVColorsBack ? Graphic3d_ArrayFlags_VertexColorBack : Graphic3d_ArrayFlags_None)) {}
 
 };
 
index 786ff9ecc1710980c1ec4c1a86f28dfffac62af7..fb0737b4ba2fd796322a2a1240082ad33f588b68 100644 (file)
@@ -104,10 +104,12 @@ public:
                               Standard_Integer theMaxBounds  = 0,
                               Standard_Integer theMaxEdges   = 0,
                               Standard_Boolean theHasVColors = Standard_False,
-                              Standard_Boolean theHasBColors = Standard_False)
+                              Standard_Boolean theHasBColors = Standard_False,
+                              Standard_Boolean theHasVColorsBack = Standard_False)
   : Graphic3d_ArrayOfPrimitives (Graphic3d_TOPA_POLYLINES, theMaxVertexs, theMaxBounds, theMaxEdges,
                                  (theHasVColors  ? Graphic3d_ArrayFlags_VertexColor  : Graphic3d_ArrayFlags_None)
-                               | (theHasBColors  ? Graphic3d_ArrayFlags_BoundColor   : Graphic3d_ArrayFlags_None)) {}
+                               | (theHasBColors  ? Graphic3d_ArrayFlags_BoundColor   : Graphic3d_ArrayFlags_None)
+                               | (theHasVColorsBack ? Graphic3d_ArrayFlags_VertexColorBack : Graphic3d_ArrayFlags_None)) {}
 
 };
 
index 0e546e1bffa08b27569fb6eb3ec51bba1eebc69c..9246411e3310098ca9d1420dd243b5a950002f52 100644 (file)
@@ -172,7 +172,9 @@ void Graphic3d_ArrayOfPrimitives::init (Graphic3d_TypeOfPrimitiveArray theType,
     anAttribs[aNbAttribs].Id       = Graphic3d_TOA_COLOR;
     anAttribs[aNbAttribs].DataType = Graphic3d_TOD_VEC4UB;
     ++aNbAttribs;
-
+  }
+  if ((theArrayOptions & Graphic3d_ArrayFlags_VertexColorBack) != 0)
+  {
     anAttribs[aNbAttribs].Id = Graphic3d_TOA_COLOR_BACK;
     anAttribs[aNbAttribs].DataType = Graphic3d_TOD_VEC4UB;
     ++aNbAttribs;
index d402d5ca9927a954a3150681fdf04a64a42f87f9..3d2363c7b8a3e9e1311737bd023142b67a988921 100644 (file)
@@ -806,7 +806,15 @@ protected: //! @name protected constructors
                                Standard_Integer theMaxBounds,
                                Standard_Integer theMaxEdges,
                                Graphic3d_ArrayFlags theArrayFlags)
-  : myNormData (NULL), myTexData (NULL), myColData (NULL), myColDataBack (NULL), myPosStride (0), myNormStride (0), myTexStride (0), myColStride (0),
+  : myNormData (NULL),
+    myTexData (NULL),
+    myColData (NULL),
+    myColDataBack (NULL),
+    myPosStride (0),
+    myNormStride (0),
+    myTexStride (0),
+    myColStride (0),
+    myColStrideBack (0),
     myType (Graphic3d_TOPA_UNDEFINED)
   {
     init (theType, theMaxVertexs, theMaxBounds, theMaxEdges, theArrayFlags);
index 039a7c6a98f2f5a198acef67cf1dbfa4bcafe877..24c76389939b79393e3d0f96aee7846967e4ec2e 100644 (file)
@@ -62,12 +62,14 @@ public:
                                      Standard_Boolean theHasVNormals = Standard_False,
                                      Standard_Boolean theHasVColors  = Standard_False,
                                      Standard_Boolean theHasSColors  = Standard_False,
-                                     Standard_Boolean theHasVTexels  = Standard_False)
+                                     Standard_Boolean theHasVTexels  = Standard_False,
+                                     Standard_Boolean theHasVColorsBack = Standard_False)
   : Graphic3d_ArrayOfPrimitives (Graphic3d_TOPA_QUADRANGLESTRIPS, theMaxVertexs, theMaxStrips, 0,
                                  (theHasVNormals ? Graphic3d_ArrayFlags_VertexNormal : Graphic3d_ArrayFlags_None)
                                | (theHasVColors  ? Graphic3d_ArrayFlags_VertexColor  : Graphic3d_ArrayFlags_None)
                                | (theHasVTexels  ? Graphic3d_ArrayFlags_VertexTexel  : Graphic3d_ArrayFlags_None)
-                               | (theHasSColors  ? Graphic3d_ArrayFlags_BoundColor   : Graphic3d_ArrayFlags_None)) {}
+                               | (theHasSColors  ? Graphic3d_ArrayFlags_BoundColor   : Graphic3d_ArrayFlags_None)
+                               | (theHasVColorsBack ? Graphic3d_ArrayFlags_VertexColorBack : Graphic3d_ArrayFlags_None)) {}
 
 
 
index e99be7239f3d9e15e01354675a9845ae96b626c9..a26ff11edadb04880612ebfc73f4bb13dc1b0cdf 100644 (file)
@@ -57,11 +57,13 @@ public:
                                 Standard_Integer theMaxEdges    = 0,
                                 Standard_Boolean theHasVNormals = Standard_False,
                                 Standard_Boolean theHasVColors  = Standard_False,
-                                Standard_Boolean theHasVTexels  = Standard_False)
+                                Standard_Boolean theHasVTexels  = Standard_False,
+                                Standard_Boolean theHasVColorsBack = Standard_False)
   : Graphic3d_ArrayOfPrimitives (Graphic3d_TOPA_QUADRANGLES, theMaxVertexs, 0, theMaxEdges,
                                  (theHasVNormals ? Graphic3d_ArrayFlags_VertexNormal : Graphic3d_ArrayFlags_None)
                                | (theHasVColors  ? Graphic3d_ArrayFlags_VertexColor  : Graphic3d_ArrayFlags_None)
-                               | (theHasVTexels  ? Graphic3d_ArrayFlags_VertexTexel  : Graphic3d_ArrayFlags_None)) {}
+                               | (theHasVTexels  ? Graphic3d_ArrayFlags_VertexTexel  : Graphic3d_ArrayFlags_None)
+                               | (theHasVColorsBack ? Graphic3d_ArrayFlags_VertexColorBack : Graphic3d_ArrayFlags_None)) {}
 
 };
 
index 2059c9587a89aff96eae8735caa43b321be551b0..3b6024762d29827736f31998bc255b4698d1cb83 100644 (file)
@@ -56,8 +56,10 @@ public:
   //! @param theHasVColors when TRUE, AddVertex(Point,Color) should be used for specifying vertex color
   Graphic3d_ArrayOfSegments (Standard_Integer theMaxVertexs,
                              Standard_Integer theMaxEdges   = 0,
-                             Standard_Boolean theHasVColors = Standard_False)
-  : Graphic3d_ArrayOfPrimitives (Graphic3d_TOPA_SEGMENTS, theMaxVertexs, 0, theMaxEdges, theHasVColors ? Graphic3d_ArrayFlags_VertexColor : Graphic3d_ArrayFlags_None) {}
+                             Standard_Boolean theHasVColors = Standard_False,
+                             Standard_Boolean theHasVColorsBack = Standard_False)
+  : Graphic3d_ArrayOfPrimitives (Graphic3d_TOPA_SEGMENTS, theMaxVertexs, 0, theMaxEdges, (theHasVColors ? Graphic3d_ArrayFlags_VertexColor : Graphic3d_ArrayFlags_None)
+                                                                                       | (theHasVColorsBack ? Graphic3d_ArrayFlags_VertexColorBack : Graphic3d_ArrayFlags_None)) {}
 
 
 };
index bbd2f8ed3abc6ae87c89b179d965ead7927b7ba1..09c40602ffe8872f33656c654fce49dfc9e5e638 100644 (file)
@@ -60,12 +60,14 @@ public:
                                  Standard_Boolean theHasVNormals = Standard_False,
                                  Standard_Boolean theHasVColors  = Standard_False,
                                  Standard_Boolean theHasBColors  = Standard_False,
-                                 Standard_Boolean theHasVTexels  = Standard_False)
+                                 Standard_Boolean theHasVTexels  = Standard_False,
+                                 Standard_Boolean theHasVColorsBack = Standard_False)
   : Graphic3d_ArrayOfPrimitives (Graphic3d_TOPA_TRIANGLEFANS, theMaxVertexs, theMaxFans, 0,
                                  (theHasVNormals ? Graphic3d_ArrayFlags_VertexNormal : Graphic3d_ArrayFlags_None)
                                | (theHasVColors  ? Graphic3d_ArrayFlags_VertexColor  : Graphic3d_ArrayFlags_None)
                                | (theHasVTexels  ? Graphic3d_ArrayFlags_VertexTexel  : Graphic3d_ArrayFlags_None)
-                               | (theHasBColors  ? Graphic3d_ArrayFlags_BoundColor   : Graphic3d_ArrayFlags_None)) {}
+                               | (theHasBColors  ? Graphic3d_ArrayFlags_BoundColor   : Graphic3d_ArrayFlags_None)
+                               | (theHasVColorsBack ? Graphic3d_ArrayFlags_VertexColorBack : Graphic3d_ArrayFlags_None)) {}
 
 };
 
index 5b399671adeb9703c07424fc9250fd1c2682039a..a7d9298547cb83dee7a3fce6e58c3e6d60056505 100644 (file)
@@ -66,12 +66,14 @@ public:
                                    Standard_Boolean theHasVNormals = Standard_False,
                                    Standard_Boolean theHasVColors  = Standard_False,
                                    Standard_Boolean theHasBColors  = Standard_False,
-                                   Standard_Boolean theHasVTexels  = Standard_False)
+                                   Standard_Boolean theHasVTexels  = Standard_False,
+                                   Standard_Boolean theHasVColorsBack = Standard_False)
   : Graphic3d_ArrayOfPrimitives (Graphic3d_TOPA_TRIANGLESTRIPS, theMaxVertexs, theMaxStrips, 0,
                                  (theHasVNormals ? Graphic3d_ArrayFlags_VertexNormal : Graphic3d_ArrayFlags_None)
                                | (theHasVColors  ? Graphic3d_ArrayFlags_VertexColor  : Graphic3d_ArrayFlags_None)
                                | (theHasVTexels  ? Graphic3d_ArrayFlags_VertexTexel  : Graphic3d_ArrayFlags_None)
-                               | (theHasBColors  ? Graphic3d_ArrayFlags_BoundColor   : Graphic3d_ArrayFlags_None)) {}
+                               | (theHasBColors  ? Graphic3d_ArrayFlags_BoundColor   : Graphic3d_ArrayFlags_None)
+                               | (theHasVColorsBack ? Graphic3d_ArrayFlags_VertexColorBack : Graphic3d_ArrayFlags_None)) {}
 
 };
 
index 526e497849bdae8ecb93a66027a146681a59aa3f..70422a8ff71f357abfd8222cea29b6080b024653 100644 (file)
@@ -59,11 +59,13 @@ public:
                               Standard_Integer theMaxEdges    = 0,
                               Standard_Boolean theHasVNormals = Standard_False,
                               Standard_Boolean theHasVColors  = Standard_False,
-                              Standard_Boolean theHasVTexels  = Standard_False)
+                              Standard_Boolean theHasVTexels  = Standard_False,
+                              Standard_Boolean theHasVColorsBack = Standard_False)
   : Graphic3d_ArrayOfPrimitives (Graphic3d_TOPA_TRIANGLES, theMaxVertexs, 0, theMaxEdges,
                                  (theHasVNormals ? Graphic3d_ArrayFlags_VertexNormal : Graphic3d_ArrayFlags_None)
                                | (theHasVColors  ? Graphic3d_ArrayFlags_VertexColor  : Graphic3d_ArrayFlags_None)
-                               | (theHasVTexels  ? Graphic3d_ArrayFlags_VertexTexel  : Graphic3d_ArrayFlags_None)) {}
+                               | (theHasVTexels  ? Graphic3d_ArrayFlags_VertexTexel  : Graphic3d_ArrayFlags_None)
+                               | (theHasVColorsBack ? Graphic3d_ArrayFlags_VertexColorBack : Graphic3d_ArrayFlags_None)) {}
 
 };
 
index 93f111c7861958d62326baa77400b5ca12555611..fe922530bd110e416d442c98b1e8e4498841b98a 100644 (file)
@@ -427,7 +427,7 @@ void OpenGl_FrameStatsPrs::Render (const Handle(OpenGl_Workspace)& theWorkspace)
     myChartVertices->Bind (aCtx);
     myChartVertices->bindAttribute (aCtx, Graphic3d_TOA_POS,   3, GL_FLOAT,         myChartVertices->GetComponentsNb(), NULL);
     myChartVertices->bindAttribute (aCtx, Graphic3d_TOA_COLOR, 4, GL_UNSIGNED_BYTE, myChartVertices->GetComponentsNb(), (void* )sizeof(Graphic3d_Vec3));
-    myChartVertices->bindAttribute (aCtx, Graphic3d_TOA_COLOR_BACK, 5, GL_UNSIGNED_BYTE, myChartVertices->GetComponentsNb(), (void*)sizeof(Graphic3d_Vec3));
+    myChartVertices->bindAttribute (aCtx, Graphic3d_TOA_COLOR_BACK, 4, GL_UNSIGNED_BYTE, myChartVertices->GetComponentsNb(), (void*)sizeof(Graphic3d_Vec3));
 
     myChartIndices->Bind (aCtx);
     aCtx->core15fwd->glDrawElements (GL_TRIANGLES, myChartIndices->GetElemsNb(), myChartIndices->GetDataType(), NULL);
@@ -441,7 +441,7 @@ void OpenGl_FrameStatsPrs::Render (const Handle(OpenGl_Workspace)& theWorkspace)
     myChartLines->Bind (aCtx);
     myChartLines->bindAttribute (aCtx, Graphic3d_TOA_POS,   3, GL_FLOAT,         myChartLines->GetComponentsNb(), NULL);
     myChartLines->bindAttribute (aCtx, Graphic3d_TOA_COLOR, 4, GL_UNSIGNED_BYTE, myChartLines->GetComponentsNb(), (void* )sizeof(Graphic3d_Vec3));
-    myChartLines->bindAttribute (aCtx, Graphic3d_TOA_COLOR_BACK, 5, GL_UNSIGNED_BYTE, myChartLines->GetComponentsNb(), (void*)sizeof(Graphic3d_Vec3));
+    myChartLines->bindAttribute (aCtx, Graphic3d_TOA_COLOR_BACK, 4, GL_UNSIGNED_BYTE, myChartLines->GetComponentsNb(), (void*)sizeof(Graphic3d_Vec3));
     aCtx->core15fwd->glDrawArrays (GL_LINES, 0, myChartLines->GetElemsNb());
     myChartLines->Unbind (aCtx);
     myChartLines->unbindAttribute (aCtx, Graphic3d_TOA_COLOR_BACK);
index c46ce0d1076ecabe7526dd6aab737ae4a073fb0e..f2883844c69cd7e562d4541faba62c4e34d25636 100644 (file)
@@ -205,7 +205,7 @@ void OpenGl_VertexBuffer::bindFixed (const Handle(OpenGl_Context)&   theCtx,
     {
       theCtx->core11ffp->glEnableClientState (GL_COLOR_ARRAY);
       theCtx->core11ffp->glColorPointer (theNbComp, theDataType, theStride, theOffset);
-      theCtx->core11ffp->glColorMaterial (GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
+      theCtx->core11ffp->glColorMaterial (GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
       theCtx->core11fwd->glEnable (GL_COLOR_MATERIAL);
       return;
     }
@@ -236,8 +236,8 @@ void OpenGl_VertexBuffer::unbindFixed (const Handle(OpenGl_Context)&   theCtx,
     case Graphic3d_TOA_POS:   theCtx->core11ffp->glDisableClientState (GL_VERTEX_ARRAY);        return;
     case Graphic3d_TOA_NORM:  theCtx->core11ffp->glDisableClientState (GL_NORMAL_ARRAY);        return;
     case Graphic3d_TOA_UV:    theCtx->core11ffp->glDisableClientState (GL_TEXTURE_COORD_ARRAY); return;
-    case Graphic3d_TOA_COLOR: unbindFixedColor (theCtx); return;
-    case Graphic3d_TOA_COLOR_BACK:
+    case Graphic3d_TOA_COLOR:      unbindFixedColor (theCtx); return;
+    case Graphic3d_TOA_COLOR_BACK: unbindFixedColor (theCtx); return;
     case Graphic3d_TOA_CUSTOM:
     {
       return;