0023544: Texture management in TKOpenGl should be redesigned
authorkgv <kgv@opencascade.com>
Fri, 7 Dec 2012 09:58:30 +0000 (13:58 +0400)
committerkgv <kgv@opencascade.com>
Fri, 7 Dec 2012 09:58:30 +0000 (13:58 +0400)
Structures Graphic3d_CView, Graphic3d_CStructure, Graphic3d_CGroup become classes and their definitions moved from InterfaceGraphic to Graphic3d.
Introduced new class OpenGl_Texture as replacement for OpenGl_ResourceTexture class and static functions in OpenGl_TextureBox.
Graphic3d_TextureRoot now no more communicate within Graphic3d_GraphicalDriver.
Instead class returns image through GetImage() method.
OpenGl_AspectFace - avoid possible NULL-dereference
OpenGl_Texture::Init() - check gluBuild2DMipmaps() return value
OpenGl_Texture - check GL_BGRA_EXT for compatibility
OpenGl_Texture - scale NPOT image when required
Added more description to Graphic3d_TextureRoot class
OpenGl_Texture - added missing break statement for ImgBGR32 case
OpenGl_Workspace::setTextureParams() - fixed local variable aFilterMin overrides visibility of early declared variable
OpenGl_Workspace::DisableTexture() - reset texture matrix
FTGL do not reset texture matrix and corrupt text could be rendered if custom texture has not identity texture matrix.

92 files changed:
.gitignore
src/AIS/AIS_TexturedShape.cxx
src/Graphic3d/FILES
src/Graphic3d/Graphic3d.cdl
src/Graphic3d/Graphic3d_CGroup.hxx
src/Graphic3d/Graphic3d_CInitTexture.hxx [deleted file]
src/Graphic3d/Graphic3d_CStructure.hxx
src/Graphic3d/Graphic3d_CTexture.hxx
src/Graphic3d/Graphic3d_CView.hxx
src/Graphic3d/Graphic3d_GraphicDriver.cdl
src/Graphic3d/Graphic3d_Group.cxx
src/Graphic3d/Graphic3d_Group_8.cxx
src/Graphic3d/Graphic3d_Structure.cdl
src/Graphic3d/Graphic3d_Structure.cxx
src/Graphic3d/Graphic3d_Texture1D.cdl
src/Graphic3d/Graphic3d_Texture1D.cxx
src/Graphic3d/Graphic3d_Texture1Dmanual.cdl
src/Graphic3d/Graphic3d_Texture1Dmanual.cxx
src/Graphic3d/Graphic3d_Texture1Dsegment.cdl
src/Graphic3d/Graphic3d_Texture1Dsegment.cxx
src/Graphic3d/Graphic3d_Texture2D.cdl
src/Graphic3d/Graphic3d_Texture2D.cxx
src/Graphic3d/Graphic3d_Texture2Dmanual.cdl
src/Graphic3d/Graphic3d_Texture2Dmanual.cxx
src/Graphic3d/Graphic3d_Texture2Dplane.cdl
src/Graphic3d/Graphic3d_Texture2Dplane.cxx
src/Graphic3d/Graphic3d_TextureEnv.cdl
src/Graphic3d/Graphic3d_TextureEnv.cxx
src/Graphic3d/Graphic3d_TextureMap.cdl
src/Graphic3d/Graphic3d_TextureMap.cxx
src/Graphic3d/Graphic3d_TextureParams.cdl [new file with mode: 0755]
src/Graphic3d/Graphic3d_TextureParams.cxx [new file with mode: 0755]
src/Graphic3d/Graphic3d_TextureRoot.cdl
src/Graphic3d/Graphic3d_TextureRoot.cxx
src/Graphic3d/Graphic3d_Vec2.hxx [copied from src/Graphic3d/Graphic3d_CInitTexture.cxx with 76% similarity]
src/Graphic3d/Graphic3d_Vec3.hxx [copied from src/Graphic3d/Graphic3d_CInitTexture.cxx with 76% similarity]
src/Graphic3d/Graphic3d_Vec4.hxx [copied from src/Graphic3d/Graphic3d_CInitTexture.cxx with 76% similarity]
src/Image/FILES
src/Image/Image_PixMap.hxx
src/Image/Image_PixMap_Handle.hxx [moved from src/OpenGl/OpenGl_ResourceTexture.hxx with 51% similarity, mode: 0644]
src/InterfaceGraphic/InterfaceGraphic_Graphic3d.hxx
src/InterfaceGraphic/InterfaceGraphic_Visual3d.hxx
src/MeshVS/MeshVS_NodalColorPrsBuilder.cxx
src/NCollection/NCollection_Vec2.hxx
src/NCollection/NCollection_Vec3.hxx
src/OpenGl/FILES
src/OpenGl/Handle_OpenGl_Texture.hxx [moved from src/Graphic3d/Graphic3d_CInitTexture.cxx with 76% similarity, mode: 0644]
src/OpenGl/OpenGl_AspectFace.cxx
src/OpenGl/OpenGl_AspectFace.hxx
src/OpenGl/OpenGl_AspectLine.cxx
src/OpenGl/OpenGl_AspectLine.hxx
src/OpenGl/OpenGl_AspectMarker.cxx
src/OpenGl/OpenGl_AspectMarker.hxx
src/OpenGl/OpenGl_AspectText.cxx
src/OpenGl/OpenGl_AspectText.hxx
src/OpenGl/OpenGl_Context.cxx
src/OpenGl/OpenGl_Context.hxx
src/OpenGl/OpenGl_Element.hxx
src/OpenGl/OpenGl_GraphicDriver.hxx
src/OpenGl/OpenGl_GraphicDriver_3.cxx
src/OpenGl/OpenGl_GraphicDriver_4.cxx
src/OpenGl/OpenGl_GraphicDriver_7.cxx
src/OpenGl/OpenGl_GraphicDriver_9.cxx
src/OpenGl/OpenGl_Group.cxx
src/OpenGl/OpenGl_Group.hxx
src/OpenGl/OpenGl_Marker.cxx
src/OpenGl/OpenGl_MarkerSet.cxx
src/OpenGl/OpenGl_Polygon.cxx
src/OpenGl/OpenGl_Polyline.cxx
src/OpenGl/OpenGl_PrimitiveArray.cxx
src/OpenGl/OpenGl_PrimitiveArray.hxx
src/OpenGl/OpenGl_ResourceTexture.cxx [deleted file]
src/OpenGl/OpenGl_Structure.cxx
src/OpenGl/OpenGl_Structure.hxx
src/OpenGl/OpenGl_Text.cxx
src/OpenGl/OpenGl_Texture.cxx [new file with mode: 0644]
src/OpenGl/OpenGl_Texture.hxx [new file with mode: 0644]
src/OpenGl/OpenGl_TextureBox.cxx [deleted file]
src/OpenGl/OpenGl_TextureBox.hxx [deleted file]
src/OpenGl/OpenGl_Trihedron.cxx
src/OpenGl/OpenGl_View.cxx
src/OpenGl/OpenGl_View.hxx
src/OpenGl/OpenGl_View_2.cxx
src/OpenGl/OpenGl_Workspace.cxx
src/OpenGl/OpenGl_Workspace.hxx
src/OpenGl/OpenGl_Workspace_3.cxx
src/OpenGl/OpenGl_Workspace_5.cxx
src/ViewerTest/ViewerTest.cxx
src/ViewerTest/ViewerTest_OpenGlCommands.cxx
src/Visual3d/Visual3d_TransientManager.cxx
src/Visual3d/Visual3d_View.cxx
src/Visual3d/Visual3d_ViewManager.cxx

index c09f8da..c0d8f5e 100644 (file)
@@ -15,7 +15,8 @@
 
 # project files and artifacts
 /adm/msvc
-/adm/wnt/cbp
+/adm/wnt
+/adm/lin
 /adm/mac
 /adm/make
 *.vcproj*user
index 2fc46b4..600eef8 100755 (executable)
@@ -177,7 +177,7 @@ void AIS_TexturedShape::EnableTextureModulate()
 
 //=======================================================================
 //function : DisableTextureModulate
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 void AIS_TexturedShape::DisableTextureModulate()
@@ -192,7 +192,6 @@ void AIS_TexturedShape::DisableTextureModulate()
 
 void AIS_TexturedShape::UpdateAttributes()
 {
-  Handle(Graphic3d_StructureManager) aStrucMana = GetContext()->MainPrsMgr()->StructureManager();
   Prs3d_ShadingAspect aDummy;
   myAspect = aDummy.Aspect();
   Handle(Prs3d_Presentation) aPrs = Presentation();
@@ -203,9 +202,9 @@ void AIS_TexturedShape::UpdateAttributes()
   }
 
   if (myPredefTexture != -1)
-    mytexture = new Graphic3d_Texture2Dmanual (aStrucMana, myPredefTexture);
+    mytexture = new Graphic3d_Texture2Dmanual (myPredefTexture);
   else
-    mytexture = new Graphic3d_Texture2Dmanual (aStrucMana, myTextureFile.ToCString());
+    mytexture = new Graphic3d_Texture2Dmanual (myTextureFile.ToCString());
 
   myAspect->SetTextureMapOn();
 
@@ -323,7 +322,6 @@ void AIS_TexturedShape::Compute (const Handle(PrsMgr_PresentationManager3d)& /*t
       BRepTools::Clean (myshape);
       BRepTools::Update (myshape);
 
-      Handle(Graphic3d_StructureManager) aStrucMana = GetContext()->MainPrsMgr()->StructureManager();
       {
         Handle(Prs3d_ShadingAspect) aPrs3d_ShadingAspect = new Prs3d_ShadingAspect();
         myAspect = aPrs3d_ShadingAspect->Aspect();
@@ -345,9 +343,9 @@ void AIS_TexturedShape::Compute (const Handle(PrsMgr_PresentationManager3d)& /*t
       myAspect->SetTextureMapOn();
 
       if (myPredefTexture != -1)
-        mytexture = new Graphic3d_Texture2Dmanual (aStrucMana, myPredefTexture);
+        mytexture = new Graphic3d_Texture2Dmanual (myPredefTexture);
       else
-        mytexture = new Graphic3d_Texture2Dmanual (aStrucMana, myTextureFile.ToCString());
+        mytexture = new Graphic3d_Texture2Dmanual (myTextureFile.ToCString());
 
       if (!mytexture->IsDone())
       {
index 6379a7e..81fa3ce 100755 (executable)
@@ -10,8 +10,6 @@ Graphic3d_CBitFields8.cxx
 Graphic3d_CBitFields8.hxx
 Graphic3d_CBitFields4.cxx
 Graphic3d_CBitFields4.hxx
-Graphic3d_CInitTexture.cxx
-Graphic3d_CInitTexture.hxx
 Graphic3d_CTexture.cxx
 Graphic3d_CTexture.hxx
 Graphic3d_CLight.cxx
@@ -53,3 +51,6 @@ Graphic3d_AspectText3d.cxx
 Graphic3d_WNTGraphicDevice.cxx
 Graphic3d_PtrFrameBuffer.hxx
 Graphic3d_BufferType.hxx
+Graphic3d_Vec2.hxx
+Graphic3d_Vec3.hxx
+Graphic3d_Vec4.hxx
index fa0ca14..645d2f2 100755 (executable)
@@ -220,6 +220,21 @@ is
     ---Purpose: Type of the texture projection.
     ---Category: Enumerations
 
+    enumeration  TypeOfTextureFilter is TOTF_NEAREST,
+                                        TOTF_BILINEAR,
+                                        TOTF_TRILINEAR;
+    ---Purpose: Type of the texture filter.
+    -- Notice that for textures without mipmaps linear interpolation will be used instead of TOTF_BILINEAR and TOTF_TRILINEAR.
+    ---Category: Enumerations
+
+    enumeration  LevelOfTextureAnisotropy is LOTA_OFF,
+                                             LOTA_FAST,
+                                             LOTA_MIDDLE,
+                                             LOTA_QUALITY;
+    ---Purpose: Level of anisotropy filter.
+    -- Notice that actual quality depends on hardware capabilities!
+    ---Category: Enumerations
+
     enumeration  NameOfTexturePlane  is  NOTP_XY,
                                          NOTP_YZ,
                                          NOTP_ZX,
@@ -384,15 +399,15 @@ is
     ---Purpose: Defines the C structure of a graduated trihedron.
     ---Category: Imported types
 
-    imported CInitTexture;
     imported CTexture;
 
---   ABD 29/10/04  Transform Persistence of Presentation( pan, zoom, rotate )
-        imported CTransPersStruct;
-        imported TransModeFlags;
---   ABD 29/10/04  Transform Persistence of Presentation( pan, zoom, rotate )
+    imported CTransPersStruct;
+    imported TransModeFlags;
 
     primitive PtrFrameBuffer;
+    primitive Vec2;
+    primitive Vec3;
+    primitive Vec4;
 
     --------------------
     -- Category: Classes
@@ -614,12 +629,12 @@ is
     imported NListOfHAsciiString;
     ---Category: Instantiated classes
 
-
-        deferred  class  TextureRoot  from  Graphic3d;
+    deferred  class  TextureRoot  from  Graphic3d;
     deferred  class  TextureMap   from  Graphic3d;
     deferred  class  Texture1D    from  Graphic3d;
     deferred  class  Texture2D    from  Graphic3d;
 
+    class  TextureParams    from  Graphic3d;
     class  TextureEnv       from  Graphic3d;
     class  Texture1Dmanual  from  Graphic3d;
     class  Texture1Dsegment from  Graphic3d;
index 2dfa0f2..c33011d 100755 (executable)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-/*============================================================================*/
-/*==== Titre: Graphic3d_CGroup.hxx                                           */
-/*==== Role : The header file of primitive type "CGroup" from Graphic3d       */
-/*====                                                                       */
-/*==== Implementation:  This is a primitive type implemented with typedef     */
-/*============================================================================*/
-
 #ifndef _Graphic3d_CGroup_HeaderFile
 #define _Graphic3d_CGroup_HeaderFile
 
-#include <InterfaceGraphic_Graphic3d.hxx>
-typedef CALL_DEF_GROUP Graphic3d_CGroup;
+#include <InterfaceGraphic_Visual3d.hxx>
+#include <Graphic3d_CTexture.hxx>
+
+class Graphic3d_CStructure;
+
+class CALL_DEF_CONTEXTFILLAREA
+{
+
+public:
+
+  CALL_DEF_CONTEXTFILLAREA()
+  : IsDef (0),
+    IsSet (0),
+    Style (0),
+    LineType (0),
+    Width (0.0f),
+    Hatch (0),
+    Distinguish (0),
+    BackFace (0),
+    Edge (0),
+    DegenerationMode (0),
+    SkipRatio (0.0f),
+    PolygonOffsetMode   (0),
+    PolygonOffsetFactor (0.0f),
+    PolygonOffsetUnits  (0.0f)
+  {
+    //
+  }
+
+public:
+
+  int IsDef;
+
+  int IsSet;
+
+  int Style;
+
+  CALL_DEF_COLOR IntColor;
+  CALL_DEF_COLOR BackIntColor;
+  CALL_DEF_COLOR EdgeColor;
+
+  int LineType;
+
+  float Width;
+
+  int Hatch;
+
+  int Distinguish;
+  int BackFace;
+
+  int Edge;
+
+  CALL_DEF_MATERIAL Front;
+  CALL_DEF_MATERIAL Back;
+
+  Graphic3d_CTexture Texture;
+
+  int   DegenerationMode;
+  float SkipRatio;
+
+  int   PolygonOffsetMode;
+  float PolygonOffsetFactor;
+  float PolygonOffsetUnits;
+
+};
+
+class Graphic3d_CGroup
+{
+
+public:
+
+  int   LabelBegin;
+  int   LabelEnd;
+  void* ptrGroup;
+
+  int   StructureEnd;
+
+  CALL_DEF_CONTEXTLINE     ContextLine;
+  CALL_DEF_CONTEXTFILLAREA ContextFillArea;
+  CALL_DEF_CONTEXTMARKER   ContextMarker;
+  CALL_DEF_CONTEXTTEXT     ContextText;
+
+  Graphic3d_CStructure* Struct;
+
+  CALL_DEF_PICKID PickId;
+
+  unsigned IsDeleted : 1;
+  unsigned IsOpen    : 1;
+
+};
 
-#if defined(__cplusplus) || defined(c_plusplus)
-/*==== Definition de Type ====================================================*/
-#include <Standard_Type.hxx> 
-const Handle(Standard_Type)&  TYPE(Graphic3d_CGroup);
-/*============================================================================*/
+const Handle(Standard_Type)& TYPE(Graphic3d_CGroup);
 
-#endif
-#endif /*Graphic3d_CGroup_HeaderFile*/
+#endif // Graphic3d_CGroup_HeaderFile
diff --git a/src/Graphic3d/Graphic3d_CInitTexture.hxx b/src/Graphic3d/Graphic3d_CInitTexture.hxx
deleted file mode 100755 (executable)
index a9e5d7d..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) 1999-2012 OPEN CASCADE SAS
-//
-// The content of this file is subject to the Open CASCADE Technology Public
-// License Version 6.5 (the "License"). You may not use the content of this file
-// except in compliance with the License. Please obtain a copy of the License
-// at http://www.opencascade.org and read it completely before using this file.
-//
-// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
-// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
-//
-// The Original Code and all software distributed under the License is
-// distributed on an "AS IS" basis, without warranty of any kind, and the
-// Initial Developer hereby disclaims all such warranties, including without
-// limitation, any warranties of merchantability, fitness for a particular
-// purpose or non-infringement. Please see the License for the specific terms
-// and conditions governing the rights and limitations under the License.
-
-/*============================================================================*/
-/*==== Titre: Graphic3d_CInitTexture.hxx                                     */
-/*==== Role : The header file of primitive type "CInitTexture" from Graphic3d */
-/*====                                                                       */
-/*==== Implementation:  This is a primitive type implemented with typedef     */
-/*==== Created: 1/07/97 ; PCT : texture mapping                               */
-/*============================================================================*/
-
-#ifndef _Graphic3d_CInitTexture_HeaderFile
-#define _Graphic3d_CInitTexture_HeaderFile
-
-#include <InterfaceGraphic_Graphic3d.hxx>
-#include <InterfaceGraphic_Visual3d.hxx>
-typedef CALL_DEF_INIT_TEXTURE Graphic3d_CInitTexture;
-
-#if defined(__cplusplus) || defined(c_plusplus)
-/*==== Definition de Type ====================================================*/
-#include <Standard_Type.hxx>
-const Handle(Standard_Type)& TYPE(Graphic3d_CInitTexture);
-/*============================================================================*/
-
-#endif
-#endif /*Graphic3d_CInitTexture_HeaderFile*/
index 17b55b6..93091e9 100755 (executable)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-/*============================================================================*/
-/*==== Titre: Graphic3d_CStructure.hxx                                       */
-/*==== Role : The header file of primitive type "CStructure" from Graphic3d   */
-/*====                                                                       */
-/*==== Implementation:  This is a primitive type implemented with typedef     */
-/*============================================================================*/
-
 #ifndef _Graphic3d_CStructure_HeaderFile
 #define _Graphic3d_CStructure_HeaderFile
 
-#include <InterfaceGraphic_Graphic3d.hxx>
-typedef CALL_DEF_STRUCTURE Graphic3d_CStructure;
+#include <Graphic3d_CGroup.hxx>
+
+class Graphic3d_CStructure
+{
+
+public:
+
+  int   Id;
+  void* ptrStructure;
+
+  int   Priority;
+  int   PreviousPriority;
+  int   GroupBegin;
+  int   GroupEnd;
+
+  CALL_DEF_CONTEXTLINE     ContextLine;
+  CALL_DEF_CONTEXTFILLAREA ContextFillArea;
+  CALL_DEF_CONTEXTMARKER   ContextMarker;
+  CALL_DEF_CONTEXTTEXT     ContextText;
+
+  CALL_DEF_BOUNDBOX BoundBox;
+
+  float Transformation[4][4];
+  int   Composition;
+
+  int   ContainsFacet;
+
+  unsigned IsDeleted     : 1;
+  unsigned IsOpen        : 1;
+  unsigned IsInfinite    : 1;
+  unsigned stick         : 1;
+  unsigned highlight     : 1;
+  unsigned visible       : 1;
+  unsigned pick          : 1;
+  unsigned HLRValidation : 1;
+
+  CALL_DEF_TRANSFORM_PERSISTENCE TransformPersistence;
+
+};
 
-#if defined(__cplusplus) || defined(c_plusplus)
-/*==== Definition de Type ====================================================*/
+///typedef Graphic3d_CStructure CALL_DEF_STRUCTURE;
 
-#include <Standard_Type.hxx>
-const Handle(Standard_Type)& TYPE(Graphic3d_CStructure) ;
-/*============================================================================*/
+const Handle(Standard_Type)& TYPE(Graphic3d_CStructure);
 
-#endif
-#endif /*Graphic3d_CStructure_HeaderFile*/
+#endif // Graphic3d_CStructure_HeaderFile
index dda5062..172efe2 100755 (executable)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-/*============================================================================*/
-/*==== Titre: Graphic3d_CTexture.hxx                                         */
-/*==== Role : The header file of primitive type "CTexture" from Graphic3d     */
-/*====                                                                       */
-/*==== Implementation:  This is a primitive type implemented with typedef     */
-/*==== created: 1/07/97 ; PCT : texture mapping                               */
-/*============================================================================*/
-
 #ifndef _Graphic3d_CTexture_HeaderFile
 #define _Graphic3d_CTexture_HeaderFile
 
-#include <InterfaceGraphic_Graphic3d.hxx>
-#include <InterfaceGraphic_Visual3d.hxx>
-typedef CALL_DEF_TEXTURE Graphic3d_CTexture;
-
-#if defined(__cplusplus) || defined(c_plusplus)
-/*==== Definition de Type ====================================================*/
+#include <Handle_Graphic3d_TextureMap.hxx>
 #include <Standard_Type.hxx>
+
+class Graphic3d_CTexture
+{
+
+public:
+
+  Graphic3d_CTexture()
+  : doTextureMap (0)
+  {
+    //
+  }
+
+public:
+
+  Handle(Graphic3d_TextureMap) TextureMap;   //!< handle to texture
+  int                          doTextureMap; //!< flag indicates to use texture or not
+
+};
+
 const Handle(Standard_Type)& TYPE(Graphic3d_CTexture);
-/*============================================================================*/
 
-#endif
-#endif /*Graphic3d_CTexture_HeaderFile*/
+#endif // Graphic3d_CTexture_HeaderFile
index 90ee099..5a9d548 100755 (executable)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-/*============================================================================*/
-/*==== Titre: Graphic3d_CView.hxx                                            */
-/*==== Role : The header file of primitive type "CView" from Graphic3d       */
-/*====                                                                       */
-/*==== Implementation:  This is a primitive type implemented with typedef     */
-/*============================================================================*/
-
 #ifndef _Graphic3d_CView_HeaderFile
 #define _Graphic3d_CView_HeaderFile
 
 #include <InterfaceGraphic_Graphic3d.hxx>
 #include <InterfaceGraphic_Visual3d.hxx>
-typedef CALL_DEF_VIEW Graphic3d_CView;
-
-#if defined(__cplusplus) || defined(c_plusplus)
-/*==== Definition de Type ====================================================*/
+#include <Handle_Graphic3d_TextureEnv.hxx>
 #include <Standard_Type.hxx>
+
+class CALL_DEF_VIEWCONTEXT
+{
+
+public:
+
+  CALL_DEF_VIEWCONTEXT()
+  : Aliasing (0),
+    BackZClipping  (0),
+    FrontZClipping (0),
+    DepthCueing (0),
+    ZClipFrontPlane (0.0f),
+    ZClipBackPlane  (0.0f),
+    DepthFrontPlane (0.0f),
+    DepthBackPlane  (0.0f),
+    ZBufferActivity (0),
+    Model (0),
+    Visualization (0),
+    NbActiveLight (0),
+    ActiveLight (NULL),
+    NbActivePlane (0),
+    ActivePlane (NULL),
+    SurfaceDetail (0)
+  {
+    //
+  }
+
+public:
+
+  int   Aliasing;
+
+  int   BackZClipping;
+  int   FrontZClipping;
+
+  int   DepthCueing;
+
+  float ZClipFrontPlane;
+  float ZClipBackPlane;
+
+  float DepthFrontPlane;
+  float DepthBackPlane;
+
+  int   ZBufferActivity;
+  int   Model;
+  int   Visualization;
+
+  int   NbActiveLight;
+  CALL_DEF_LIGHT* ActiveLight;
+
+  int   NbActivePlane;
+  CALL_DEF_PLANE* ActivePlane;
+
+  Handle(Graphic3d_TextureEnv) TextureEnv;
+  int   SurfaceDetail;
+
+};
+
+class Graphic3d_CView
+{
+
+public:
+
+  Graphic3d_CView()
+  : WsId (-1),
+    ViewId (0),
+    ptrView (NULL),
+    IsDeleted (0),
+    IsOpen (0),
+    Active (0),
+    ptrUnderLayer (NULL),
+    ptrOverLayer  (NULL),
+    IsDegenerates     (0),
+    IsDegeneratesPrev (0),
+    Backfacing  (0),
+    GDisplayCB  (NULL),
+    GClientData (NULL),
+    ptrFBO (NULL)
+  {
+    //
+  }
+
+public:
+
+  int   WsId;
+  int   ViewId;
+  void* ptrView;
+
+  int   IsDeleted;
+  int   IsOpen;
+
+  int   Active;
+
+  CALL_DEF_VIEWORIENTATION Orientation;
+  CALL_DEF_VIEWMAPPING     Mapping;
+
+  CALL_DEF_VIEWORIENTATION OrientationReset;
+  CALL_DEF_VIEWMAPPING     MappingReset;
+
+  CALL_DEF_VIEWCONTEXT     Context;
+
+  CALL_DEF_WINDOW          DefWindow;
+
+  void* ptrUnderLayer;
+  void* ptrOverLayer;
+
+  int   IsDegenerates;
+  int   IsDegeneratesPrev;
+  int   Backfacing;
+
+  Aspect_RenderingContext    GContext;
+  Aspect_GraphicCallbackProc GDisplayCB;
+  void* GClientData;
+
+  void* ptrFBO;
+
+};
+
 const Handle(Standard_Type)& TYPE(Graphic3d_CView);
-/*============================================================================*/
 
-#endif
-#endif /*Graphic3d_CView_HeaderFile*/
+#endif // Graphic3d_CView_HeaderFile
index a2f0e4a..2423688 100755 (executable)
 -- purpose or non-infringement. Please see the License for the specific terms
 -- and conditions governing the rights and limitations under the License.
 
--- Modified:    01/08/97 ; PCT : ajout texture mapping
---              07/08/97 ; PCT : ajout texture environnante
---              27/08/97 ; PCT : ajout coordonnee texture
---              00/11/97 ; CAL : retrait de la dependance avec math
---              00/11/97 ; CAL : ajout polyline par 2 points
---      16-09-98 ; BGN : Points d'entree du Triedre (S3819, Phase 1)
---              22-09-98 ; BGN : S3989 (anciennement S3819)
---                               TypeOfTriedron* from Aspect(et pas Graphic3d)
---              03-11-98 ; CAL : Introduction de Visual3d_LayerManager.
---              07-10-99 : EUG : Degeneration support (G003)
---               Add DegenerateStructure() and
---                   SetBackFacingModel() methods.
---      10-11-99 ; GG  : PRO19603 Change Redraw( ) method
---      16-06-2000 : ATS,GG : G005 - method PrimitiveArray, which are interface of OpenGl
---                            package, and used to initialize internal fields
---                            of primitives (Convert high level data to internal presentation).
---      17/08/00 ; THA ; Thomas HARTL <t-hartl@muenchen.matra-dtv.fr>
---              -> Add Print methods (works only under Windows).
---      27/03/02 ; GG  ; RIC120302 Add new method Begin(Aspect_Display)
---              28/05/02 ; VSV : New trihedron
---      23/12/02 ; SAV : Added methods to set background image and its
---                       appearence style
---              20/01/09 ; ABD : Integration support of system fonts (using FTGL and FreeType)
-
 deferred class GraphicDriver from Graphic3d inherits GraphicDriver from Aspect
 
     ---Version:
@@ -114,8 +90,6 @@ uses
     Array2OfVertexNC    from Graphic3d,
     VertexNC            from Graphic3d,
     VerticalTextAlignment   from Graphic3d,
-    CInitTexture        from Graphic3d,
-    TypeOfTexture       from Graphic3d,
     VertexNT            from Graphic3d,
     Array1OfVertexNT    from Graphic3d,
     Array2OfVertexNT    from Graphic3d,
@@ -800,30 +774,6 @@ is
         is deferred;
     ---Purpose: call_togl_transform
 
-    -----------------------------
-    -- Category: Textures methods
-    -----------------------------
-
-    CreateTexture ( me;
-                    theType           : TypeOfTexture from Graphic3d;
-                    theImage          : PixMap  from Image;
-                    theFileName       : CString from Standard;
-                    theTexUpperBounds : HArray1OfReal from TColStd )
-    returns Integer from Standard
-        is deferred;
-    ---Purpose:
-
-    DestroyTexture ( me;
-                     TexId  : Integer from Standard )
-        is deferred;
-    ---Purpose:
-
-    ModifyTexture ( me;
-                    TexId   : Integer from Standard;
-                    AValue  : CInitTexture from Graphic3d )
-        is deferred;
-    ---Purpose:
-
     -------------------------------
     -- Category: Layer mode methods
     -------------------------------
index e2028ff..40b4383 100755 (executable)
@@ -21,7 +21,7 @@
 //              11/97 ; CAL : retrait DownCast
 
 
-//-Version     
+//-Version
 
 //-Design      Declaration of variables specific to groups
 //             of primitives
@@ -29,7 +29,7 @@
 //-Warning     A group is definedv in a structure
 //             This is the smallest editable entity
 
-//-References  
+//-References
 
 //-Language    C++ 2.0
 
@@ -87,7 +87,7 @@ Standard_Integer TheLabelBegin, TheLabelEnd;
        MyContainsFacet                 = Standard_False,
        MyIsEmpty                       = Standard_True;
 
-       MyCGroup.Struct = (CALL_DEF_STRUCTURE *) (MyStructure->CStructure ());
+       MyCGroup.Struct     = MyStructure->CStructure();
        MyCGroup.Struct->Id     = int (MyStructure->Identification ());
        MyCGroup.IsDeleted      = 0;
        MyCGroup.IsOpen         = 0;
index d028c18..c38456f 100755 (executable)
 // modified:     1/07/97 ; PCT : ajout texture mapping
 //              20/07/97 ; PCT : ajout transparence texture
 //              08/04/98 ; FGU : Ajout emission surface
-//              30/11/98 ; FMN : S4069. Textes always visible.   
+//              30/11/98 ; FMN : S4069. Textes always visible.
 //              22/03/04 ; SAN : OCC4895 High-level interface for controlling polygon offsets */
 
 
-//-Version      
+//-Version
 
 //-Design       Declaration des variables specifiques aux groupes
 //              de primitives
@@ -33,7 +33,7 @@
 //-Warning      Un groupe est defini dans une structure
 //              Il s'agit de la plus petite entite editable
 
-//-References   
+//-References
 
 //-Language     C++ 2.0
 
@@ -136,7 +136,7 @@ void Graphic3d_Group::SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectFil
   MyCGroup.ContextFillArea.Back.Emission  =
     float ((CTX->BackMaterial ()).Emissive ());
 
-  // Reflection mode 
+  // Reflection mode
   MyCGroup.ContextFillArea.Back.IsAmbient =
     ( (CTX->BackMaterial ()).ReflectionMode
     (Graphic3d_TOR_AMBIENT) ? 1 : 0 );
@@ -150,13 +150,13 @@ void Graphic3d_Group::SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectFil
     ( (CTX->BackMaterial ()).ReflectionMode
     (Graphic3d_TOR_EMISSION) ? 1 : 0 );
 
-  // Material type                                
+  // Material type
   //JR/Hp
   const Graphic3d_MaterialAspect ama = CTX->BackMaterial () ;
   Standard_Boolean amt = ama.MaterialType(Graphic3d_MATERIAL_PHYSIC) ;
   MyCGroup.ContextFillArea.Back.IsPhysic = ( amt ? 1 : 0 );
 
-  // Specular color                                       
+  // Specular color
   MyCGroup.ContextFillArea.Back.ColorSpec.r       =
     float (((CTX->BackMaterial ()).SpecularColor ()).Red ());
   MyCGroup.ContextFillArea.Back.ColorSpec.g       =
@@ -189,7 +189,7 @@ void Graphic3d_Group::SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectFil
   MyCGroup.ContextFillArea.Back.ColorEms.b        =
     float (((CTX->BackMaterial ()).EmissiveColor ()).Blue ());
 
-  MyCGroup.ContextFillArea.Back.EnvReflexion = 
+  MyCGroup.ContextFillArea.Back.EnvReflexion =
     float ((CTX->BackMaterial ()).EnvReflexion());
 
   /*** Front Material ***/
@@ -205,9 +205,9 @@ void Graphic3d_Group::SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectFil
   MyCGroup.ContextFillArea.Front.Transparency     =
     float ((CTX->FrontMaterial ()).Transparency ());
   MyCGroup.ContextFillArea.Front.Emission =
-    float ((CTX->FrontMaterial ()).Emissive ());    
+    float ((CTX->FrontMaterial ()).Emissive ());
 
-  // Reflection mode      
+  // Reflection mode
   MyCGroup.ContextFillArea.Front.IsAmbient        =
     ( (CTX->FrontMaterial ()).ReflectionMode
     (Graphic3d_TOR_AMBIENT) ? 1 : 0 );
@@ -227,7 +227,7 @@ void Graphic3d_Group::SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectFil
   Standard_Boolean amty = amas.MaterialType(Graphic3d_MATERIAL_PHYSIC) ;
   MyCGroup.ContextFillArea.Front.IsPhysic = ( amty ? 1 : 0 );
 
-  // Specular color                               
+  // Specular color
   MyCGroup.ContextFillArea.Front.ColorSpec.r      =
     float (((CTX->FrontMaterial ()).SpecularColor ()).Red ());
   MyCGroup.ContextFillArea.Front.ColorSpec.g      =
@@ -235,7 +235,7 @@ void Graphic3d_Group::SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectFil
   MyCGroup.ContextFillArea.Front.ColorSpec.b      =
     float (((CTX->FrontMaterial ()).SpecularColor ()).Blue ());
 
-  // Ambient color                                
+  // Ambient color
   MyCGroup.ContextFillArea.Front.ColorAmb.r       =
     float (((CTX->FrontMaterial ()).AmbientColor ()).Red ());
   MyCGroup.ContextFillArea.Front.ColorAmb.g       =
@@ -243,7 +243,7 @@ void Graphic3d_Group::SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectFil
   MyCGroup.ContextFillArea.Front.ColorAmb.b       =
     float (((CTX->FrontMaterial ()).AmbientColor ()).Blue ());
 
-  // Diffuse color                                
+  // Diffuse color
   MyCGroup.ContextFillArea.Front.ColorDif.r       =
     float (((CTX->FrontMaterial ()).DiffuseColor ()).Red ());
   MyCGroup.ContextFillArea.Front.ColorDif.g       =
@@ -259,31 +259,23 @@ void Graphic3d_Group::SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectFil
   MyCGroup.ContextFillArea.Front.ColorEms.b       =
     float (((CTX->FrontMaterial ()).EmissiveColor ()).Blue ());
 
-  MyCGroup.ContextFillArea.Front.EnvReflexion = 
+  MyCGroup.ContextFillArea.Front.EnvReflexion =
     float ((CTX->FrontMaterial ()).EnvReflexion());
 
   MyCGroup.ContextFillArea.IsDef  = 1; // Definition material ok
 
   /*** Texture map ***/
-  Handle(Graphic3d_TextureMap) GroupTextureMap = CTX->TextureMap();
-  if (! GroupTextureMap.IsNull() ) {
-    MyCGroup.ContextFillArea.Texture.TexId = GroupTextureMap->TextureId();
-    MyCGroup.ContextFillArea.Texture.doTextureMap =
-      CTX->TextureMapState () ? 1 : 0;
-  }
-  else {
-    MyCGroup.ContextFillArea.Texture.TexId = -1;
-    MyCGroup.ContextFillArea.Texture.doTextureMap = 0;
-  }
+  MyCGroup.ContextFillArea.Texture.TextureMap   = CTX->TextureMap();
+  MyCGroup.ContextFillArea.Texture.doTextureMap = CTX->TextureMapState() ? 1 : 0;
 
-  // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets 
+  // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
   Standard_Integer aPolyMode;
   Standard_ShortReal    aPolyFactor, aPolyUnits;
   CTX->PolygonOffsets(aPolyMode, aPolyFactor, aPolyUnits);
   MyCGroup.ContextFillArea.PolygonOffsetMode   = aPolyMode;
   MyCGroup.ContextFillArea.PolygonOffsetFactor = aPolyFactor;
   MyCGroup.ContextFillArea.PolygonOffsetUnits  = aPolyUnits;
-  // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets 
+  // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
 
   int noinsert = 1;
   MyGraphicDriver->FaceContextGroup (MyCGroup, noinsert);
@@ -361,8 +353,8 @@ void Graphic3d_Group::SetGroupPrimitivesAspect (const Handle(Graphic3d_AspectTex
   MyCGroup.ContextText.ColorSubTitle.r    = float (Rs);
   MyCGroup.ContextText.ColorSubTitle.g    = float (Gs);
   MyCGroup.ContextText.ColorSubTitle.b    = float (Bs);
-  MyCGroup.ContextText.TextZoomable   = ATextZoomable;   
-  MyCGroup.ContextText.TextAngle    = float (ATextAngle);   
+  MyCGroup.ContextText.TextZoomable   = ATextZoomable;
+  MyCGroup.ContextText.TextAngle    = float (ATextAngle);
   MyCGroup.ContextText.TextFontAspect   = (int)ATextFontAspect;
 
   MyCGroup.ContextText.IsDef      = 1;
@@ -423,7 +415,7 @@ void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectFillArea
   MyCGroup.ContextFillArea.IntColor.r     = float (R);
   MyCGroup.ContextFillArea.IntColor.g     = float (G);
   MyCGroup.ContextFillArea.IntColor.b     = float (B);
-#ifdef OCC1174    
+#ifdef OCC1174
   if ( CTX->Distinguish() )
     BackIntColor.Values( R, G, B, Quantity_TOC_RGB );
 #endif
@@ -458,9 +450,9 @@ void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectFillArea
   MyCGroup.ContextFillArea.Back.Transparency      =
     float ((CTX->BackMaterial ()).Transparency ());
   MyCGroup.ContextFillArea.Back.Emission  =
-    float ((CTX->BackMaterial ()).Emissive ());     
+    float ((CTX->BackMaterial ()).Emissive ());
 
-  // Reflection mode      
+  // Reflection mode
   MyCGroup.ContextFillArea.Back.IsAmbient =
     ( (CTX->BackMaterial ()).ReflectionMode
     (Graphic3d_TOR_AMBIENT) ? 1 : 0 );
@@ -480,7 +472,7 @@ void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectFillArea
   Standard_Boolean amt = ama.MaterialType(Graphic3d_MATERIAL_PHYSIC) ;
   MyCGroup.ContextFillArea.Back.IsPhysic = ( amt ? 1 : 0 );
 
-  // Specular color                               
+  // Specular color
   MyCGroup.ContextFillArea.Back.ColorSpec.r       =
     float (((CTX->BackMaterial ()).SpecularColor ()).Red ());
   MyCGroup.ContextFillArea.Back.ColorSpec.g       =
@@ -488,7 +480,7 @@ void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectFillArea
   MyCGroup.ContextFillArea.Back.ColorSpec.b       =
     float (((CTX->BackMaterial ()).SpecularColor ()).Blue ());
 
-  // Ambient color                                
+  // Ambient color
   MyCGroup.ContextFillArea.Back.ColorAmb.r        =
     float (((CTX->BackMaterial ()).AmbientColor ()).Red ());
   MyCGroup.ContextFillArea.Back.ColorAmb.g        =
@@ -496,7 +488,7 @@ void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectFillArea
   MyCGroup.ContextFillArea.Back.ColorAmb.b        =
     float (((CTX->BackMaterial ()).AmbientColor ()).Blue ());
 
-  // Diffuse color                                
+  // Diffuse color
   MyCGroup.ContextFillArea.Back.ColorDif.r        =
     float (((CTX->BackMaterial ()).DiffuseColor ()).Red ());
   MyCGroup.ContextFillArea.Back.ColorDif.g        =
@@ -512,7 +504,7 @@ void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectFillArea
   MyCGroup.ContextFillArea.Back.ColorEms.b        =
     float (((CTX->BackMaterial ()).EmissiveColor ()).Blue ());
 
-  MyCGroup.ContextFillArea.Back.EnvReflexion = 
+  MyCGroup.ContextFillArea.Back.EnvReflexion =
     float ((CTX->BackMaterial ()).EnvReflexion());
 
   /*** Front Material ***/
@@ -528,9 +520,9 @@ void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectFillArea
   MyCGroup.ContextFillArea.Front.Transparency     =
     float ((CTX->FrontMaterial ()).Transparency ());
   MyCGroup.ContextFillArea.Front.Emission =
-    float ((CTX->FrontMaterial ()).Emissive ());    
+    float ((CTX->FrontMaterial ()).Emissive ());
 
-  // Reflection mode      
+  // Reflection mode
   MyCGroup.ContextFillArea.Front.IsAmbient        =
     ( (CTX->FrontMaterial ()).ReflectionMode
     (Graphic3d_TOR_AMBIENT) ? 1 : 0 );
@@ -550,7 +542,7 @@ void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectFillArea
   Standard_Boolean amty = amas.MaterialType(Graphic3d_MATERIAL_PHYSIC) ;
   MyCGroup.ContextFillArea.Front.IsPhysic = ( amty ? 1 : 0 );
 
-  // Specular color                               
+  // Specular color
   MyCGroup.ContextFillArea.Front.ColorSpec.r      =
     float (((CTX->FrontMaterial ()).SpecularColor ()).Red ());
   MyCGroup.ContextFillArea.Front.ColorSpec.g      =
@@ -558,7 +550,7 @@ void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectFillArea
   MyCGroup.ContextFillArea.Front.ColorSpec.b      =
     float (((CTX->FrontMaterial ()).SpecularColor ()).Blue ());
 
-  // Ambient color                                
+  // Ambient color
   MyCGroup.ContextFillArea.Front.ColorAmb.r       =
     float (((CTX->FrontMaterial ()).AmbientColor ()).Red ());
   MyCGroup.ContextFillArea.Front.ColorAmb.g       =
@@ -566,7 +558,7 @@ void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectFillArea
   MyCGroup.ContextFillArea.Front.ColorAmb.b       =
     float (((CTX->FrontMaterial ()).AmbientColor ()).Blue ());
 
-  // Diffuse color                                
+  // Diffuse color
   MyCGroup.ContextFillArea.Front.ColorDif.r       =
     float (((CTX->FrontMaterial ()).DiffuseColor ()).Red ());
   MyCGroup.ContextFillArea.Front.ColorDif.g       =
@@ -582,21 +574,15 @@ void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectFillArea
   MyCGroup.ContextFillArea.Front.ColorEms.b       =
     float (((CTX->FrontMaterial ()).EmissiveColor ()).Blue ());
 
-  MyCGroup.ContextFillArea.Front.EnvReflexion = 
+  MyCGroup.ContextFillArea.Front.EnvReflexion =
     float ((CTX->FrontMaterial ()).EnvReflexion());
 
   MyCGroup.ContextFillArea.IsDef  = 1; // Material definition ok
 
-  Handle(Graphic3d_TextureMap) GroupTextureMap = CTX->TextureMap();
-  if (! GroupTextureMap.IsNull() )
-    MyCGroup.ContextFillArea.Texture.TexId = GroupTextureMap->TextureId();
-  else
-    MyCGroup.ContextFillArea.Texture.TexId = -1;
-
-  MyCGroup.ContextFillArea.Texture.doTextureMap =
-    CTX->TextureMapState () ? 1 : 0;
+  MyCGroup.ContextFillArea.Texture.TextureMap   = CTX->TextureMap();
+  MyCGroup.ContextFillArea.Texture.doTextureMap = CTX->TextureMapState() ? 1 : 0;
 
-  // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets 
+  // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
   Standard_Integer aPolyMode;
   Standard_ShortReal    aPolyFactor, aPolyUnits;
   CTX->PolygonOffsets(aPolyMode, aPolyFactor, aPolyUnits);
@@ -661,7 +647,7 @@ void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectText3d)&
   Quantity_Color AColor;
   Aspect_TypeOfStyleText  AStyle;
   Aspect_TypeOfDisplayText ADisplayType;
-  Quantity_Color AColorSubTitle;  
+  Quantity_Color AColorSubTitle;
   Standard_Boolean ATextZoomable;
   Standard_Real ATextAngle;
   Font_FontAspect ATextFontAspect;
@@ -681,9 +667,9 @@ void Graphic3d_Group::SetPrimitivesAspect (const Handle(Graphic3d_AspectText3d)&
   MyCGroup.ContextText.ColorSubTitle.r    = float (Rs);
   MyCGroup.ContextText.ColorSubTitle.g    = float (Gs);
   MyCGroup.ContextText.ColorSubTitle.b    = float (Bs);
-  MyCGroup.ContextText.TextZoomable   = ATextZoomable;  
-  MyCGroup.ContextText.TextAngle    = float (ATextAngle);   
-  MyCGroup.ContextText.TextFontAspect   = (int)ATextFontAspect;   
+  MyCGroup.ContextText.TextZoomable   = ATextZoomable;
+  MyCGroup.ContextText.TextAngle    = float (ATextAngle);
+  MyCGroup.ContextText.TextFontAspect   = (int)ATextFontAspect;
   MyCGroup.ContextText.IsDef              = 1;
 
   int noinsert    = 0;
@@ -703,7 +689,7 @@ Standard_Boolean Graphic3d_Group::IsGroupPrimitivesAspectSet (const Graphic3d_Gr
         case Graphic3d_ASPECT_FILL_AREA: return MyCGroup.ContextFillArea.IsSet;
         default: return Standard_False;
     }
-} 
+}
 
 
 void Graphic3d_Group::GroupPrimitivesAspect (const Handle(Graphic3d_AspectLine3d)& CTXL, const Handle(Graphic3d_AspectText3d)& CTXT, const Handle(Graphic3d_AspectMarker3d)& CTXM, const Handle(Graphic3d_AspectFillArea3d)& CTXF) const {
@@ -947,19 +933,21 @@ void Graphic3d_Group::GroupPrimitivesAspect (const Handle(Graphic3d_AspectLine3d
     else
       CTXF->AllowBackFace ();
     // Texture
-    // Pb sur les textures
-    //if (MyCGroup.ContextFillArea.Texture.TexId == -1)
-    //else
+    CTXF->SetTextureMap (MyCGroup.ContextFillArea.Texture.TextureMap);
     if (MyCGroup.ContextFillArea.Texture.doTextureMap == 1)
-      CTXF->SetTextureMapOn ();
+    {
+      CTXF->SetTextureMapOn();
+    }
     else
-      CTXF->SetTextureMapOff ();
+    {
+      CTXF->SetTextureMapOff();
+    }
 
-    // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets 
-    CTXF->SetPolygonOffsets(MyCGroup.ContextFillArea.PolygonOffsetMode, 
+    // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
+    CTXF->SetPolygonOffsets(MyCGroup.ContextFillArea.PolygonOffsetMode,
       MyCGroup.ContextFillArea.PolygonOffsetFactor,
       MyCGroup.ContextFillArea.PolygonOffsetUnits);
-    // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets 
+    // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
   }
   else {
     // Interior
@@ -1097,16 +1085,21 @@ void Graphic3d_Group::GroupPrimitivesAspect (const Handle(Graphic3d_AspectLine3d
     else
       CTXF->AllowBackFace ();
     // Texture
+    CTXF->SetTextureMap (MyCGroup.Struct->ContextFillArea.Texture.TextureMap);
     if (MyCGroup.Struct->ContextFillArea.Texture.doTextureMap == 1)
-      CTXF->SetTextureMapOn ();
+    {
+      CTXF->SetTextureMapOn();
+    }
     else
-      CTXF->SetTextureMapOff ();
+    {
+      CTXF->SetTextureMapOff();
+    }
 
-    // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets 
-    CTXF->SetPolygonOffsets(MyCGroup.Struct->ContextFillArea.PolygonOffsetMode, 
+    // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
+    CTXF->SetPolygonOffsets(MyCGroup.Struct->ContextFillArea.PolygonOffsetMode,
       MyCGroup.Struct->ContextFillArea.PolygonOffsetFactor,
       MyCGroup.Struct->ContextFillArea.PolygonOffsetUnits);
-    // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets 
+    // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
   }
   CTXF->SetInteriorStyle (AStyle);
   CTXF->SetInteriorColor (AnIntColor);
index d142af8..027d9f1 100755 (executable)
@@ -971,16 +971,13 @@ is
        ---Purpose: Updates the c structure associated to <me>.
        ---Category: Private methods
 
-       CStructure ( me )
-               returns Address from Standard
+       CStructure ( me : mutable )
+               returns CStructure from Graphic3d
                is static;
        ---Level: Internal
        ---Purpose: Returns the c structure associated to <me>.
        ---Category: Private methods
-
---\f
-
---\f
+       ---C++: return *
 
 fields
 
index 781c557..8f09771 100755 (executable)
@@ -742,18 +742,14 @@ void Graphic3d_Structure::GraphicClear (const Standard_Boolean WithDestruction)
   }
 }
 
-void Graphic3d_Structure::GraphicConnect (const Handle(Graphic3d_Structure)& ADaughter) {
-
-  MyGraphicDriver->Connect
-    (MyCStructure, *((CALL_DEF_STRUCTURE *)ADaughter->CStructure()));
-
+void Graphic3d_Structure::GraphicConnect (const Handle(Graphic3d_Structure)& theDaughter)
+{
+  MyGraphicDriver->Connect (MyCStructure, theDaughter->MyCStructure);
 }
 
-void Graphic3d_Structure::GraphicDisconnect (const Handle(Graphic3d_Structure)& ADaughter) {
-
-  MyGraphicDriver->Disconnect
-    (MyCStructure, *((CALL_DEF_STRUCTURE *)ADaughter->CStructure()));
-
+void Graphic3d_Structure::GraphicDisconnect (const Handle(Graphic3d_Structure)& theDaughter)
+{
+  MyGraphicDriver->Disconnect (MyCStructure, theDaughter->MyCStructure);
 }
 
 Handle(Graphic3d_AspectLine3d) Graphic3d_Structure::Line3dAspect () const {
@@ -996,13 +992,15 @@ Graphic3d_MATERIAL_PHYSIC : Graphic3d_MATERIAL_ASPECT;
   else
     CTXF->AllowBackFace ();
   // Texture
-  // Pb sur les textures
-  //if (MyCStructure.ContextFillArea.Texture.TexId == -1)
-  //else
+  CTXF->SetTextureMap (MyCStructure.ContextFillArea.Texture.TextureMap);
   if (MyCStructure.ContextFillArea.Texture.doTextureMap == 1)
-    CTXF->SetTextureMapOn ();
+  {
+    CTXF->SetTextureMapOn();
+  }
   else
-    CTXF->SetTextureMapOff ();
+  {
+    CTXF->SetTextureMapOff();
+  }
 #ifdef G003
   Aspect_TypeOfDegenerateModel dMode = Aspect_TypeOfDegenerateModel(
     MyCStructure.ContextFillArea.DegenerationMode);
@@ -1245,13 +1243,8 @@ void Graphic3d_Structure::SetPrimitivesAspect (const Handle(Graphic3d_AspectFill
 
   MyCStructure.ContextFillArea.IsDef      = 1; // Definition material ok
 
-  Handle(Graphic3d_TextureMap) TempTextureMap = CTX->TextureMap();
-  if (! TempTextureMap.IsNull() )
-    MyCStructure.ContextFillArea.Texture.TexId = TempTextureMap->TextureId();
-  else
-    MyCStructure.ContextFillArea.Texture.TexId = -1;
-
-  MyCStructure.ContextFillArea.Texture.doTextureMap = CTX->TextureMapState() ? 1:0;
+  MyCStructure.ContextFillArea.Texture.TextureMap   = CTX->TextureMap();
+  MyCStructure.ContextFillArea.Texture.doTextureMap = CTX->TextureMapState() ? 1 : 0;
 
   // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
   Standard_Integer aPolyMode;
@@ -2322,13 +2315,8 @@ void Graphic3d_Structure::UpdateStructure (const Handle(Graphic3d_AspectLine3d)&
   MyCStructure.ContextFillArea.Front.EnvReflexion =
     float ((CTXF->FrontMaterial ()).EnvReflexion());
 
-  Handle(Graphic3d_TextureMap) TempTextureMap = CTXF->TextureMap();
-  if (! TempTextureMap.IsNull() )
-    MyCStructure.ContextFillArea.Texture.TexId = TempTextureMap->TextureId();
-  else
-    MyCStructure.ContextFillArea.Texture.TexId = -1;
-
-  MyCStructure.ContextFillArea.Texture.doTextureMap = CTXF->TextureMapState() ? 1:0;
+  MyCStructure.ContextFillArea.Texture.TextureMap   = CTXF->TextureMap();
+  MyCStructure.ContextFillArea.Texture.doTextureMap = CTXF->TextureMapState() ? 1 : 0;
 
   // OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets
   Standard_Integer aPolyMode;
@@ -2517,10 +2505,14 @@ Standard_Boolean Graphic3d_Structure::HLRValidation () const {
 
 }
 
-Standard_Address Graphic3d_Structure::CStructure () const {
-
-  return Standard_Address (&MyCStructure);
+//=======================================================================
+//function : CStructure
+//purpose  :
+//=======================================================================
 
+Graphic3d_CStructure* Graphic3d_Structure::CStructure()
+{
+  return &MyCStructure;
 }
 
 //=======================================================================
index 4956646..49ac7bc 100755 (executable)
 -- purpose or non-infringement. Please see the License for the specific terms
 -- and conditions governing the rights and limitations under the License.
 
--- Modified :   GG 10/01/2000 IMP
---              Add NumberOfTextures() and TextureName() methods
---             Add Name(),IsSmoothed() and ISModulate() methods
---             GG IMP140300
---             Add Repeat methods.
+deferred class Texture1D from Graphic3d
 
-deferred  class  Texture1D  from  Graphic3d  
-    
-inherits  TextureMap  from  Graphic3d
+inherits TextureMap from Graphic3d
 
-    ---Purpose:  This is an abstract class for managing 1D textures.
+  ---Purpose: This is an abstract class for managing 1D textures.
 
-uses  
-    TypeOfTexture  from  Graphic3d,
-    NameOfTexture1D  from  Graphic3d, 
-    StructureManager    from  Graphic3d 
+uses
+
+  TypeOfTexture   from Graphic3d,
+  NameOfTexture1D from Graphic3d,
+  AsciiString     from TCollection
 
 raises
-    OutOfRange from Standard
-
-is 
-    Initialize(SM      :  StructureManager  from  Graphic3d;
-              aFileName:  CString  from  Standard; 
-              aType    :  TypeOfTexture  from  Graphic3d);
-               
-    Initialize(SM      :  StructureManager  from  Graphic3d; 
-              aName    :  NameOfTexture1D  from  Graphic3d;
-              aType    :  TypeOfTexture  from  Graphic3d);
-     
-
-    Name(me) returns NameOfTexture1D from Graphic3d;
-    ---Purpose:
-    -- Returns the name of the predefined textures or NOT_1D_UNKNOWN
-    -- when the name is given as a filename.
-    ---Level: Public
-
-    NumberOfTextures(myclass) returns Integer from Standard;
-    ---Purpose:
-    -- Returns the number of predefined textures.
-    ---Level: Public
-
-    TextureName(myclass; aRank: Integer from Standard)
-        returns CString from Standard
-        raises OutOfRange from Standard;
-    ---Purpose:
-    -- Returns the name of the predefined texture of rank <aRank>
-    ---Trigger: when <aRank> is < 1 or > NumberOfTextures.
-    ---Level: Public
+
+  OutOfRange from Standard
+
+is
+
+  Initialize (theFileName : AsciiString from TCollection;
+              theType     : TypeOfTexture from Graphic3d);
+
+  Initialize (theName : NameOfTexture1D from Graphic3d;
+              theType : TypeOfTexture   from Graphic3d);
+
+  Name (me) returns NameOfTexture1D from Graphic3d;
+  ---Purpose:
+  -- Returns the name of the predefined textures or NOT_1D_UNKNOWN
+  -- when the name is given as a filename.
+  ---Level: Public
+
+  NumberOfTextures (myclass) returns Integer from Standard;
+  ---Purpose:
+  -- Returns the number of predefined textures.
+  ---Level: Public
+
+  TextureName (myclass; aRank: Integer from Standard)
+  returns AsciiString from TCollection
+  raises OutOfRange from Standard;
+  ---Purpose:
+  -- Returns the name of the predefined texture of rank <aRank>
+  ---Trigger: when <aRank> is < 1 or > NumberOfTextures.
+  ---Level: Public
 
 fields
-    myName: NameOfTexture1D from Graphic3d;
 
-end  Texture1D;
+  myName : NameOfTexture1D from Graphic3d;
+
+end Texture1D;
index 06be34f..059cb32 100755 (executable)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-// Modified    22-12-97 : FMN ; Ajout Modulate
-
-// Modified :   GG 10/01/2000 IMP 
-//              Adds Name(),NumberOfTextures() and TextureName() methods
-
 #include <Graphic3d_Texture1D.ixx>
-#include <stdlib.h>
-
 #include <TCollection_AsciiString.hxx>
-#include <OSD_Directory.hxx>
-#include <OSD_File.hxx>
-#include <OSD_Path.hxx>
 
-static const char *NameOfTexture_to_FileName[] = 
+static const char *NameOfTexture_to_FileName[] =
 {
   "1d_elevation.rgb"
 };
 
-
-static TCollection_AsciiString GetEnvir ( ) {
-
-  static Standard_Boolean IsDefined=Standard_False ;
-  static TCollection_AsciiString VarName;
-  if ( !IsDefined ) {
-    char *envir, *casroot ;
-    envir = getenv("CSF_MDTVTexturesDirectory") ;
-    
-    Standard_Boolean HasDefinition = Standard_False ;
-    if ( !envir ) { 
-      casroot  = getenv("CASROOT");
-      if ( casroot ) {
-       VarName = TCollection_AsciiString  (casroot);
-       VarName += "/src/Textures" ;
-       HasDefinition = Standard_True ;
-      }
-    } else {
-      VarName = TCollection_AsciiString  (envir);
-      HasDefinition = Standard_True ;
-    }
-    if ( HasDefinition ) {
-      OSD_Path aPath ( VarName );
-      OSD_Directory aDir(aPath);
-      if ( aDir.Exists () ) {
-       TCollection_AsciiString aTexture = VarName + "/2d_MatraDatavision.rgb" ;
-       OSD_File TextureFile ( aTexture );
-       if ( !TextureFile.Exists() ) {
-         cout << " CSF_MDTVTexturesDirectory or CASROOT not correctly setted " << endl;
-         cout << " not all files are found in : "<<VarName.ToCString() << endl;
-         Standard_Failure::Raise ( "CSF_MDTVTexturesDirectory or CASROOT not correctly setted " );
-       }
-      } else {
-       cout << " CSF_MDTVTexturesDirectory or CASROOT not correctly setted " << endl;
-       cout << " Directory : "<< VarName.ToCString() << " not exist " << endl;
-       Standard_Failure::Raise ( "CSF_MDTVTexturesDirectory or CASROOT not correctly setted " );
-      }      
-      return VarName ;
-    } else {
-      cout << " CSF_MDTVTexturesDirectory and CASROOT not setted " << endl;
-      cout << " one of these variable are mandatory to use this fonctionnality" << endl;
-      Standard_Failure::Raise ( "CSF_MDTVTexturesDirectory and CASROOT not setted " );
-
-    }
-    IsDefined = Standard_True ; 
-  }
-  return VarName ;
-}
-
-Graphic3d_Texture1D::Graphic3d_Texture1D(const Handle(Graphic3d_StructureManager)& SM,const Standard_CString FileName,const Graphic3d_TypeOfTexture Type)
-: Graphic3d_TextureMap(SM,"", FileName, Type),
-  myName(Graphic3d_NOT_1D_UNKNOWN)
+// =======================================================================
+// function : Graphic3d_Texture1D
+// purpose  :
+// =======================================================================
+Graphic3d_Texture1D::Graphic3d_Texture1D (const TCollection_AsciiString& theFileName,
+                                          const Graphic3d_TypeOfTexture  theType)
+: Graphic3d_TextureMap (theFileName, theType),
+  myName (Graphic3d_NOT_1D_UNKNOWN)
 {
 }
 
-
-Graphic3d_Texture1D::Graphic3d_Texture1D(const Handle(Graphic3d_StructureManager)& SM,const Graphic3d_NameOfTexture1D NOT, const Graphic3d_TypeOfTexture Type)
-: Graphic3d_TextureMap(SM, GetEnvir().ToCString(), NameOfTexture_to_FileName[NOT], Type),
-  myName(NOT)
+// =======================================================================
+// function : Graphic3d_Texture1D
+// purpose  :
+// =======================================================================
+Graphic3d_Texture1D::Graphic3d_Texture1D (const Graphic3d_NameOfTexture1D theNOT,
+                                          const Graphic3d_TypeOfTexture   theType)
+: Graphic3d_TextureMap (NameOfTexture_to_FileName[theNOT], theType),
+  myName (theNOT)
 {
+  myPath.SetTrek (Graphic3d_TextureRoot::TexturesFolder());
+  myTexId = TCollection_AsciiString ("Graphic3d_Texture1D_")
+          + NameOfTexture_to_FileName[theNOT];
 }
 
-Graphic3d_NameOfTexture1D Graphic3d_Texture1D::Name() const {
-
+// =======================================================================
+// function : Name
+// purpose  :
+// =======================================================================
+Graphic3d_NameOfTexture1D Graphic3d_Texture1D::Name() const
+{
   return myName;
 }
 
-Standard_Integer Graphic3d_Texture1D::NumberOfTextures() {
-
+// =======================================================================
+// function : NumberOfTextures
+// purpose  :
+// =======================================================================
+Standard_Integer Graphic3d_Texture1D::NumberOfTextures()
+{
   return sizeof(NameOfTexture_to_FileName)/sizeof(char*);
 }
 
-Standard_CString Graphic3d_Texture1D::TextureName(const Standard_Integer aRank)
- {
-
-  if( aRank < 1 || aRank > NumberOfTextures() )
-        Standard_OutOfRange::Raise(" BAD index of texture");
-  TCollection_AsciiString filename(NameOfTexture_to_FileName[aRank-1]);
-  Standard_Integer i = filename.SearchFromEnd(".");
+// =======================================================================
+// function : TextureName
+// purpose  :
+// =======================================================================
+TCollection_AsciiString Graphic3d_Texture1D::TextureName (const Standard_Integer theRank)
+{
+  if (theRank < 1 || theRank > NumberOfTextures())
+  {
+    Standard_OutOfRange::Raise ("BAD index of texture");
+  }
 
-  static TCollection_AsciiString name;
-  name = filename.SubString(4,i-1);
-  return name.ToCString();
+  TCollection_AsciiString aFileName (NameOfTexture_to_FileName[theRank - 1]);
+  Standard_Integer i = aFileName.SearchFromEnd (".");
+  return aFileName.SubString (4, i - 1);
 }
-
index e121aa2..6da671f 100755 (executable)
 -- purpose or non-infringement. Please see the License for the specific terms
 -- and conditions governing the rights and limitations under the License.
 
+class Texture1Dmanual from Graphic3d
 
-class  Texture1Dmanual  from  Graphic3d 
+inherits Texture1D from Graphic3d
 
-inherits  Texture1D  from  Graphic3d  
----Purpose: This class provides the implementation of
--- a manual 1D texture.
--- you MUST provides texture coordinates on
--- your facets if you want to see your
--- texture. 
+---Purpose: This class provides the implementation of a manual 1D texture.
+-- you MUST provides texture coordinates on your facets if you want to see your texture. 
 
+uses
 
-uses 
-    NameOfTexture1D  from  Graphic3d, 
-    StructureManager    from  Graphic3d
+  NameOfTexture1D from Graphic3d,
+  AsciiString     from TCollection
 
-is 
-    Create(SM  :  StructureManager  from  Graphic3d; 
-           FileName  :  CString  from  Standard)  returns  mutable  Texture1Dmanual  from  Graphic3d; 
-    ---Purpose: Creates a texture from the file FileName.
+is
 
+  Create (theFileName : AsciiString from TCollection) returns mutable Texture1Dmanual from Graphic3d;
+  ---Purpose: Creates a texture from the file FileName.
 
-    Create(SM  :  StructureManager  from  Graphic3d; 
-          NOT  :  NameOfTexture1D  from  Graphic3d)  returns  mutable  Texture1Dmanual  from  Graphic3d;
-    ---Purpose: Create a texture from a predefined texture name set.
-
-end  Texture1Dmanual; 
+  Create (theNOT : NameOfTexture1D from Graphic3d) returns mutable Texture1Dmanual from Graphic3d;
+  ---Purpose: Create a texture from a predefined texture name set.
 
+end Texture1Dmanual;
index 35a530f..d6719bd 100755 (executable)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
-
 #include <Graphic3d_Texture1Dmanual.ixx>
 #include <Graphic3d_TypeOfTextureMode.hxx>
 
-Graphic3d_Texture1Dmanual::Graphic3d_Texture1Dmanual(const Handle(Graphic3d_StructureManager)& SM,const Standard_CString FileName)
-: Graphic3d_Texture1D(SM, FileName, Graphic3d_TOT_1D)
+// =======================================================================
+// function : Graphic3d_Texture1Dmanual
+// purpose  :
+// =======================================================================
+Graphic3d_Texture1Dmanual::Graphic3d_Texture1Dmanual (const TCollection_AsciiString& theFileName)
+: Graphic3d_Texture1D (theFileName, Graphic3d_TOT_1D)
 {
-  MyCInitTexture.doModulate = 0;
-  MyCInitTexture.doRepeat = 0;
-  MyCInitTexture.Mode = (int)Graphic3d_TOTM_MANUAL;
-  MyCInitTexture.doLinear = 0;
-  MyCInitTexture.sx = 1.0F;
-  MyCInitTexture.sy = 1.0F;
-  MyCInitTexture.tx = 0.0F;
-  MyCInitTexture.ty = 0.0F;
-  MyCInitTexture.angle = 0.0F;
-  MyCInitTexture.sparams[0] = 0.0F;
-  MyCInitTexture.sparams[1] = 0.0F;
-  MyCInitTexture.sparams[2] = 0.0F;
-  MyCInitTexture.sparams[3] = 0.0F;
-  MyCInitTexture.tparams[0] = 0.0F;
-  MyCInitTexture.tparams[1] = 0.0F;
-  MyCInitTexture.tparams[2] = 0.0F;
-  MyCInitTexture.tparams[3] = 0.0F;
-  Update();
+  //
 }
 
-
-Graphic3d_Texture1Dmanual::Graphic3d_Texture1Dmanual(const Handle(Graphic3d_StructureManager)& SM,const Graphic3d_NameOfTexture1D NOT)
-: Graphic3d_Texture1D(SM, NOT, Graphic3d_TOT_1D)
+// =======================================================================
+// function : Graphic3d_Texture1Dmanual
+// purpose  :
+// =======================================================================
+Graphic3d_Texture1Dmanual::Graphic3d_Texture1Dmanual (const Graphic3d_NameOfTexture1D theNOT)
+: Graphic3d_Texture1D (theNOT, Graphic3d_TOT_1D)
 {
-  MyCInitTexture.doModulate = 0;
-  MyCInitTexture.doRepeat = 0;
-  MyCInitTexture.Mode = (int)Graphic3d_TOTM_MANUAL;
-  MyCInitTexture.doLinear = 0;
-  MyCInitTexture.sx = 1.0F;
-  MyCInitTexture.sy = 1.0F;
-  MyCInitTexture.tx = 0.0F;
-  MyCInitTexture.ty = 0.0F;
-  MyCInitTexture.angle = 0.0F;
-  MyCInitTexture.sparams[0] = 0.0F;
-  MyCInitTexture.sparams[1] = 0.0F;
-  MyCInitTexture.sparams[2] = 0.0F;
-  MyCInitTexture.sparams[3] = 0.0F;
-  MyCInitTexture.tparams[0] = 0.0F;
-  MyCInitTexture.tparams[1] = 0.0F;
-  MyCInitTexture.tparams[2] = 0.0F;
-  MyCInitTexture.tparams[3] = 0.0F;
-  Update();
+  //
 }
index 6480b9e..44274e1 100755 (executable)
 -- purpose or non-infringement. Please see the License for the specific terms
 -- and conditions governing the rights and limitations under the License.
 
+class Texture1Dsegment from Graphic3d
 
-class  Texture1Dsegment  from  Graphic3d 
-    
-inherits  Texture1D  from  Graphic3d  
+inherits Texture1D from Graphic3d
 
-    ---Purpose:  This class provides the implementation
-    -- of a 1D texture applyable along a segment.
-    -- You might use the SetSegment() method
-    -- to set the way the texture is "streched" on facets. 
+  ---Purpose:  This class provides the implementation
+  -- of a 1D texture applyable along a segment.
+  -- You might use the SetSegment() method
+  -- to set the way the texture is "streched" on facets.
 
+uses
 
-uses 
-    NameOfTexture1D  from  Graphic3d, 
-    StructureManager      from  Graphic3d 
+  NameOfTexture1D from Graphic3d,
+  AsciiString     from TCollection
 
-is 
-    Create(VM  :  StructureManager  from  Graphic3d; 
-          FileName  :  CString  from  Standard)  returns  mutable  Texture1Dsegment  from  Graphic3d; 
-    ---Purpose: Creates a texture from a file
+is
 
+  Create (theFileName : AsciiString from TCollection) returns mutable Texture1Dsegment from Graphic3d;
+  ---Purpose: Creates a texture from a file
 
-    Create(VM  :  StructureManager  from  Graphic3d; 
-          NOT  :  NameOfTexture1D  from  Graphic3d)  returns  mutable  Texture1Dsegment  from  Graphic3d;  
-    ---Purpose: Creates a texture from a predefined texture name set.
-     
-    SetSegment(me  :  mutable; 
-              X1,Y1,Z1  :  ShortReal  from  Standard; 
-              X2,Y2,Z2  :  ShortReal  from  Standard);
-    ---Purpose: Sets the texture application bounds. Defines the way
-    -- the texture is stretched across facets.
-    -- Default values are <0.0, 0.0, 0.0> , <0.0, 0.0, 1.0>
+  Create (theNOT : NameOfTexture1D from Graphic3d) returns mutable Texture1Dsegment from Graphic3d;
+  ---Purpose: Creates a texture from a predefined texture name set.
 
-  
-    --
-    -- inquire methods
-    --
-    Segment(me;
-            X1,Y1,Z1, X2,Y2,Z2 : out ShortReal from Standard);
-    ---Purpose: Returns the values of the current segment X1, Y1, Z1 , X2, Y2, Z2.
-    
-fields    
-    MyX1,MyY1,MyZ1  :  ShortReal  from  Standard; 
-    MyX2,MyY2,MyZ2  :  ShortReal  from  Standard;
-      
-end  Texture1Dsegment; 
+  SetSegment (me : mutable;
+              theX1, theY1, theZ1 : ShortReal from Standard;
+              theX2, theY2, theZ2 : ShortReal from Standard);
+  ---Purpose: Sets the texture application bounds. Defines the way
+  -- the texture is stretched across facets.
+  -- Default values are <0.0, 0.0, 0.0> , <0.0, 0.0, 1.0>
+
+  --
+  -- inquire methods
+  --
+  Segment (me;
+           theX1, theY1, theZ1 : out ShortReal from Standard;
+           theX2, theY2, theZ2 : out ShortReal from Standard);
+  ---Purpose: Returns the values of the current segment X1, Y1, Z1 , X2, Y2, Z2.
 
+fields
+
+  myX1, myY1, myZ1 : ShortReal from Standard;
+  myX2, myY2, myZ2 : ShortReal from Standard;
+      
+end  Texture1Dsegment;
index a28e932..893dc95 100755 (executable)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #include <Graphic3d_Texture1Dsegment.ixx>
 #include <Graphic3d_TypeOfTextureMode.hxx>
+#include <Graphic3d_TextureParams.hxx>
 
-
-Graphic3d_Texture1Dsegment::Graphic3d_Texture1Dsegment(const Handle(Graphic3d_StructureManager)& SM,const Standard_CString FileName)
-: Graphic3d_Texture1D(SM, FileName, Graphic3d_TOT_1D)
+// =======================================================================
+// function : Graphic3d_Texture1Dsegment
+// purpose  :
+// =======================================================================
+Graphic3d_Texture1Dsegment::Graphic3d_Texture1Dsegment (const TCollection_AsciiString& theFileName)
+: Graphic3d_Texture1D (theFileName, Graphic3d_TOT_1D),
+  myX1 (0.0f),
+  myY1 (0.0f),
+  myZ1 (0.0f),
+  myX2 (0.0f),
+  myY2 (0.0f),
+  myZ2 (0.0f)
 {
-  MyCInitTexture.doModulate = 0;
-  MyCInitTexture.doRepeat = 1;
-  MyCInitTexture.Mode = (int)Graphic3d_TOTM_OBJECT;
-  MyCInitTexture.doLinear = 0;
-  MyCInitTexture.sx = 1.0F;
-  MyCInitTexture.sy = 1.0F;
-  MyCInitTexture.tx = 0.0F;
-  MyCInitTexture.ty = 0.0F;
-  MyCInitTexture.angle = 0.0F;
-  MyCInitTexture.sparams[0] = 0.0F;
-  MyCInitTexture.sparams[1] = 0.0F;
-  MyCInitTexture.sparams[2] = 1.0F;
-  MyCInitTexture.sparams[3] = 0.0F;
-  MyCInitTexture.tparams[0] = 0.0F;
-  MyCInitTexture.tparams[1] = 0.0F;
-  MyCInitTexture.tparams[2] = 0.0F;
-  MyCInitTexture.tparams[3] = 0.0F;
-  Update();
+  myParams->SetRepeat (Standard_True);
+  myParams->SetGenMode (Graphic3d_TOTM_OBJECT,
+                        Graphic3d_Vec4 (0.0f, 0.0f, 1.0f, 0.0f),
+                        Graphic3d_Vec4 (0.0f, 0.0f, 0.0f, 0.0f));
 }
 
-
-Graphic3d_Texture1Dsegment::Graphic3d_Texture1Dsegment(const Handle(Graphic3d_StructureManager)& SM,const Graphic3d_NameOfTexture1D NOT)
-: Graphic3d_Texture1D(SM, NOT, Graphic3d_TOT_1D)
+// =======================================================================
+// function : Graphic3d_Texture1Dsegment
+// purpose  :
+// =======================================================================
+Graphic3d_Texture1Dsegment::Graphic3d_Texture1Dsegment (const Graphic3d_NameOfTexture1D theNOT)
+: Graphic3d_Texture1D (theNOT, Graphic3d_TOT_1D),
+  myX1 (0.0f),
+  myY1 (0.0f),
+  myZ1 (0.0f),
+  myX2 (0.0f),
+  myY2 (0.0f),
+  myZ2 (0.0f)
 {
-  MyCInitTexture.doModulate = 0;
-  MyCInitTexture.doRepeat = 1;
-  MyCInitTexture.Mode = (int)Graphic3d_TOTM_OBJECT;
-  MyCInitTexture.doLinear = 0;
-  MyCInitTexture.sx = 1.0F;
-  MyCInitTexture.sy = 1.0F;
-  MyCInitTexture.tx = 0.0F;
-  MyCInitTexture.ty = 0.0F;
-  MyCInitTexture.angle = 0.0F;
-  MyCInitTexture.sparams[0] = 0.0F;
-  MyCInitTexture.sparams[1] = 0.0F;
-  MyCInitTexture.sparams[2] = 1.0F;
-  MyCInitTexture.sparams[3] = 0.0F;
-  MyCInitTexture.tparams[0] = 0.0F;
-  MyCInitTexture.tparams[1] = 0.0F;
-  MyCInitTexture.tparams[2] = 0.0F;
-  MyCInitTexture.tparams[3] = 0.0F;
-  Update();
+  myParams->SetRepeat (Standard_True);
+  myParams->SetGenMode (Graphic3d_TOTM_OBJECT,
+                        Graphic3d_Vec4 (0.0f, 0.0f, 1.0f, 0.0f),
+                        Graphic3d_Vec4 (0.0f, 0.0f, 0.0f, 0.0f));
 }
 
-
-void Graphic3d_Texture1Dsegment::SetSegment(const Standard_ShortReal X1,const Standard_ShortReal Y1,const Standard_ShortReal Z1,const Standard_ShortReal X2,const Standard_ShortReal Y2,const Standard_ShortReal Z2) 
+// =======================================================================
+// function : SetSegment
+// purpose  :
+// =======================================================================
+void Graphic3d_Texture1Dsegment::SetSegment (const Standard_ShortReal X1,
+                                             const Standard_ShortReal Y1,
+                                             const Standard_ShortReal Z1,
+                                             const Standard_ShortReal X2,
+                                             const Standard_ShortReal Y2,
+                                             const Standard_ShortReal Z2)
 {
-  Standard_ShortReal sq_norme;
+  myX1 = X1;
+  myY1 = Y1;
+  myZ1 = Z1;
+  myX2 = X2;
+  myY2 = Y2;
+  myZ2 = Z2;
+  Graphic3d_Vec4 aPlaneX (X2 - X1, Y2 - Y1, Z2 - Z1, 0.0f);
 
-  MyX1 = X1;
-  MyY1 = Y1;
-  MyZ1 = Z1;
-  MyX2 = X2;
-  MyY2 = Y2;
-  MyZ2 = Z2;
+  Standard_ShortReal aSqNorm = aPlaneX.x() * aPlaneX.x()
+                             + aPlaneX.y() * aPlaneX.y()
+                             + aPlaneX.z() * aPlaneX.z();
+  aPlaneX.x() /= aSqNorm;
+  aPlaneX.y() /= aSqNorm;
+  aPlaneX.z() /= aSqNorm;
+  aPlaneX.w() = -aPlaneX.x() * X1
+                -aPlaneX.y() * Y1
+                           -aPlaneX.z() * Z1;
 
-  MyCInitTexture.sparams[0] = X2-X1;
-  MyCInitTexture.sparams[1] = Y2-Y1;
-  MyCInitTexture.sparams[2] = Z2-Z1;
-  sq_norme = MyCInitTexture.sparams[0]*MyCInitTexture.sparams[0]
-           + MyCInitTexture.sparams[1]*MyCInitTexture.sparams[1]
-           + MyCInitTexture.sparams[2]*MyCInitTexture.sparams[2];
-
-  MyCInitTexture.sparams[0] /= sq_norme;
-  MyCInitTexture.sparams[1] /= sq_norme;
-  MyCInitTexture.sparams[2] /= sq_norme;
-
-  MyCInitTexture.sparams[3] = - MyCInitTexture.sparams[0]*X1
-                              - MyCInitTexture.sparams[1]*Y1
-                             - MyCInitTexture.sparams[2]*Z1;
-  
-  Update();
+  myParams->SetGenMode (Graphic3d_TOTM_OBJECT,
+                        aPlaneX,
+                        Graphic3d_Vec4 (0.0f, 0.0f, 0.0f, 0.0f));
 }
 
-
-
-void Graphic3d_Texture1Dsegment::Segment(Standard_ShortReal& X1,Standard_ShortReal& Y1,Standard_ShortReal& Z1,Standard_ShortReal& X2,Standard_ShortReal& Y2,Standard_ShortReal& Z2) const
+// =======================================================================
+// function : Segment
+// purpose  :
+// =======================================================================
+void Graphic3d_Texture1Dsegment::Segment (Standard_ShortReal& X1,
+                                          Standard_ShortReal& Y1,
+                                          Standard_ShortReal& Z1,
+                                          Standard_ShortReal& X2,
+                                          Standard_ShortReal& Y2,
+                                          Standard_ShortReal& Z2) const
 {
-  X1 = MyX1;
-  Y1 = MyY1;
-  Z1 = MyZ1;
-  X2 = MyX2;
-  Y2 = MyY2;
-  Z2 = MyZ2;
+  X1 = myX1;
+  Y1 = myY1;
+  Z1 = myZ1;
+  X2 = myX2;
+  Y2 = myY2;
+  Z2 = myZ2;
 }
index 8bcffce..47ef84c 100755 (executable)
 -- purpose or non-infringement. Please see the License for the specific terms
 -- and conditions governing the rights and limitations under the License.
 
--- Modified :   GG 10/01/2000 IMP 
---              Add NumberOfTextures() and TextureName() methods
---             Add Name() and IsRepeat() method
+deferred class Texture2D from Graphic3d
 
-deferred  class  Texture2D  from  Graphic3d 
-    
-inherits  TextureMap  from  Graphic3d  
+inherits TextureMap from Graphic3d
 
-    ---Purpose: This abstract class for managing 2D textures
+  ---Purpose: This abstract class for managing 2D textures
 
-uses  
-    TypeOfTexture  from  Graphic3d,
-    NameOfTexture2D  from  Graphic3d, 
-    StructureManager from  Graphic3d 
+uses
+
+  TypeOfTexture   from Graphic3d,
+  NameOfTexture2D from Graphic3d,
+  AsciiString     from TCollection
 
-    
 raises
-    OutOfRange from Standard
-is 
-    Initialize(SM  :  StructureManager  from  Graphic3d;
-              aFileName  :  CString  from  Standard; 
-              aType      :  TypeOfTexture  from  Graphic3d);
-               
-    Initialize(SM  :  StructureManager  from  Graphic3d; 
-              aName  :  NameOfTexture2D  from  Graphic3d;
-              aType :  TypeOfTexture  from  Graphic3d); 
-
-    Name(me) returns NameOfTexture2D from Graphic3d;
-    ---Purpose:
-    -- Returns the name of the predefined textures or NOT_2D_UNKNOWN
-    -- when the name is given as a filename.
-    ---Level: Public
-
-    NumberOfTextures(myclass) returns Integer from Standard;
-    ---Purpose:
-    -- Returns the number of predefined textures.
-    ---Level: Public
-
-    TextureName(myclass; aRank: Integer from Standard)
-        returns CString from Standard
-        raises OutOfRange from Standard;
-    ---Purpose:
-    -- Returns the name of the predefined texture of rank <aRank>
-    ---Trigger: when <aRank> is < 1 or > NumberOfTextures.
-    ---Level: Public
+
+  OutOfRange from Standard
+
+is
+
+  Initialize (theFileName : AsciiString from TCollection;
+              theType     : TypeOfTexture from Graphic3d);
+
+  Initialize (theName : NameOfTexture2D from Graphic3d;
+              theType : TypeOfTexture   from Graphic3d);
+
+  Name (me) returns NameOfTexture2D from Graphic3d;
+  ---Purpose:
+  -- Returns the name of the predefined textures or NOT_2D_UNKNOWN
+  -- when the name is given as a filename.
+  ---Level: Public
+
+  NumberOfTextures (myclass) returns Integer from Standard;
+  ---Purpose:
+  -- Returns the number of predefined textures.
+  ---Level: Public
+
+  TextureName (myclass; theRank: Integer from Standard) returns AsciiString from TCollection
+  raises OutOfRange from Standard;
+  ---Purpose:
+  -- Returns the name of the predefined texture of rank <aRank>
+  ---Trigger: when <aRank> is < 1 or > NumberOfTextures.
+  ---Level: Public
 
 fields
-    myName: NameOfTexture2D from Graphic3d;
 
-end  Texture2D; 
+  myName : NameOfTexture2D from Graphic3d;
 
+end Texture2D;
index b304945..fed9392 100755 (executable)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
-// Modified :   GG 10/01/2000 IMP
-//              Adds Name(),NumberOfTextures() and TextureName() methods
-
-
-
 #include <Graphic3d_Texture2D.ixx>
-#include <stdlib.h>
-
-
 #include <TCollection_AsciiString.hxx>
-#include <OSD_Directory.hxx>
-#include <OSD_File.hxx>
-#include <OSD_Path.hxx>
-
-static TCollection_AsciiString GetEnvir ( ) {
-
-  static Standard_Boolean IsDefined=Standard_False ;
-  static TCollection_AsciiString VarName;
-  if ( !IsDefined ) {
-    char *envir, *casroot ;
-    envir = getenv("CSF_MDTVTexturesDirectory") ;
-    
-    Standard_Boolean HasDefinition = Standard_False ;
-    if ( !envir ) { 
-      casroot  = getenv("CASROOT");
-      if ( casroot ) {
-       VarName = TCollection_AsciiString  (casroot);
-       VarName += "/src/Textures" ;
-       HasDefinition = Standard_True ;
-      }
-    } else {
-      VarName = TCollection_AsciiString  (envir);
-      HasDefinition = Standard_True ;
-    }
-    if ( HasDefinition ) {
-      OSD_Path aPath ( VarName );
-      OSD_Directory aDir(aPath);
-      if ( aDir.Exists () ) {
-       TCollection_AsciiString aTexture = VarName + "/2d_MatraDatavision.rgb" ;
-       OSD_File TextureFile ( aTexture );
-       if ( !TextureFile.Exists() ) {
-         cout << " CSF_MDTVTexturesDirectory or CASROOT not correctly setted " << endl;
-         cout << " not all files are found in : "<<VarName.ToCString() << endl;
-         Standard_Failure::Raise ( "CSF_MDTVTexturesDirectory or CASROOT not correctly setted " );
-       }
-      } else {
-       cout << " CSF_MDTVTexturesDirectory or CASROOT not correctly setted " << endl;
-       cout << " Directory : "<< VarName.ToCString() << " not exist " << endl;
-       Standard_Failure::Raise ( "CSF_MDTVTexturesDirectory or CASROOT not correctly setted " );
-      }      
-      return VarName ;
-    } else {
-      cout << " CSF_MDTVTexturesDirectory and CASROOT not setted " << endl;
-      cout << " one of these variable are mandatory to use this fonctionnality" << endl;
-      Standard_Failure::Raise ( "CSF_MDTVTexturesDirectory and CASROOT not setted " );
-    }   
-    IsDefined = Standard_True ; 
-  } 
-  return VarName ;
-}
-
-
 
 static const char *NameOfTexture_to_FileName[] =
 {
@@ -107,40 +46,61 @@ static const char *NameOfTexture_to_FileName[] =
   "2d_rain.rgb"
 };
 
-
-Graphic3d_Texture2D::Graphic3d_Texture2D(const Handle(Graphic3d_StructureManager)& SM,const Standard_CString FileName,const Graphic3d_TypeOfTexture Type)
-: Graphic3d_TextureMap(SM, "", FileName, Type),
-  myName(Graphic3d_NOT_2D_UNKNOWN)
+// =======================================================================
+// function : Graphic3d_Texture2D
+// purpose  :
+// =======================================================================
+Graphic3d_Texture2D::Graphic3d_Texture2D (const TCollection_AsciiString& theFileName,
+                                          const Graphic3d_TypeOfTexture  theType)
+: Graphic3d_TextureMap (theFileName, theType),
+  myName (Graphic3d_NOT_2D_UNKNOWN)
 {
 }
 
-
-Graphic3d_Texture2D::Graphic3d_Texture2D(const Handle(Graphic3d_StructureManager)& SM,const Graphic3d_NameOfTexture2D NOT, const Graphic3d_TypeOfTexture Type)
-: Graphic3d_TextureMap(SM,  GetEnvir().ToCString() , NameOfTexture_to_FileName[NOT], Type),
-  myName(NOT)
+// =======================================================================
+// function : Graphic3d_Texture2D
+// purpose  :
+// =======================================================================
+Graphic3d_Texture2D::Graphic3d_Texture2D (const Graphic3d_NameOfTexture2D theNOT,
+                                          const Graphic3d_TypeOfTexture   theType)
+: Graphic3d_TextureMap (NameOfTexture_to_FileName[theNOT], theType),
+  myName (theNOT)
 {
+  myPath.SetTrek (Graphic3d_TextureRoot::TexturesFolder());
+  myTexId = TCollection_AsciiString ("Graphic3d_Texture2D_")
+          + NameOfTexture_to_FileName[theNOT];
 }
 
-Standard_Integer Graphic3d_Texture2D::NumberOfTextures() {
-
+// =======================================================================
+// function : NumberOfTextures
+// purpose  :
+// =======================================================================
+Standard_Integer Graphic3d_Texture2D::NumberOfTextures()
+{
   return sizeof(NameOfTexture_to_FileName)/sizeof(char*);
 }
 
-Graphic3d_NameOfTexture2D Graphic3d_Texture2D::Name() const {
-
+// =======================================================================
+// function : Name
+// purpose  :
+// =======================================================================
+Graphic3d_NameOfTexture2D Graphic3d_Texture2D::Name() const
+{
   return myName;
 }
 
-Standard_CString Graphic3d_Texture2D::TextureName(const Standard_Integer aRank)
- {
-
-  if( aRank < 1 || aRank > NumberOfTextures() )
-        Standard_OutOfRange::Raise(" BAD index of texture");
-  TCollection_AsciiString filename(NameOfTexture_to_FileName[aRank-1]);
-  Standard_Integer i = filename.SearchFromEnd(".");
-
-  static TCollection_AsciiString name;
-
-  name = filename.SubString(4,i-1);
-  return name.ToCString();
+// =======================================================================
+// function : TextureName
+// purpose  :
+// =======================================================================
+TCollection_AsciiString Graphic3d_Texture2D::TextureName (const Standard_Integer theRank)
+{
+  if (theRank < 1 || theRank > NumberOfTextures())
+  {
+    Standard_OutOfRange::Raise ("BAD index of texture");
+  }
+
+  TCollection_AsciiString aFileName (NameOfTexture_to_FileName[theRank - 1]);
+  Standard_Integer i = aFileName.SearchFromEnd (".");
+  return aFileName.SubString (4, i - 1);
 }
index afc48e9..4aa2307 100755 (executable)
 -- purpose or non-infringement. Please see the License for the specific terms
 -- and conditions governing the rights and limitations under the License.
 
+class Texture2Dmanual from Graphic3d
 
-class  Texture2Dmanual  from  Graphic3d 
-
-    
-inherits  Texture2D  from  Graphic3d  
-    ---Purpose: This class defined a manual texture 2D
-    -- facets MUST define texture coordinate
-    -- if you want to see somethings on.
-
-uses 
-    NameOfTexture2D  from  Graphic3d, 
-    StructureManager      from  Graphic3d 
-
-
-is 
-    Create(SM  :  StructureManager  from  Graphic3d; 
-          FileName  :  CString  from  Standard)  returns  mutable  Texture2Dmanual  from  Graphic3d;
-    ---Purpose: Creates a texture from a file
-          
-    Create(SM  :  StructureManager  from  Graphic3d; 
-          NOT  :  NameOfTexture2D  from  Graphic3d)  returns  mutable  Texture2Dmanual  from  Graphic3d; 
-    ---Purpose: Creates a texture from a predefined texture name set.
-     
-end  Texture2Dmanual;    
+inherits Texture2D from Graphic3d
+
+  ---Purpose: This class defined a manual texture 2D
+  -- facets MUST define texture coordinate
+  -- if you want to see somethings on.
+
+uses
+
+  NameOfTexture2D from Graphic3d,
+  AsciiString     from TCollection
+
+is
+
+  Create (theFileName : AsciiString from TCollection) returns mutable Texture2Dmanual from Graphic3d;
+  ---Purpose: Creates a texture from a file
+
+  Create (theNOT : NameOfTexture2D from Graphic3d) returns mutable Texture2Dmanual from Graphic3d;
+  ---Purpose: Creates a texture from a predefined texture name set.
+
+end Texture2Dmanual;
index 287cddd..0648418 100755 (executable)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
-
 #include <Graphic3d_Texture2Dmanual.ixx>
 #include <Graphic3d_TypeOfTextureMode.hxx>
-
-
-Graphic3d_Texture2Dmanual::Graphic3d_Texture2Dmanual(const Handle(Graphic3d_StructureManager)& SM,const Standard_CString FileName)
-: Graphic3d_Texture2D(SM, FileName, Graphic3d_TOT_2D_MIPMAP)
+#include <Graphic3d_TextureParams.hxx>
+
+// =======================================================================
+// function : Graphic3d_Texture2Dmanual
+// purpose  :
+// =======================================================================
+Graphic3d_Texture2Dmanual::Graphic3d_Texture2Dmanual (const TCollection_AsciiString& theFileName)
+: Graphic3d_Texture2D (theFileName, Graphic3d_TOT_2D_MIPMAP)
 {
-  MyCInitTexture.doModulate = 1;
-  MyCInitTexture.doRepeat = 1;
-  MyCInitTexture.Mode = (int)Graphic3d_TOTM_MANUAL;
-  MyCInitTexture.doLinear = 1;
-  MyCInitTexture.sx = 1.0F;
-  MyCInitTexture.sy = 1.0F;
-  MyCInitTexture.tx = 0.0F;
-  MyCInitTexture.ty = 0.0F;
-  MyCInitTexture.angle = 0.0F;
-  MyCInitTexture.sparams[0] = 0.0F;
-  MyCInitTexture.sparams[1] = 0.0F;
-  MyCInitTexture.sparams[2] = 0.0F;
-  MyCInitTexture.sparams[3] = 0.0F;
-  MyCInitTexture.tparams[0] = 0.0F;
-  MyCInitTexture.tparams[1] = 0.0F;
-  MyCInitTexture.tparams[2] = 0.0F;
-  MyCInitTexture.tparams[3] = 0.0F;
-  Update();
+  myParams->SetModulate (Standard_True);
+  myParams->SetRepeat   (Standard_True);
+  myParams->SetFilter   (Graphic3d_TOTF_TRILINEAR);
 }
 
-
-Graphic3d_Texture2Dmanual::Graphic3d_Texture2Dmanual(const Handle(Graphic3d_StructureManager)& SM,const Graphic3d_NameOfTexture2D NOT)
-: Graphic3d_Texture2D(SM, NOT, Graphic3d_TOT_2D_MIPMAP)
+// =======================================================================
+// function : Graphic3d_Texture2Dmanual
+// purpose  :
+// =======================================================================
+Graphic3d_Texture2Dmanual::Graphic3d_Texture2Dmanual (const Graphic3d_NameOfTexture2D theNOT)
+: Graphic3d_Texture2D (theNOT, Graphic3d_TOT_2D_MIPMAP)
 {
-  MyCInitTexture.doModulate = 1;
-  MyCInitTexture.doRepeat = 1;
-  MyCInitTexture.Mode = (int)Graphic3d_TOTM_MANUAL;
-  MyCInitTexture.doLinear = 1;
-  MyCInitTexture.sx = 1.0F;
-  MyCInitTexture.sy = 1.0F;
-  MyCInitTexture.tx = 0.0F;
-  MyCInitTexture.ty = 0.0F;
-  MyCInitTexture.angle = 0.0F;
-  MyCInitTexture.sparams[0] = 0.0F;
-  MyCInitTexture.sparams[1] = 0.0F;
-  MyCInitTexture.sparams[2] = 0.0F;
-  MyCInitTexture.sparams[3] = 0.0F;
-  MyCInitTexture.tparams[0] = 0.0F;
-  MyCInitTexture.tparams[1] = 0.0F;
-  MyCInitTexture.tparams[2] = 0.0F;
-  MyCInitTexture.tparams[3] = 0.0F;
-  Update();
+  myParams->SetModulate (Standard_True);
+  myParams->SetRepeat   (Standard_True);
+  myParams->SetFilter   (Graphic3d_TOTF_TRILINEAR);
 }
-
index 2fac5dd..ba8def9 100755 (executable)
 -- purpose or non-infringement. Please see the License for the specific terms
 -- and conditions governing the rights and limitations under the License.
 
--- Modified :  GG IMP280200 
---                     Add Plane(),ScaleT(),ScaleS() methods
-
-class  Texture2Dplane  from  Graphic3d 
-    
-inherits  Texture2D  from  Graphic3d 
-
-    ---Purpose: This class allows the management of a 2D texture defined from a plane equation
-    -- Use the SetXXX() methods for positioning the texture as you want.
-
-uses 
-    NameOfTexture2D  from  Graphic3d, 
-    NameOfTexturePlane  from  Graphic3d, 
-    StructureManager      from  Graphic3d 
-
-
-is 
-    Create(SM  :  StructureManager from  Graphic3d; 
-          FileName  :  CString  from  Standard)  returns  mutable  Texture2Dplane  from  Graphic3d; 
-    ---Purpose:  Creates a texture from a file
-
-
-    Create(SM  :  StructureManager  from  Graphic3d; 
-          NOT  :  NameOfTexture2D  from  Graphic3d)  returns  mutable  Texture2Dplane  from  Graphic3d; 
-    ---Purpose:  Creates a texture from a predefined texture name set.
-     
-
-    SetPlaneS(me  :  mutable;  A,B,C,D  :  ShortReal  from  Standard); 
-    ---Purpose:  Defines the texture projection plane for texture coordinate S
-    -- default is <1.0, 0.0, 0.0, 0.0>
-
-    SetPlaneT(me :  mutable;  A,B,C,D  :  ShortReal  from  Standard); 
-    ---Purpose: Defines the texture projection plane for texture coordinate T
-    -- default is <0.0, 1.0, 0.0, 0.0>
-
-    SetPlane(me :  mutable;  APlane  :  NameOfTexturePlane  from  Graphic3d);
-    ---Purpose:  Defines the texture projection plane for both S and T texture coordinate
-    -- default is NOTP_XY meaning:
-    --      <1.0, 0.0, 0.0, 0.0> for S
-    -- and  <0.0, 1.0, 0.0, 0.0> for T
-      
-    SetScaleS(me  :  mutable;  val  :  ShortReal  from  Standard); 
-    ---Purpose: Defines the texture scale for the S texture coordinate
-    -- much easier than recomputing the S plane equation
-    -- but the result is the same    
-    -- default to 1.0
-
-    SetScaleT(me  :  mutable;  val  :  ShortReal  from  Standard);  
-    ---Purpose: Defines the texture scale for the T texture coordinate
-    -- much easier than recompution the T plane equation
-    -- but the result is the same
-    -- default to 1.0
-    
-    SetTranslateS(me  :  mutable;  val  :  ShortReal  from  Standard);
-    ---Purpose: Defines the texture translation for the S texture coordinate
-    -- you can obtain the same effect by modifying the S plane
-    -- equation but its not easier.
-    -- default to 0.0
-
-    SetTranslateT(me  :  mutable;  val  :  ShortReal  from  Standard); 
-    ---Purpose:  Defines the texture translation for the T texture coordinate
-    -- you can obtain the same effect by modifying the T plane
-    -- equation but its not easier.
-    -- default to 0.0
-     
-    SetRotation(me  :  mutable;  val  :  ShortReal  from  Standard); 
-    ---Purpose: Sets the rotation angle of the whole texture.
-    -- the same result might be achieved by recomputing the
-    -- S and T plane equation but it's not the easiest way...
-    -- the angle is expressed in degres
-    -- default is 0.0
-
-
-
-
-    --
-    -- inquire methods
-    --
-
-    Plane(me) returns NameOfTexturePlane  from  Graphic3d;
-    ---Purpose: Returns the current texture plane name or NOTP_UNKNOWN
-    -- when the plane is user defined.
-
-    PlaneS(me;  A,B,C,D  :  out  ShortReal  from  Standard);  
-    ---Purpose: Returns the current texture plane S equation
-
-    PlaneT(me;  A,B,C,D  :  out  ShortReal  from  Standard); 
-   ---Purpose: Returns   the current texture plane T equation
-
-    TranslateS(me;  val  :  out  ShortReal  from  Standard); 
-    ---Purpose: Returns  the current texture S translation value
-
-    TranslateT(me;  val  :  out  ShortReal  from  Standard);
-    ---Purpose: Returns the current texture T translation value
-
-    ScaleS(me;  val  :  out  ShortReal  from  Standard); 
-    ---Purpose: Returns the current texture S scale value
-
-    ScaleT(me;  val  :  out  ShortReal  from  Standard); 
-   ---Purpose: Returns the current texture T scale value
-
-    Rotation(me;    val  :  out  ShortReal  from  Standard);
-    ---Purpose: Returns the current texture rotation angle
+class Texture2Dplane from Graphic3d
 
-fields
+inherits Texture2D from Graphic3d
+
+  ---Purpose: This class allows the management of a 2D texture defined from a plane equation
+  -- Use the SetXXX() methods for positioning the texture as you want.
+
+uses
+
+  NameOfTexture2D    from Graphic3d,
+  NameOfTexturePlane from Graphic3d,
+  AsciiString        from TCollection
+
+is
+
+  Create (theFileName : AsciiString from TCollection) returns mutable Texture2Dplane from Graphic3d;
+  ---Purpose: Creates a texture from a file
+
+  Create (theNOT : NameOfTexture2D from Graphic3d) returns mutable Texture2Dplane from Graphic3d;
+  ---Purpose: Creates a texture from a predefined texture name set.
+
+  SetPlaneS (me : mutable; A, B, C, D : ShortReal from Standard);
+  ---Purpose:  Defines the texture projection plane for texture coordinate S
+  -- default is <1.0, 0.0, 0.0, 0.0>
+
+  SetPlaneT (me : mutable; A, B, C, D : ShortReal from Standard);
+  ---Purpose: Defines the texture projection plane for texture coordinate T
+  -- default is <0.0, 1.0, 0.0, 0.0>
+
+  SetPlane (me : mutable; thePlane : NameOfTexturePlane from Graphic3d);
+  ---Purpose:  Defines the texture projection plane for both S and T texture coordinate
+  -- default is NOTP_XY meaning:
+  --      <1.0, 0.0, 0.0, 0.0> for S
+  -- and  <0.0, 1.0, 0.0, 0.0> for T
+
+  SetScaleS (me : mutable; theVal : ShortReal from Standard);
+  ---Purpose: Defines the texture scale for the S texture coordinate
+  -- much easier than recomputing the S plane equation
+  -- but the result is the same
+  -- default to 1.0
+
+  SetScaleT (me : mutable; theVal : ShortReal from Standard);
+  ---Purpose: Defines the texture scale for the T texture coordinate
+  -- much easier than recompution the T plane equation
+  -- but the result is the same
+  -- default to 1.0
 
-    myPlaneName: NameOfTexturePlane from Graphic3d;
+  SetTranslateS (me : mutable; theVal : ShortReal from Standard);
+  ---Purpose: Defines the texture translation for the S texture coordinate
+  -- you can obtain the same effect by modifying the S plane
+  -- equation but its not easier.
+  -- default to 0.0
 
+  SetTranslateT (me : mutable; theVal : ShortReal from Standard);
+  ---Purpose:  Defines the texture translation for the T texture coordinate
+  -- you can obtain the same effect by modifying the T plane
+  -- equation but its not easier.
+  -- default to 0.0
+
+  SetRotation (me : mutable; theVal : ShortReal from Standard);
+  ---Purpose: Sets the rotation angle of the whole texture.
+  -- the same result might be achieved by recomputing the
+  -- S and T plane equation but it's not the easiest way...
+  -- the angle is expressed in degrees
+  -- default is 0.0
+
+  --
+  -- inquire methods
+  --
+
+  Plane (me) returns NameOfTexturePlane from Graphic3d;
+  ---Purpose: Returns the current texture plane name or NOTP_UNKNOWN
+  -- when the plane is user defined.
+
+  PlaneS (me; A, B, C, D : out ShortReal from Standard);
+  ---Purpose: Returns the current texture plane S equation
+
+  PlaneT (me; A, B, C, D : out ShortReal from Standard);
+ ---Purpose: Returns   the current texture plane T equation
+
+  TranslateS (me; theVal : out ShortReal from Standard);
+  ---Purpose: Returns  the current texture S translation value
+
+  TranslateT (me; theVal : out ShortReal from Standard);
+  ---Purpose: Returns the current texture T translation value
+
+  ScaleS (me; theVal : out ShortReal from Standard);
+  ---Purpose: Returns the current texture S scale value
+
+  ScaleT (me; theVal : out ShortReal from Standard);
+  ---Purpose: Returns the current texture T scale value
+
+  Rotation (me; theVal : out ShortReal from Standard);
+  ---Purpose: Returns the current texture rotation angle
+
+fields
 
-end  Texture2Dplane;
+  myPlaneName : NameOfTexturePlane from Graphic3d;
 
+end Texture2Dplane;
index a65fe52..578bfec 100755 (executable)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
-#define IMP280200      //GG Add Plane(),ScaleT(),ScaleS() methods
-
 #include <Graphic3d_Texture2Dplane.ixx>
 #include <Graphic3d_TypeOfTextureMode.hxx>
+#include <Graphic3d_TextureParams.hxx>
+
+// =======================================================================
+// function : Graphic3d_Texture2Dplane
+// purpose  :
+// =======================================================================
+Graphic3d_Texture2Dplane::Graphic3d_Texture2Dplane (const TCollection_AsciiString& theFileName)
+: Graphic3d_Texture2D (theFileName, Graphic3d_TOT_2D_MIPMAP)
+{
+  myParams->SetModulate (Standard_True);
+  myParams->SetRepeat   (Standard_True);
+  myParams->SetFilter   (Graphic3d_TOTF_TRILINEAR);
+  myParams->SetGenMode  (Graphic3d_TOTM_OBJECT,
+                         Graphic3d_Vec4 (1.0f, 0.0f, 0.0f, 0.0f),
+                         Graphic3d_Vec4 (0.0f, 1.0f, 0.0f, 0.0f));
+}
 
+// =======================================================================
+// function : Graphic3d_Texture2Dplane
+// purpose  :
+// =======================================================================
+Graphic3d_Texture2Dplane::Graphic3d_Texture2Dplane (const Graphic3d_NameOfTexture2D theNOT)
+: Graphic3d_Texture2D (theNOT, Graphic3d_TOT_2D_MIPMAP)
+{
+  myParams->SetModulate (Standard_True);
+  myParams->SetRepeat   (Standard_True);
+  myParams->SetFilter   (Graphic3d_TOTF_TRILINEAR);
+  myParams->SetGenMode  (Graphic3d_TOTM_OBJECT,
+                         Graphic3d_Vec4 (1.0f, 0.0f, 0.0f, 0.0f),
+                         Graphic3d_Vec4 (0.0f, 1.0f, 0.0f, 0.0f));
+}
 
-Graphic3d_Texture2Dplane::Graphic3d_Texture2Dplane(const Handle(Graphic3d_StructureManager)& SM,const Standard_CString FileName)
-: Graphic3d_Texture2D(SM, FileName, Graphic3d_TOT_2D_MIPMAP)
-{
-  MyCInitTexture.doModulate = 1;
-  MyCInitTexture.doRepeat = 1;
-  MyCInitTexture.Mode = (int)Graphic3d_TOTM_OBJECT;
-  MyCInitTexture.doLinear = 1;
-  MyCInitTexture.sx = 1.0F;
-  MyCInitTexture.sy = 1.0F;
-  MyCInitTexture.tx = 0.0F;
-  MyCInitTexture.ty = 0.0F;
-  MyCInitTexture.angle = 0.0F;
-  MyCInitTexture.sparams[0] = 1.0F;
-  MyCInitTexture.sparams[1] = 0.0F;
-  MyCInitTexture.sparams[2] = 0.0F;
-  MyCInitTexture.sparams[3] = 0.0F;
-  MyCInitTexture.tparams[0] = 0.0F;
-  MyCInitTexture.tparams[1] = 1.0F;
-  MyCInitTexture.tparams[2] = 0.0F;
-  MyCInitTexture.tparams[3] = 0.0F;
-  Update();
-}
-
-
-
-Graphic3d_Texture2Dplane::Graphic3d_Texture2Dplane(const Handle(Graphic3d_StructureManager)& SM,const Graphic3d_NameOfTexture2D NOT)
-: Graphic3d_Texture2D(SM, NOT, Graphic3d_TOT_2D_MIPMAP)
-{
-  MyCInitTexture.doModulate = 1;
-  MyCInitTexture.doRepeat = 1;
-  MyCInitTexture.Mode = (int)Graphic3d_TOTM_OBJECT;
-  MyCInitTexture.doLinear = 1;
-  MyCInitTexture.sx = 1.0F;
-  MyCInitTexture.sy = 1.0F;
-  MyCInitTexture.tx = 0.0F;
-  MyCInitTexture.ty = 0.0F;
-  MyCInitTexture.angle = 0.0F;
-  MyCInitTexture.sparams[0] = 1.0F;
-  MyCInitTexture.sparams[1] = 0.0F;
-  MyCInitTexture.sparams[2] = 0.0F;
-  MyCInitTexture.sparams[3] = 0.0F;
-  MyCInitTexture.tparams[0] = 0.0F;
-  MyCInitTexture.tparams[1] = 1.0F;
-  MyCInitTexture.tparams[2] = 0.0F;
-  MyCInitTexture.tparams[3] = 0.0F;
-  Update();
-}
-
-
-void Graphic3d_Texture2Dplane::SetPlaneS(const Standard_ShortReal A,const Standard_ShortReal B,const Standard_ShortReal C,const Standard_ShortReal D) 
-{
-  MyCInitTexture.sparams[0] = A;
-  MyCInitTexture.sparams[1] = B;
-  MyCInitTexture.sparams[2] = C;
-  MyCInitTexture.sparams[3] = D;
-#ifdef IMP280200
+// =======================================================================
+// function : SetPlaneS
+// purpose  :
+// =======================================================================
+void Graphic3d_Texture2Dplane::SetPlaneS (const Standard_ShortReal theA,
+                                          const Standard_ShortReal theB,
+                                          const Standard_ShortReal theC,
+                                          const Standard_ShortReal theD)
+{
+  const Graphic3d_Vec4 aPlaneS (theA, theB, theC, theD);
+  const Graphic3d_Vec4 aPlaneT = myParams->GenPlaneT();
+  myParams->SetGenMode (Graphic3d_TOTM_OBJECT, aPlaneS, aPlaneT);
   myPlaneName = Graphic3d_NOTP_UNKNOWN;
-#endif
-  Update();
 }
 
-
-void Graphic3d_Texture2Dplane::SetPlaneT(const Standard_ShortReal A,const Standard_ShortReal B,const Standard_ShortReal C,const Standard_ShortReal D)
+// =======================================================================
+// function : SetPlaneT
+// purpose  :
+// =======================================================================
+void Graphic3d_Texture2Dplane::SetPlaneT (const Standard_ShortReal theA,
+                                          const Standard_ShortReal theB,
+                                          const Standard_ShortReal theC,
+                                          const Standard_ShortReal theD)
 {
-  MyCInitTexture.tparams[0] = A;
-  MyCInitTexture.tparams[1] = B;
-  MyCInitTexture.tparams[2] = C;
-  MyCInitTexture.tparams[3] = D;
-#ifdef IMP280200
+  const Graphic3d_Vec4 aPlaneS = myParams->GenPlaneS();
+  const Graphic3d_Vec4 aPlaneT (theA, theB, theC, theD);
+  myParams->SetGenMode (Graphic3d_TOTM_OBJECT, aPlaneS, aPlaneT);
   myPlaneName = Graphic3d_NOTP_UNKNOWN;
-#endif
-  Update();
 }
 
-
-void Graphic3d_Texture2Dplane::SetPlane(const Graphic3d_NameOfTexturePlane APlane) 
+// =======================================================================
+// function : SetPlane
+// purpose  :
+// =======================================================================
+void Graphic3d_Texture2Dplane::SetPlane (const Graphic3d_NameOfTexturePlane thePlane)
 {
-  switch (APlane)
-    {
+  switch (thePlane)
+  {
     case Graphic3d_NOTP_XY:
-      MyCInitTexture.sparams[0] = 1.0F;
-      MyCInitTexture.sparams[1] = 0.0F;
-      MyCInitTexture.sparams[2] = 0.0F;
-      MyCInitTexture.sparams[3] = 0.0F;
-      MyCInitTexture.tparams[0] = 0.0F;
-      MyCInitTexture.tparams[1] = 1.0F;
-      MyCInitTexture.tparams[2] = 0.0F;
-      MyCInitTexture.tparams[3] = 0.0F;
+    {
+      myParams->SetGenMode (Graphic3d_TOTM_OBJECT,
+                            Graphic3d_Vec4 (1.0f, 0.0f, 0.0f, 0.0f),
+                            Graphic3d_Vec4 (0.0f, 1.0f, 0.0f, 0.0f));
       break;
-
+    }
     case Graphic3d_NOTP_YZ:
-      MyCInitTexture.sparams[0] = 0.0F;
-      MyCInitTexture.sparams[1] = 1.0F;
-      MyCInitTexture.sparams[2] = 0.0F;
-      MyCInitTexture.sparams[3] = 0.0F;
-      MyCInitTexture.tparams[0] = 0.0F;
-      MyCInitTexture.tparams[1] = 0.0F;
-      MyCInitTexture.tparams[2] = 1.0F;
-      MyCInitTexture.tparams[3] = 0.0F;
+    {
+      myParams->SetGenMode (Graphic3d_TOTM_OBJECT,
+                            Graphic3d_Vec4 (0.0f, 1.0f, 0.0f, 0.0f),
+                            Graphic3d_Vec4 (0.0f, 0.0f, 1.0f, 0.0f));
       break;
-
+    }
     case Graphic3d_NOTP_ZX:
-      MyCInitTexture.sparams[0] = 0.0F;
-      MyCInitTexture.sparams[1] = 0.0F;
-      MyCInitTexture.sparams[2] = 1.0F;
-      MyCInitTexture.sparams[3] = 0.0F;
-      MyCInitTexture.tparams[0] = 1.0F;
-      MyCInitTexture.tparams[1] = 0.0F;
-      MyCInitTexture.tparams[2] = 0.0F;
-      MyCInitTexture.tparams[3] = 0.0F;
-      break;
-    default:
+    {
+      myParams->SetGenMode (Graphic3d_TOTM_OBJECT,
+                            Graphic3d_Vec4 (0.0f, 0.0f, 1.0f, 0.0f),
+                            Graphic3d_Vec4 (1.0f, 0.0f, 0.0f, 0.0f));
       break;
     }
+    default: break;
+  }
 
-#ifdef IMP280200
-    myPlaneName = APlane;
-#endif
-
-  Update();
+  myPlaneName = thePlane;
 }
 
-
-void Graphic3d_Texture2Dplane::SetScaleS(const Standard_ShortReal val) 
+// =======================================================================
+// function : SetScaleS
+// purpose  :
+// =======================================================================
+void Graphic3d_Texture2Dplane::SetScaleS (const Standard_ShortReal theVal)
 {
-  MyCInitTexture.sx = val;
-  Update();
+  Graphic3d_Vec2 aScale = myParams->Scale();
+  aScale.x() = theVal;
+  myParams->SetScale (aScale);
 }
 
-
-void Graphic3d_Texture2Dplane::SetScaleT(const Standard_ShortReal val) 
+// =======================================================================
+// function : SetScaleT
+// purpose  :
+// =======================================================================
+void Graphic3d_Texture2Dplane::SetScaleT (const Standard_ShortReal theVal)
 {
-  MyCInitTexture.sy = val;
-  Update();
+  Graphic3d_Vec2 aScale = myParams->Scale();
+  aScale.y() = theVal;
+  myParams->SetScale (aScale);
 }
 
-
-void Graphic3d_Texture2Dplane::SetTranslateS(const Standard_ShortReal val)
+// =======================================================================
+// function : SetTranslateS
+// purpose  :
+// =======================================================================
+void Graphic3d_Texture2Dplane::SetTranslateS (const Standard_ShortReal theVal)
 {
-  MyCInitTexture.tx = val;
-  Update();
+  Graphic3d_Vec2 aVec = myParams->Translation();
+  aVec.x() = theVal;
+  myParams->SetTranslation (aVec);
 }
 
-
-void Graphic3d_Texture2Dplane::SetTranslateT(const Standard_ShortReal val) 
+// =======================================================================
+// function : SetTranslateT
+// purpose  :
+// =======================================================================
+void Graphic3d_Texture2Dplane::SetTranslateT (const Standard_ShortReal theVal)
 {
-  MyCInitTexture.ty = val;
-  Update();
+  Graphic3d_Vec2 aVec = myParams->Translation();
+  aVec.y() = theVal;
+  myParams->SetTranslation (aVec);
 }
 
-
-void Graphic3d_Texture2Dplane::SetRotation(const Standard_ShortReal val) 
+// =======================================================================
+// function : SetRotation
+// purpose  :
+// =======================================================================
+void Graphic3d_Texture2Dplane::SetRotation (const Standard_ShortReal theAngleDegrees)
 {
-  MyCInitTexture.angle = val;
-  Update();
+  myParams->SetRotation (theAngleDegrees);
 }
 
-void Graphic3d_Texture2Dplane::PlaneS(Standard_ShortReal& A,Standard_ShortReal& B,Standard_ShortReal& C,Standard_ShortReal& D) const
+// =======================================================================
+// function : PlaneS
+// purpose  :
+// =======================================================================
+void Graphic3d_Texture2Dplane::PlaneS (Standard_ShortReal& theA,
+                                       Standard_ShortReal& theB,
+                                       Standard_ShortReal& theC,
+                                       Standard_ShortReal& theD) const
 {
-  A = MyCInitTexture.sparams[0];
-  B = MyCInitTexture.sparams[1];
-  C = MyCInitTexture.sparams[2];
-  D = MyCInitTexture.sparams[3];
+  const Graphic3d_Vec4& aPlaneS = myParams->GenPlaneS();
+  theA = aPlaneS.x();
+  theB = aPlaneS.y();
+  theC = aPlaneS.z();
+  theD = aPlaneS.w();
 }
 
-void Graphic3d_Texture2Dplane::PlaneT(Standard_ShortReal& A,Standard_ShortReal& B,Standard_ShortReal& C,Standard_ShortReal& D) const
+// =======================================================================
+// function : PlaneT
+// purpose  :
+// =======================================================================
+void Graphic3d_Texture2Dplane::PlaneT (Standard_ShortReal& theA,
+                                       Standard_ShortReal& theB,
+                                       Standard_ShortReal& theC,
+                                       Standard_ShortReal& theD) const
 {
-  A = MyCInitTexture.tparams[0];
-  B = MyCInitTexture.tparams[1];
-  C = MyCInitTexture.tparams[2];
-  D = MyCInitTexture.tparams[3];
+  const Graphic3d_Vec4& aPlaneT = myParams->GenPlaneT();
+  theA = aPlaneT.x();
+  theB = aPlaneT.y();
+  theC = aPlaneT.z();
+  theD = aPlaneT.w();
 }
 
-void Graphic3d_Texture2Dplane::TranslateS(Standard_ShortReal& val) const
+// =======================================================================
+// function : TranslateS
+// purpose  :
+// =======================================================================
+void Graphic3d_Texture2Dplane::TranslateS (Standard_ShortReal& theVal) const
 {
-  val = MyCInitTexture.tx;
+  theVal = myParams->Translation().x();
 }
 
-void Graphic3d_Texture2Dplane::TranslateT(Standard_ShortReal& val) const
+// =======================================================================
+// function : TranslateT
+// purpose  :
+// =======================================================================
+void Graphic3d_Texture2Dplane::TranslateT (Standard_ShortReal& theVal) const
 {
-  val = MyCInitTexture.ty;
+  theVal = myParams->Translation().y();
 }
 
-void Graphic3d_Texture2Dplane::Rotation(Standard_ShortReal& val) const
+// =======================================================================
+// function : Rotation
+// purpose  :
+// =======================================================================
+void Graphic3d_Texture2Dplane::Rotation (Standard_ShortReal& theVal) const
 {
-  val = MyCInitTexture.angle;
+  theVal = myParams->Rotation();
 }
 
-#ifdef IMP280200
-Graphic3d_NameOfTexturePlane Graphic3d_Texture2Dplane::Plane() const {
-
+// =======================================================================
+// function : Plane
+// purpose  :
+// =======================================================================
+Graphic3d_NameOfTexturePlane Graphic3d_Texture2Dplane::Plane() const
+{
   return myPlaneName;
 }
 
-void Graphic3d_Texture2Dplane::ScaleS(Standard_ShortReal& val) const
+// =======================================================================
+// function : ScaleS
+// purpose  :
+// =======================================================================
+void Graphic3d_Texture2Dplane::ScaleS (Standard_ShortReal& theVal) const
 {
-  val = MyCInitTexture.sx;
+  theVal = myParams->Scale().x();
 }
 
-void Graphic3d_Texture2Dplane::ScaleT(Standard_ShortReal& val) const
+// =======================================================================
+// function : ScaleT
+// purpose  :
+// =======================================================================
+void Graphic3d_Texture2Dplane::ScaleT (Standard_ShortReal& theVal) const
 {
-  val = MyCInitTexture.sy;
+  theVal = myParams->Scale().y();
 }
-#endif
-
-
-
-
index 0a90455..7c318a7 100755 (executable)
 -- purpose or non-infringement. Please see the License for the specific terms
 -- and conditions governing the rights and limitations under the License.
 
--- Modified :  GG 10/01/2000 IMP 
---             Add NumberOfTextures() and TextureName() methods
---             Add Name() method
+class TextureEnv from Graphic3d
 
-class  TextureEnv  from  Graphic3d 
-    
-inherits  TextureRoot  from  Graphic3d 
+inherits TextureRoot from Graphic3d
 
-    ---Purpose: This class provides environment texture usable only in Visual3d_ContextView
+  ---Purpose: This class provides environment texture usable only in Visual3d_ContextView
 
-uses 
-    NameOfTextureEnv  from  Graphic3d, 
-    StructureManager  from  Graphic3d 
+uses
+
+  NameOfTextureEnv from Graphic3d,
+  AsciiString      from TCollection
 
 raises
-    OutOfRange from Standard
-
-is 
-    Create(SM  :  StructureManager  from  Graphic3d; 
-           aFileName  :  CString  from  Standard)
-       returns  mutable TextureEnv  from  Graphic3d;    
-    ---Purpose: Creates an environment texture from a file
-
-    Create(SM          :  StructureManager  from  Graphic3d;
-          aName:  NameOfTextureEnv  from  Graphic3d)  
-       returns  mutable  TextureEnv  from  Graphic3d; 
-    ---Purpose: Creates an environment texture from a predefined texture name set.
-
-    Name(me) returns NameOfTextureEnv from Graphic3d;
-    ---Purpose:
-    -- Returns the name of the predefined textures or NOT_ENV_UNKNOWN
-    -- when the name is given as a filename.
-    ---Level: Public
-
-    NumberOfTextures(myclass) returns Integer from Standard;
-    ---Purpose:
-    -- Returns the number of predefined textures.
-    ---Level: Public
-
-    TextureName(myclass; aRank: Integer from Standard)
-       returns CString from Standard
-       raises OutOfRange from Standard;
-    ---Purpose:
-    -- Returns the name of the predefined texture of rank <aRank>
-    ---Trigger: when <aRank> is < 1 or > NumberOfTextures.
-    ---Level: Public
+
+  OutOfRange from Standard
+
+is
+
+  Create (theFileName : AsciiString from TCollection) returns  mutable TextureEnv from Graphic3d;
+  ---Purpose: Creates an environment texture from a file.
+
+  Create (theName : NameOfTextureEnv from Graphic3d) returns mutable TextureEnv from Graphic3d;
+  ---Purpose: Creates an environment texture from a predefined texture name set.
+
+  Name (me) returns NameOfTextureEnv from Graphic3d;
+  ---Purpose:
+  -- Returns the name of the predefined textures or NOT_ENV_UNKNOWN
+  -- when the name is given as a filename.
+  ---Level: Public
+
+  NumberOfTextures (myclass) returns Integer from Standard;
+  ---Purpose:
+  -- Returns the number of predefined textures.
+  ---Level: Public
+
+  TextureName (myclass; theRank: Integer from Standard)
+  returns AsciiString from TCollection
+  raises OutOfRange from Standard;
+  ---Purpose:
+  -- Returns the name of the predefined texture of rank <aRank>
+  ---Trigger: when <aRank> is < 1 or > NumberOfTextures.
+  ---Level: Public
 
 fields
-    myName: NameOfTextureEnv from Graphic3d;
-     
-end  TextureEnv; 
 
+  myName : NameOfTextureEnv from Graphic3d;
+
+end TextureEnv;
index 834d25f..b02defe 100755 (executable)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
-// Modified :   GG 10/01/2000 IMP
-//             Adds Name(),NumberOfTextures() and TextureName() methods
-
 #include <Graphic3d_TextureEnv.ixx>
 #include <Graphic3d_TypeOfTexture.hxx>
 #include <Graphic3d_TypeOfTextureMode.hxx>
-
-
+#include <Graphic3d_TextureParams.hxx>
 #include <TCollection_AsciiString.hxx>
-#include <OSD_Directory.hxx>
-#include <OSD_File.hxx>
-#include <OSD_Path.hxx>
-
-#include <stdlib.h>
-
-static TCollection_AsciiString GetEnvir ( ) {
-
-  static Standard_Boolean IsDefined=Standard_False ;
-  static TCollection_AsciiString VarName;
-  if ( !IsDefined ) {
-    char *envir, *casroot ;
-    envir = getenv("CSF_MDTVTexturesDirectory") ;
-    
-    Standard_Boolean HasDefinition = Standard_False ;
-    if ( !envir ) { 
-      casroot  = getenv("CASROOT");
-      if ( casroot ) {
-       VarName = TCollection_AsciiString  (casroot);
-       VarName += "/src/Textures" ;
-       HasDefinition = Standard_True ;
-      }
-    } else {
-      VarName = TCollection_AsciiString  (envir);
-      HasDefinition = Standard_True ;
-    }
-    if ( HasDefinition ) {
-      OSD_Path aPath ( VarName );
-      OSD_Directory aDir(aPath);
-      if ( aDir.Exists () ) {
-       TCollection_AsciiString aTexture = VarName + "/2d_MatraDatavision.rgb" ;
-       OSD_File TextureFile ( aTexture );
-       if ( !TextureFile.Exists() ) {
-         cout << " CSF_MDTVTexturesDirectory or CASROOT not correctly setted " << endl;
-         cout << " not all files are found in : "<<VarName.ToCString() << endl;
-         Standard_Failure::Raise ( "CSF_MDTVTexturesDirectory or CASROOT not correctly setted " );
-       }
-      } else {
-       cout << " CSF_MDTVTexturesDirectory or CASROOT not correctly setted " << endl;
-       cout << " Directory : "<< VarName.ToCString() << " not exist " << endl;
-       Standard_Failure::Raise ( "CSF_MDTVTexturesDirectory or CASROOT not correctly setted " );
-      }      
-      return VarName ;
-    } else {
-      cout << " CSF_MDTVTexturesDirectory and CASROOT not setted " << endl;
-      cout << " one of these variable are mandatory to use this fonctionnality" << endl;
-      Standard_Failure::Raise ( "CSF_MDTVTexturesDirectory and CASROOT not setted " );
-    }   
-    IsDefined = Standard_True ; 
-  } 
-  return VarName ;
-
-}
 
 static const char *NameOfTexture_to_FileName[] =
 {
@@ -94,74 +36,68 @@ static const char *NameOfTexture_to_FileName[] =
   "env_road.rgb"
 };
 
-
-Graphic3d_TextureEnv::Graphic3d_TextureEnv(const Handle(Graphic3d_StructureManager)& SM,const Standard_CString FileName)
-: Graphic3d_TextureRoot(SM, "", FileName, Graphic3d_TOT_2D_MIPMAP),
-  myName(Graphic3d_NOT_ENV_UNKNOWN)
+// =======================================================================
+// function : Graphic3d_TextureEnv
+// purpose  :
+// =======================================================================
+Graphic3d_TextureEnv::Graphic3d_TextureEnv (const TCollection_AsciiString& theFileName)
+: Graphic3d_TextureRoot (theFileName, Graphic3d_TOT_2D_MIPMAP),
+  myName (Graphic3d_NOT_ENV_UNKNOWN)
 {
-  MyCInitTexture.doModulate = 0;
-  MyCInitTexture.doRepeat = 0;
-  MyCInitTexture.Mode = (int)Graphic3d_TOTM_SPHERE;
-  MyCInitTexture.doLinear = 1;
-  MyCInitTexture.sx = 1.0F;
-  MyCInitTexture.sy = 1.0F;
-  MyCInitTexture.tx = 0.0F;
-  MyCInitTexture.ty = 0.0F;
-  MyCInitTexture.angle = 0.0F;
-  MyCInitTexture.sparams[0] = 1.0F;
-  MyCInitTexture.sparams[1] = 0.0F;
-  MyCInitTexture.sparams[2] = 0.0F;
-  MyCInitTexture.sparams[3] = 0.0F;
-  MyCInitTexture.tparams[0] = 0.0F;
-  MyCInitTexture.tparams[1] = 1.0F;
-  MyCInitTexture.tparams[2] = 0.0F;
-  MyCInitTexture.tparams[3] = 0.0F;
-  Update();
+  myParams->SetFilter  (Graphic3d_TOTF_TRILINEAR);
+  myParams->SetGenMode (Graphic3d_TOTM_SPHERE,
+                        Graphic3d_Vec4 (1.0f, 0.0f, 0.0f, 0.0f),
+                        Graphic3d_Vec4 (0.0f, 1.0f, 0.0f, 0.0f));
 }
 
-
-Graphic3d_TextureEnv::Graphic3d_TextureEnv(const Handle(Graphic3d_StructureManager)& SM,const Graphic3d_NameOfTextureEnv NOT)
-: Graphic3d_TextureRoot(SM, GetEnvir().ToCString() , NameOfTexture_to_FileName[NOT], Graphic3d_TOT_2D_MIPMAP),
-  myName(NOT)
+// =======================================================================
+// function : Graphic3d_TextureEnv
+// purpose  :
+// =======================================================================
+Graphic3d_TextureEnv::Graphic3d_TextureEnv (const Graphic3d_NameOfTextureEnv theNOT)
+: Graphic3d_TextureRoot (NameOfTexture_to_FileName[theNOT], Graphic3d_TOT_2D_MIPMAP),
+  myName (theNOT)
 {
-  MyCInitTexture.doModulate = 0;
-  MyCInitTexture.doRepeat = 0;
-  MyCInitTexture.Mode = (int)Graphic3d_TOTM_SPHERE;
-  MyCInitTexture.doLinear = 1;
-  MyCInitTexture.sx = 1.0F;
-  MyCInitTexture.sy = 1.0F;
-  MyCInitTexture.tx = 0.0F;
-  MyCInitTexture.ty = 0.0F;
-  MyCInitTexture.angle = 0.0F;
-  MyCInitTexture.sparams[0] = 1.0F;
-  MyCInitTexture.sparams[1] = 0.0F;
-  MyCInitTexture.sparams[2] = 0.0F;
-  MyCInitTexture.sparams[3] = 0.0F;
-  MyCInitTexture.tparams[0] = 0.0F;
-  MyCInitTexture.tparams[1] = 1.0F;
-  MyCInitTexture.tparams[2] = 0.0F;
-  MyCInitTexture.tparams[3] = 0.0F;
-  Update();
+  myPath.SetTrek (Graphic3d_TextureRoot::TexturesFolder());
+  myTexId = TCollection_AsciiString ("Graphic3d_TextureEnv_")
+          + NameOfTexture_to_FileName[theNOT];
+
+  myParams->SetFilter  (Graphic3d_TOTF_TRILINEAR);
+  myParams->SetGenMode (Graphic3d_TOTM_SPHERE,
+                        Graphic3d_Vec4 (1.0f, 0.0f, 0.0f, 0.0f),
+                        Graphic3d_Vec4 (0.0f, 1.0f, 0.0f, 0.0f));
 }
 
-Graphic3d_NameOfTextureEnv Graphic3d_TextureEnv::Name() const {
-
+// =======================================================================
+// function : Name
+// purpose  :
+// =======================================================================
+Graphic3d_NameOfTextureEnv Graphic3d_TextureEnv::Name() const
+{
   return myName;
 }
 
-Standard_Integer Graphic3d_TextureEnv::NumberOfTextures() {
-
+// =======================================================================
+// function : NumberOfTextures
+// purpose  :
+// =======================================================================
+Standard_Integer Graphic3d_TextureEnv::NumberOfTextures()
+{
   return sizeof(NameOfTexture_to_FileName)/sizeof(char*);
 }
 
-Standard_CString Graphic3d_TextureEnv::TextureName(const Standard_Integer aRank) {
-
-  if( aRank < 1 || aRank > NumberOfTextures() )
-       Standard_OutOfRange::Raise(" BAD index of texture");
-  TCollection_AsciiString filename(NameOfTexture_to_FileName[aRank-1]);
-  Standard_Integer i = filename.SearchFromEnd(".");
-
-  static TCollection_AsciiString name;
-  name = filename.SubString(5,i-1);
-  return name.ToCString();
+// =======================================================================
+// function : TextureName
+// purpose  :
+// =======================================================================
+TCollection_AsciiString Graphic3d_TextureEnv::TextureName (const Standard_Integer theRank)
+{
+  if(theRank < 1 || theRank > NumberOfTextures())
+  {
+       Standard_OutOfRange::Raise ("BAD index of texture");
+  }
+
+  TCollection_AsciiString aFileName (NameOfTexture_to_FileName[theRank - 1]);
+  Standard_Integer i = aFileName.SearchFromEnd(".");
+  return aFileName.SubString (5, i - 1);
 }
index 61246b4..fbd40cc 100755 (executable)
 -- purpose or non-infringement. Please see the License for the specific terms
 -- and conditions governing the rights and limitations under the License.
 
+deferred class TextureMap from Graphic3d
 
-deferred  class  TextureMap  from  Graphic3d  
-    
-inherits  TextureRoot  from  Graphic3d 
-    ---Purpose:  This is an abstract class for managing texture applyable on polygons.
+inherits TextureRoot from Graphic3d
+
+  ---Purpose: This is an abstract class for managing texture applyable on polygons.
 
 uses 
-    TypeOfTexture  from  Graphic3d, 
-    StructureManager    from  Graphic3d 
-
-
-is  
-    Initialize(SM        :  StructureManager  from  Graphic3d; 
-              Path      :  CString  from  Standard;
-              FileName  :  CString  from  Standard; 
-              Type      :  TypeOfTexture  from  Graphic3d);  
-              
-    EnableSmooth(me  :  mutable);
-    ---Level: public
-    ---Purpose:
-    -- enable texture smoothing
-
-    IsSmoothed(me) returns Boolean from Standard;
-    ---Level: public
-    ---Purpose:
-    -- Returns TRUE if the texture is smoothed.
-    DisableSmooth(me  :  mutable);
-    ---Level: public
-    ---Purpose:
-    -- disable texture smoothing
-
-    EnableModulate(me  :  mutable);
-    ---Level: public
-    ---Purpose:
-    -- enable texture modulate mode.
-    -- the image is modulate with the shading of the surface.
-
-    DisableModulate(me  :  mutable);
-    ---Level: public
-    ---Purpose:
-    -- disable texture modulate mode.
-    -- the image is directly decal on the surface.
-
-    IsModulate(me) returns Boolean from Standard;
-    ---Level: public
-    ---Purpose:
-    -- Returns TRUE if the texture is modulate.
-
-    EnableRepeat(me  :  mutable); 
-    ---Level: public
-    ---Purpose:
-    -- use this methods if you want to enable
-    -- texture repetition on your objects.
-
-    DisableRepeat(me  :  mutable); 
-    ---Level: public
-    ---Purpose:
-    -- use this methods if you want to disable
-    -- texture repetition on your objects.
-
-    IsRepeat(me) returns Boolean from Standard;
-    ---Level: public
-    ---Purpose:
-    -- Returns TRUE if the texture repeat is enable.
-
-end  TextureMap  from  Graphic3d; 
 
+  TypeOfTexture from Graphic3d,
+  TextureParams from Graphic3d,
+  LevelOfTextureAnisotropy from Graphic3d,
+  AsciiString   from TCollection
+
+is
+
+  Initialize (theFileName : AsciiString from TCollection;
+              theType     : TypeOfTexture from Graphic3d);
+
+  EnableSmooth (me : mutable);
+  ---Level: public
+  ---Purpose:
+  -- enable texture smoothing
+
+  IsSmoothed (me) returns Boolean from Standard;
+  ---Level: public
+  ---Purpose:
+  -- Returns TRUE if the texture is smoothed.
+
+  DisableSmooth (me : mutable);
+  ---Level: public
+  ---Purpose:
+  -- disable texture smoothing
+
+  EnableModulate (me : mutable);
+  ---Level: public
+  ---Purpose:
+  -- enable texture modulate mode.
+  -- the image is modulate with the shading of the surface.
+
+  DisableModulate (me : mutable);
+  ---Level: public
+  ---Purpose:
+  -- disable texture modulate mode.
+  -- the image is directly decal on the surface.
+
+  IsModulate (me) returns Boolean from Standard;
+  ---Level: public
+  ---Purpose:
+  -- Returns TRUE if the texture is modulate.
+
+  EnableRepeat (me : mutable);
+  ---Level: public
+  ---Purpose:
+  -- use this methods if you want to enable
+  -- texture repetition on your objects.
+
+  DisableRepeat (me : mutable);
+  ---Level: public
+  ---Purpose:
+  -- use this methods if you want to disable
+  -- texture repetition on your objects.
+
+  IsRepeat (me) returns Boolean from Standard;
+  ---Level: public
+  ---Purpose:
+  -- Returns TRUE if the texture repeat is enable.
+
+  AnisoFilter (me) returns LevelOfTextureAnisotropy from Graphic3d;
+  ---Level   : public
+  ---Purpose : @return level of anisontropy texture filter.
+  -- Default value is Graphic3d_LOTA_OFF.
+
+  SetAnisoFilter (me : mutable;
+                  theLevel : LevelOfTextureAnisotropy from Graphic3d);
+  ---Level   : public
+  ---Purpose : @param theLevel level of anisontropy texture filter.
+
+end TextureMap from Graphic3d;
index dae231c..83256ff 100755 (executable)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-// Modified :  GG 09/11/00 smooth,modulate,repeat texture attributes
-//             must be available both for textures 1D & 2D.
-
-
 #include <Graphic3d_TextureMap.ixx>
+#include <Graphic3d_TextureParams.hxx>
+
+// =======================================================================
+// function : Graphic3d_TextureMap
+// purpose  :
+// =======================================================================
+Graphic3d_TextureMap::Graphic3d_TextureMap (const TCollection_AsciiString& theFileName,
+                                            const Graphic3d_TypeOfTexture  theType)
+: Graphic3d_TextureRoot (theFileName, theType)
+{
+}
 
-Graphic3d_TextureMap::Graphic3d_TextureMap(const Handle(Graphic3d_StructureManager)& SM,const Standard_CString Path,const Standard_CString FileName,const Graphic3d_TypeOfTexture Type)
-: Graphic3d_TextureRoot(SM, Path, FileName, Type)
+// =======================================================================
+// function : EnableSmooth
+// purpose  :
+// =======================================================================
+void Graphic3d_TextureMap::EnableSmooth()
 {
+  myParams->SetFilter (Graphic3d_TOTF_TRILINEAR);
 }
 
-void Graphic3d_TextureMap::EnableSmooth() {
-  MyCInitTexture.doLinear = 1;
-  Update();
+// =======================================================================
+// function : DisableSmooth
+// purpose  :
+// =======================================================================
+void Graphic3d_TextureMap::DisableSmooth()
+{
+  myParams->SetFilter (Graphic3d_TOTF_NEAREST);
 }
 
-void Graphic3d_TextureMap::DisableSmooth() {
-  MyCInitTexture.doLinear = 0;
-  Update();
+// =======================================================================
+// function : IsSmoothed
+// purpose  :
+// =======================================================================
+Standard_Boolean Graphic3d_TextureMap::IsSmoothed() const
+{
+  return myParams->Filter() != Graphic3d_TOTF_NEAREST;
 }
 
-Standard_Boolean Graphic3d_TextureMap::IsSmoothed() const {
-  return (MyCInitTexture.doLinear != 0);
+// =======================================================================
+// function : EnableModulate
+// purpose  :
+// =======================================================================
+void Graphic3d_TextureMap::EnableModulate()
+{
+  myParams->SetModulate (Standard_True);
 }
 
-void Graphic3d_TextureMap::EnableModulate() {
-  MyCInitTexture.doModulate = 1;
-  Update();
+// =======================================================================
+// function : DisableModulate
+// purpose  :
+// =======================================================================
+void Graphic3d_TextureMap::DisableModulate()
+{
+  myParams->SetModulate (Standard_False);
 }
 
-void Graphic3d_TextureMap::DisableModulate() {
-  MyCInitTexture.doModulate = 0;
-  Update();
+// =======================================================================
+// function : IsModulate
+// purpose  :
+// =======================================================================
+Standard_Boolean Graphic3d_TextureMap::IsModulate() const
+{
+  return myParams->IsModulate();
 }
 
-Standard_Boolean Graphic3d_TextureMap::IsModulate() const {
-  return (MyCInitTexture.doModulate != 0);
+// =======================================================================
+// function : EnableRepeat
+// purpose  :
+// =======================================================================
+void Graphic3d_TextureMap::EnableRepeat()
+{
+  myParams->SetRepeat (Standard_True);
 }
 
-void Graphic3d_TextureMap::EnableRepeat() {
-  MyCInitTexture.doRepeat = 1;
-  Update();
+// =======================================================================
+// function : DisableRepeat
+// purpose  :
+// =======================================================================
+void Graphic3d_TextureMap::DisableRepeat()
+{
+  myParams->SetRepeat (Standard_False);
 }
 
-void Graphic3d_TextureMap::DisableRepeat() {
-  MyCInitTexture.doRepeat = 0;
-  Update();
+// =======================================================================
+// function : IsRepeat
+// purpose  :
+// =======================================================================
+Standard_Boolean Graphic3d_TextureMap::IsRepeat() const
+{
+  return myParams->IsRepeat();
 }
 
-Standard_Boolean Graphic3d_TextureMap::IsRepeat() const {
-  return (MyCInitTexture.doRepeat != 0);
+// =======================================================================
+// function : AnisoFilter
+// purpose  :
+// =======================================================================
+Graphic3d_LevelOfTextureAnisotropy Graphic3d_TextureMap::AnisoFilter() const
+{
+  return myParams->AnisoFilter();
 }
 
+// =======================================================================
+// function : SetAnisoFilter
+// purpose  :
+// =======================================================================
+void Graphic3d_TextureMap::SetAnisoFilter (const Graphic3d_LevelOfTextureAnisotropy theLevel)
+{
+  myParams->SetAnisoFilter (theLevel);
+}
diff --git a/src/Graphic3d/Graphic3d_TextureParams.cdl b/src/Graphic3d/Graphic3d_TextureParams.cdl
new file mode 100755 (executable)
index 0000000..25d526d
--- /dev/null
@@ -0,0 +1,171 @@
+-- Copyright (c) 2012 OPEN CASCADE SAS
+--
+-- The content of this file is subject to the Open CASCADE Technology Public
+-- License Version 6.5 (the "License"). You may not use the content of this file
+-- except in compliance with the License. Please obtain a copy of the License
+-- at http://www.opencascade.org and read it completely before using this file.
+--
+-- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
+-- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
+--
+-- The Original Code and all software distributed under the License is
+-- distributed on an "AS IS" basis, without warranty of any kind, and the
+-- Initial Developer hereby disclaims all such warranties, including without
+-- limitation, any warranties of merchantability, fitness for a particular
+-- purpose or non-infringement. Please see the License for the specific terms
+-- and conditions governing the rights and limitations under the License.
+
+class TextureParams from Graphic3d
+
+inherits Transient from Standard
+
+  ---Purpose: This class describes texture parameters.
+
+uses
+
+  Vec2                     from Graphic3d,
+  Vec4                     from Graphic3d,
+  TypeOfTextureMode        from Graphic3d,
+  TypeOfTextureFilter      from Graphic3d,
+  LevelOfTextureAnisotropy from Graphic3d
+
+is
+
+  Create
+  returns TextureParams from Graphic3d;
+  ---Purpose: Default constructor.
+
+  Destroy (me);
+  ---C++ : alias ~
+
+  --
+  -- public methods
+  --
+
+  IsModulate (me) returns Boolean from Standard;
+  ---Level   : public
+  ---Purpose : @return TRUE if the texture is modulate.
+  -- Default value is FALSE.
+
+  SetModulate (me : mutable;
+               theToModulate : Boolean from Standard);
+  ---Level   : public
+  ---Purpose : @param theToModulate turn modulation on/off.
+
+  IsRepeat (me) returns Boolean from Standard;
+  ---Level   : public
+  ---Purpose : @return TRUE if the texture repeat is enabled.
+  -- Default value is FALSE.
+
+  SetRepeat (me : mutable;
+             theToRepeat : Boolean from Standard);
+  ---Level   : public
+  ---Purpose : @param theToRepeat turn texture repeat mode ON or OFF (clamping).
+
+  Filter (me) returns TypeOfTextureFilter from Graphic3d;
+  ---Level   : public
+  ---Purpose : @return texture interpolation filter.
+  -- Default value is Graphic3d_TOTF_NEAREST.
+
+  SetFilter (me : mutable;
+             theFilter : TypeOfTextureFilter from Graphic3d);
+  ---Level   : public
+  ---Purpose : @param theFilter texture interpolation filter.
+
+  AnisoFilter (me) returns LevelOfTextureAnisotropy from Graphic3d;
+  ---Level   : public
+  ---Purpose : @return level of anisontropy texture filter.
+  -- Default value is Graphic3d_LOTA_OFF.
+
+  SetAnisoFilter (me : mutable;
+                  theLevel : LevelOfTextureAnisotropy from Graphic3d);
+  ---Level   : public
+  ---Purpose : @param theLevel level of anisontropy texture filter.
+
+  Rotation (me) returns ShortReal from Standard;
+  ---Level   : public
+  ---Purpose : @return rotation angle in degrees
+  -- Default value is 0.
+
+  SetRotation (me : mutable;
+               theAngleDegrees : ShortReal from Standard);
+  ---Level   : public
+  ---Purpose : @param theAngleDegrees rotation angle.
+
+  Scale (me) returns Vec2 from Graphic3d;
+  ---Level   : public
+  ---Purpose : @return scale factor
+  -- Default value is no scaling (1.0; 1.0).
+  ---C++     : return const &
+
+  SetScale (me : mutable;
+               theScale : Vec2 from Graphic3d);
+  ---Level   : public
+  ---Purpose : @param theScale scale factor.
+
+  Translation (me) returns Vec2 from Graphic3d;
+  ---Level   : public
+  ---Purpose : @return translation vector
+  -- Default value is no translation (0.0; 0.0).
+  ---C++     : return const &
+
+  SetTranslation (me : mutable;
+                  theVec : Vec2 from Graphic3d);
+  ---Level   : public
+  ---Purpose : @param theVec translation vector.
+
+  GenMode (me) returns TypeOfTextureMode from Graphic3d;
+  ---Level   : public
+  ---Purpose : @return texture coordinates generation mode.
+  -- Default value is Graphic3d_TOTM_MANUAL.
+
+  GenPlaneS (me) returns Vec4 from Graphic3d;
+  ---Level   : public
+  ---Purpose : @return texture coordinates generation plane S.
+  ---C++     : return const &
+
+  GenPlaneT (me) returns Vec4 from Graphic3d;
+  ---Level   : public
+  ---Purpose : @return texture coordinates generation plane T.
+  ---C++     : return const &
+
+  SetGenMode (me : mutable;
+              theMode   : TypeOfTextureMode from Graphic3d;
+              thePlaneS : Vec4 from Graphic3d;
+              thePlaneT : Vec4 from Graphic3d);
+  ---Level   : public
+  ---Purpose : Setup texture coordinates generation mode.
+
+fields
+
+  -- apply lighting on texture or not
+  myToModulate : Boolean from Standard;
+
+  -- texture wrapping mode
+  myToRepeat   : Boolean from Standard;
+
+  -- texture filter
+  myFilter     : TypeOfTextureFilter from Graphic3d;
+
+  -- level of anisontropy texture filter
+  myAnisoLevel : LevelOfTextureAnisotropy from Graphic3d;
+
+  -- texture mapping - rotation angle in degrees around OZ axis
+  myRotAngle   : ShortReal from Standard;
+
+  -- texture coordinate scale factor
+  myScale      : Vec2 from Graphic3d;
+
+  -- texture coordinate translation vector
+  myTranslation: Vec2 from Graphic3d;
+
+  -- texture coordinates generation mode
+  myGenMode    : TypeOfTextureMode from Graphic3d;
+
+  -- plane definition for s(x) coordinate (for Graphic3d_TOTM_EYE and Graphic3d_TOTM_OBJECT generation modes)
+  myGenPlaneS  : Vec4 from Graphic3d;
+
+  -- plane definition for t(y) coordinate (for Graphic3d_TOTM_EYE and Graphic3d_TOTM_OBJECT generation modes)
+  myGenPlaneT  : Vec4 from Graphic3d;
+
+end TextureParams;
diff --git a/src/Graphic3d/Graphic3d_TextureParams.cxx b/src/Graphic3d/Graphic3d_TextureParams.cxx
new file mode 100755 (executable)
index 0000000..af855d0
--- /dev/null
@@ -0,0 +1,212 @@
+// Copyright (c) 2012 OPEN CASCADE SAS
+//
+// The content of this file is subject to the Open CASCADE Technology Public
+// License Version 6.5 (the "License"). You may not use the content of this file
+// except in compliance with the License. Please obtain a copy of the License
+// at http://www.opencascade.org and read it completely before using this file.
+//
+// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
+// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
+//
+// The Original Code and all software distributed under the License is
+// distributed on an "AS IS" basis, without warranty of any kind, and the
+// Initial Developer hereby disclaims all such warranties, including without
+// limitation, any warranties of merchantability, fitness for a particular
+// purpose or non-infringement. Please see the License for the specific terms
+// and conditions governing the rights and limitations under the License.
+
+#include <Graphic3d_TextureParams.ixx>
+
+// =======================================================================
+// function : Graphic3d_TextureParams
+// purpose  :
+// =======================================================================
+Graphic3d_TextureParams::Graphic3d_TextureParams()
+: myToModulate (Standard_False),
+  myToRepeat   (Standard_False),
+  myFilter     (Graphic3d_TOTF_NEAREST),
+  myAnisoLevel (Graphic3d_LOTA_OFF),
+  myRotAngle   (0.0f),
+  myScale      (1.0f, 1.0f),
+  myTranslation(0.0f, 0.0f),
+  myGenMode    (Graphic3d_TOTM_MANUAL),
+  myGenPlaneS  (0.0f, 0.0f, 0.0f, 0.0f),
+  myGenPlaneT  (0.0f, 0.0f, 0.0f, 0.0f)
+{
+  //
+}
+
+// =======================================================================
+// function : Destroy
+// purpose  :
+// =======================================================================
+void Graphic3d_TextureParams::Destroy() const
+{
+  //
+}
+
+// =======================================================================
+// function : IsModulate
+// purpose  :
+// =======================================================================
+Standard_Boolean Graphic3d_TextureParams::IsModulate() const
+{
+  return myToModulate;
+}
+
+// =======================================================================
+// function : SetModulate
+// purpose  :
+// =======================================================================
+void Graphic3d_TextureParams::SetModulate (const Standard_Boolean theToModulate)
+{
+  myToModulate = theToModulate;
+}
+
+// =======================================================================
+// function : IsRepeat
+// purpose  :
+// =======================================================================
+Standard_Boolean Graphic3d_TextureParams::IsRepeat() const
+{
+  return myToRepeat;
+}
+
+// =======================================================================
+// function : SetRepeat
+// purpose  :
+// =======================================================================
+void Graphic3d_TextureParams::SetRepeat (const Standard_Boolean theToRepeat)
+{
+  myToRepeat = theToRepeat;
+}
+
+// =======================================================================
+// function : Filter
+// purpose  :
+// =======================================================================
+Graphic3d_TypeOfTextureFilter Graphic3d_TextureParams::Filter() const
+{
+  return myFilter;
+}
+
+// =======================================================================
+// function : SetFilter
+// purpose  :
+// =======================================================================
+void Graphic3d_TextureParams::SetFilter (const Graphic3d_TypeOfTextureFilter theFilter)
+{
+  myFilter = theFilter;
+}
+
+// =======================================================================
+// function : AnisoFilter
+// purpose  :
+// =======================================================================
+Graphic3d_LevelOfTextureAnisotropy Graphic3d_TextureParams::AnisoFilter() const
+{
+  return myAnisoLevel;
+}
+
+// =======================================================================
+// function : SetAnisoFilter
+// purpose  :
+// =======================================================================
+void Graphic3d_TextureParams::SetAnisoFilter (const Graphic3d_LevelOfTextureAnisotropy theLevel)
+{
+  myAnisoLevel = theLevel;
+}
+
+// =======================================================================
+// function : Rotation
+// purpose  :
+// =======================================================================
+Standard_ShortReal Graphic3d_TextureParams::Rotation() const
+{
+  return myRotAngle;
+}
+
+// =======================================================================
+// function : SetRotation
+// purpose  :
+// =======================================================================
+void Graphic3d_TextureParams::SetRotation (const Standard_ShortReal theAngleDegrees)
+{
+  myRotAngle = theAngleDegrees;
+}
+
+// =======================================================================
+// function : Scale
+// purpose  :
+// =======================================================================
+const Graphic3d_Vec2& Graphic3d_TextureParams::Scale() const
+{
+  return myScale;
+}
+
+// =======================================================================
+// function : SetScale
+// purpose  :
+// =======================================================================
+void Graphic3d_TextureParams::SetScale (const Graphic3d_Vec2 theScale)
+{
+  myScale = theScale;
+}
+
+// =======================================================================
+// function : Translation
+// purpose  :
+// =======================================================================
+const Graphic3d_Vec2& Graphic3d_TextureParams::Translation() const
+{
+  return myTranslation;
+}
+
+// =======================================================================
+// function : SetTranslation
+// purpose  :
+// =======================================================================
+void Graphic3d_TextureParams::SetTranslation (const Graphic3d_Vec2 theVec)
+{
+  myTranslation = theVec;
+}
+
+// =======================================================================
+// function : GenMode
+// purpose  :
+// =======================================================================
+Graphic3d_TypeOfTextureMode Graphic3d_TextureParams::GenMode() const
+{
+  return myGenMode;
+}
+
+// =======================================================================
+// function : GenPlaneS
+// purpose  :
+// =======================================================================
+const Graphic3d_Vec4& Graphic3d_TextureParams::GenPlaneS() const
+{
+  return myGenPlaneS;
+}
+
+// =======================================================================
+// function : GenPlaneT
+// purpose  :
+// =======================================================================
+const Graphic3d_Vec4& Graphic3d_TextureParams::GenPlaneT() const
+{
+  return myGenPlaneT;
+}
+
+// =======================================================================
+// function : SetGenMode
+// purpose  :
+// =======================================================================
+void Graphic3d_TextureParams::SetGenMode (const Graphic3d_TypeOfTextureMode theMode,
+                                          const Graphic3d_Vec4              thePlaneS,
+                                          const Graphic3d_Vec4              thePlaneT)
+{
+  myGenMode   = theMode;
+  myGenPlaneS = thePlaneS;
+  myGenPlaneT = thePlaneT;
+}
index dc49deb..c43548c 100755 (executable)
@@ -22,87 +22,93 @@ deferred class TextureRoot from Graphic3d
 
 inherits TShared from MMgt
 
-    ---Purpose: This is the texture root class enable the dialog with the GraphicDriver 
-    -- allows the loading of texture.
+  ---Purpose: This is the texture root class enable the dialog with the GraphicDriver allows the loading of texture.
 
 uses
 
-    CInitTexture     from Graphic3d,
-    GraphicDriver    from Graphic3d,
-    StructureManager from Graphic3d,
-    TypeOfTexture    from Graphic3d,
-    PixMap           from Image,
-    Path             from OSD,
-    HArray1OfReal    from TColStd
+  TextureParams from Graphic3d,
+  TypeOfTexture from Graphic3d,
+  PixMap        from Image,
+  PixMap_Handle from Image,
+  Path          from OSD,
+  AsciiString   from TCollection
 
 is
 
-    Initialize (theSM       :  StructureManager from Graphic3d;
-                thePath     :  CString from Standard;
-                theFileName :  CString from Standard;
-                theType     :  TypeOfTexture from Graphic3d);
-    ---Purpose: Creates a texture from a file         
-    --  Warning: Note that if <FileName> is NULL the texture must be realized
-    -- using LoadTexture(image) method.
-
-    Destroy (me);
-    ---C++ : alias ~
-
-    --
-    -- public methods
-    --
-
-    IsDone (me) returns Boolean from Standard;
-    ---Level: public
-    ---Purpose: Checks if a texture class is valid or not
-    -- returns true if the construction of the class is correct
-
-    IsValid (me) returns Boolean from Standard;
-    ---Level: public
-    ---Purpose: Checks if a texture class is valid or not
-    -- returns true if the construction of the class is correct
-
-    Path (me) returns Path from OSD;
-    ---Level: public
-    ---Purpose:
-    -- Returns the full path of the defined texture.
-    ---C++: return const &
-
-    Type (me) returns TypeOfTexture from Graphic3d;
-    ---Level: public
-    ---Purpose:
-    -- Returns the texture type.
-
-    LoadTexture (me : mutable; theImage : PixMap from Image) returns Boolean from Standard;
-    ---Level: advanced
-    ---Purpose:
-    -- Updates the current texture from a requested image.
-
-    TextureId (me) returns Integer from Standard;
-    ---Level: advanced
-    ---Purpose:
-    -- returns the Texture ID which references the
-    -- texture to use for drawing. Used by the graphic driver.
-
-    GetTexUpperBounds(me) returns HArray1OfReal from TColStd;
-    ---Level: advanced
-    ---Purpose:
-    ---Gets upper bounds of texture coordinates. This is used when sizes
-    ---of texture are not equal to the powers of two
-
-    --
-    -- private methods
-    --
-
-    Update (me) is protected;
+  Initialize (theFileName : AsciiString from TCollection;
+              theType     : TypeOfTexture from Graphic3d);
+  ---Purpose: Creates a texture from a file
+  --  Warning: Note that if <FileName> is NULL the texture must be realized
+  -- using LoadTexture(image) method.
+
+  Destroy (me);
+  ---C++ : alias ~
+
+  --
+  -- public methods
+  --
+
+  IsDone (me) returns Boolean from Standard
+  is virtual;
+  ---Level:   public
+  ---Purpose: Checks if a texture class is valid or not.
+  -- @return true if the construction of the class is correct
+
+  Path (me) returns Path from OSD;
+  ---Level:   public
+  ---Purpose:
+  -- Returns the full path of the defined texture.
+  -- It could be empty path if GetImage() is overridden to load image not from file.
+  ---C++: return const &
+
+  Type (me) returns TypeOfTexture from Graphic3d;
+  ---Level:   public
+  ---Purpose: @return the texture type.
+
+  GetId (me) returns AsciiString from TCollection;
+  ---Level:   advanced
+  ---Purpose:
+  -- This ID will be used to manage resource in graphic driver.
+  -- .
+  -- Default implementation generates unique ID although inheritors may re-initialize it.
+  -- .
+  -- Multiple Graphic3d_TextureRoot instancies with same ID
+  -- will be treated as single texture with different parameters
+  -- to optimize memory usage though this will be more natural
+  -- to use same instance of Graphic3d_TextureRoot when possible.
+  -- .
+  -- Notice that inheritor may set this ID to empty string.
+  -- In this case independent graphical resource will be created
+  -- for each instance of Graphic3d_AspectFillArea3d where texture will be used.
+  -- .
+  -- @return texture identifier.
+
+  GetImage (me) returns PixMap_Handle from Image
+  is virtual;
+  ---Level   : Public
+  ---Purpose :
+  -- This method will be called by graphic driver each time when texture resource should be created.
+  -- Default implementation will dynamically load image from specified path within this method
+  -- (and no copy will be preserved in this class instance).
+  -- Inheritors may dynamically generate the image or return cached instance.
+  -- @return the image for texture.
+
+  GetParams (me) returns TextureParams from Graphic3d;
+  ---Level: public
+  ---Purpose: @return low-level texture parameters
+  ---C++: return const &
+
+  TexturesFolder (myclass) returns AsciiString from TCollection;
+  ---Level   : Public
+  ---Purpose :
+  -- The path to textures determined from CSF_MDTVTexturesDirectory or CASROOT environment variables.
+  -- @return the root folder with default textures.
 
 fields
 
-    myGraphicDriver  : GraphicDriver from Graphic3d;
-    myTexId          : Integer from Standard;
-    MyCInitTexture   : CInitTexture from Graphic3d is protected;
-    myPath           : Path from OSD;
-    myType           : TypeOfTexture from Graphic3d;
-    myTexUpperBounds : HArray1OfReal from TColStd;
+  myParams : TextureParams from Graphic3d is protected;
+  myTexId  : AsciiString from TCollection is protected;
+  myPath   : Path from OSD is protected;
+  myType   : TypeOfTexture from Graphic3d;
 
 end TextureRoot;
index e0be31b..bfb6117 100755 (executable)
 
 #include <Image_AlienPixMap.hxx>
 
+#include <OSD_Directory.hxx>
+#include <OSD_Environment.hxx>
+#include <OSD_Path.hxx>
 #include <OSD_Protection.hxx>
 #include <OSD_File.hxx>
-#include <stdio.h>
+#include <Standard_Atomic.hxx>
+
+namespace
+{
+  static volatile Standard_Integer THE_TEXTURE_COUNTER = 0;
+};
 
 // =======================================================================
-// function : Graphic3d_TextureRoot
+// function : TexturesFolder
 // purpose  :
 // =======================================================================
-Graphic3d_TextureRoot::Graphic3d_TextureRoot (const Handle(Graphic3d_StructureManager)& theSM,
-                                              const Standard_CString                    thePath,
-                                              const Standard_CString                    theFileName,
-                                              const Graphic3d_TypeOfTexture             theType)
-: myGraphicDriver (Handle(Graphic3d_GraphicDriver)::DownCast (theSM->GraphicDevice()->GraphicDriver())),
-  myTexId (-1),
-  myPath (theFileName),
-  myType (theType),
-  myTexUpperBounds (new TColStd_HArray1OfReal (1, 2)) // currently always allocating an array for two texture bounds...
+TCollection_AsciiString Graphic3d_TextureRoot::TexturesFolder()
 {
-  if (thePath != NULL && (strlen (thePath) > 0))
-  {
-    myPath.SetTrek (TCollection_AsciiString (thePath));
-  }
-
-  if (theFileName == NULL || (strlen (theFileName) <= 0))
-  {
-    return;
-  }
-
-  TCollection_AsciiString aFilePath;
-  myPath.SystemName (aFilePath);
-  Image_AlienPixMap anImage;
-  if (!anImage.Load (aFilePath))
+  static Standard_Boolean IsDefined = Standard_False;
+  static TCollection_AsciiString VarName;
+  if (!IsDefined)
   {
-    return;
+    IsDefined = Standard_True;
+    OSD_Environment aTexDirEnv ("CSF_MDTVTexturesDirectory");
+    VarName = aTexDirEnv.Value();
+    if (VarName.IsEmpty())
+    {
+      OSD_Environment aCasRootEnv ("CASROOT");
+      VarName = aCasRootEnv.Value();
+      if (!VarName.IsEmpty())
+      {
+        VarName += "/src/Textures";
+      }
+    }
+
+    if (VarName.IsEmpty())
+    {
+      std::cerr << " CSF_MDTVTexturesDirectory and CASROOT not setted\n";
+      std::cerr << " one of these variable are mandatory to use this functionality\n";
+      Standard_Failure::Raise ("CSF_MDTVTexturesDirectory and CASROOT not setted");
+      return VarName;
+    }
+
+    const OSD_Path aDirPath (VarName);
+    OSD_Directory aDir (aDirPath);
+    const TCollection_AsciiString aTexture = VarName + "/2d_MatraDatavision.rgb";
+    OSD_File aTextureFile (aTexture);
+    if (!aDir.Exists() || !aTextureFile.Exists())
+    {
+      std::cerr << " CSF_MDTVTexturesDirectory or CASROOT not correctly setted\n";
+      std::cerr << " not all files are found in : "<< VarName.ToCString() << std::endl;
+      Standard_Failure::Raise ("CSF_MDTVTexturesDirectory or CASROOT not correctly setted");
+      return VarName;
+    }
   }
-
-  myTexId = myGraphicDriver->CreateTexture (myType, anImage, theFileName, myTexUpperBounds);
-  Update();
+  return VarName;
 }
 
 // =======================================================================
-// function : Destroy
+// function : Graphic3d_TextureRoot
 // purpose  :
 // =======================================================================
-void Graphic3d_TextureRoot::Destroy() const
+Graphic3d_TextureRoot::Graphic3d_TextureRoot (const TCollection_AsciiString& theFileName,
+                                              const Graphic3d_TypeOfTexture  theType)
+: myParams (new Graphic3d_TextureParams()),
+  myPath   (theFileName),
+  myType   (theType)
 {
-  if (IsValid())
-  {
-    myGraphicDriver->DestroyTexture (myTexId);
-  }
+  myTexId = TCollection_AsciiString ("Graphic3d_TextureRoot_") //DynamicType()->Name()
+          + TCollection_AsciiString (Standard_Atomic_Increment (&THE_TEXTURE_COUNTER));
 }
 
 // =======================================================================
-// function : TextureId
+// function : Destroy
 // purpose  :
 // =======================================================================
-Standard_Integer Graphic3d_TextureRoot::TextureId() const
+void Graphic3d_TextureRoot::Destroy() const
 {
-  return myTexId;
+  //
 }
 
 // =======================================================================
-// function : Update
+// function : GetId
 // purpose  :
 // =======================================================================
-void Graphic3d_TextureRoot::Update() const
+TCollection_AsciiString Graphic3d_TextureRoot::GetId() const
 {
-  if (IsValid())
-  {
-    myGraphicDriver->ModifyTexture (myTexId, MyCInitTexture);
-  }
+  return myTexId;
 }
 
 // =======================================================================
-// function : IsValid
+// function : GetParams
 // purpose  :
 // =======================================================================
-Standard_Boolean Graphic3d_TextureRoot::IsValid() const
+const Handle(Graphic3d_TextureParams)& Graphic3d_TextureRoot::GetParams() const
 {
-  return myTexId >= 0;
+  return myParams;
 }
 
 // =======================================================================
-// function : IsDone
+// function : GetImage
 // purpose  :
 // =======================================================================
-Standard_Boolean Graphic3d_TextureRoot::IsDone() const
+Handle(Image_PixMap) Graphic3d_TextureRoot::GetImage() const
 {
-  return myTexId >= 0;
+  TCollection_AsciiString aFilePath;
+  myPath.SystemName (aFilePath);
+  if (aFilePath.IsEmpty())
+  {
+    return Handle(Image_PixMap)();
+  }
+
+  Handle(Image_AlienPixMap) anImage = new Image_AlienPixMap();
+  if (!anImage->Load (aFilePath))
+  {
+    return Handle(Image_PixMap)();
+  }
+
+  return anImage;
 }
 
 // =======================================================================
-// function : LoadTexture
+// function : IsDone
 // purpose  :
 // =======================================================================
-Standard_Boolean Graphic3d_TextureRoot::LoadTexture (const Image_PixMap& theImage)
+Standard_Boolean Graphic3d_TextureRoot::IsDone() const
 {
-  if (myTexId >= 0)
-  {
-    myGraphicDriver->DestroyTexture (myTexId);
-  }
-
-  myTexId = myGraphicDriver->CreateTexture (myType, theImage, "", myTexUpperBounds);
-  Update();
-  return IsValid();
+  OSD_File aTextureFile (myPath);
+  return aTextureFile.Exists();
 }
 
 // =======================================================================
@@ -148,12 +172,3 @@ Graphic3d_TypeOfTexture Graphic3d_TextureRoot::Type() const
 {
   return myType;
 }
-
-// =======================================================================
-// function : GetTexUpperBounds
-// purpose  :
-// =======================================================================
-Handle(TColStd_HArray1OfReal) Graphic3d_TextureRoot::GetTexUpperBounds() const
-{
-  return myTexUpperBounds;
-}
similarity index 76%
copy from src/Graphic3d/Graphic3d_CInitTexture.cxx
copy to src/Graphic3d/Graphic3d_Vec2.hxx
index 452dba4..2e796bd 100755 (executable)
@@ -1,4 +1,4 @@
-// Copyright (c) 1999-2012 OPEN CASCADE SAS
+// Copyright (c) 2012 OPEN CASCADE SAS
 //
 // The content of this file is subject to the Open CASCADE Technology Public
 // License Version 6.5 (the "License"). You may not use the content of this file
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
+#ifndef _Graphic3d_Vec2_HeaderFile
+#define _Graphic3d_Vec2_HeaderFile
 
+#include <NCollection_Vec2.hxx>
+#include <Standard_TypeDef.hxx>
 
-#include <Graphic3d_CInitTexture.hxx>
+typedef NCollection_Vec2<Standard_ShortReal> Graphic3d_Vec2;
 
-const Handle(Standard_Type)& TYPE(Graphic3d_CInitTexture)
-{
-  static Handle(Standard_Type) _atype = 
-    new Standard_Type ("Graphic3d_CInitTexture", sizeof (Graphic3d_CInitTexture));
-  return _atype;
-}
+#endif // _Graphic3d_Vec2_HeaderFile
similarity index 76%
copy from src/Graphic3d/Graphic3d_CInitTexture.cxx
copy to src/Graphic3d/Graphic3d_Vec3.hxx
index 452dba4..3c194d1 100755 (executable)
@@ -1,4 +1,4 @@
-// Copyright (c) 1999-2012 OPEN CASCADE SAS
+// Copyright (c) 2012 OPEN CASCADE SAS
 //
 // The content of this file is subject to the Open CASCADE Technology Public
 // License Version 6.5 (the "License"). You may not use the content of this file
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
+#ifndef _Graphic3d_Vec3_HeaderFile
+#define _Graphic3d_Vec3_HeaderFile
 
+#include <NCollection_Vec3.hxx>
+#include <Standard_TypeDef.hxx>
 
-#include <Graphic3d_CInitTexture.hxx>
+typedef NCollection_Vec3<Standard_ShortReal> Graphic3d_Vec3;
 
-const Handle(Standard_Type)& TYPE(Graphic3d_CInitTexture)
-{
-  static Handle(Standard_Type) _atype = 
-    new Standard_Type ("Graphic3d_CInitTexture", sizeof (Graphic3d_CInitTexture));
-  return _atype;
-}
+#endif // _Graphic3d_Vec3_HeaderFile
similarity index 76%
copy from src/Graphic3d/Graphic3d_CInitTexture.cxx
copy to src/Graphic3d/Graphic3d_Vec4.hxx
index 452dba4..5ae18e9 100755 (executable)
@@ -1,4 +1,4 @@
-// Copyright (c) 1999-2012 OPEN CASCADE SAS
+// Copyright (c) 2012 OPEN CASCADE SAS
 //
 // The content of this file is subject to the Open CASCADE Technology Public
 // License Version 6.5 (the "License"). You may not use the content of this file
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
+#ifndef _Graphic3d_Vec4_HeaderFile
+#define _Graphic3d_Vec4_HeaderFile
 
+#include <NCollection_Vec4.hxx>
+#include <Standard_TypeDef.hxx>
 
-#include <Graphic3d_CInitTexture.hxx>
+typedef NCollection_Vec4<Standard_ShortReal> Graphic3d_Vec4;
 
-const Handle(Standard_Type)& TYPE(Graphic3d_CInitTexture)
-{
-  static Handle(Standard_Type) _atype = 
-    new Standard_Type ("Graphic3d_CInitTexture", sizeof (Graphic3d_CInitTexture));
-  return _atype;
-}
+#endif // _Graphic3d_Vec4_HeaderFile
index 84ca817..771f9ce 100755 (executable)
@@ -8,6 +8,7 @@ Image.edl
 Image_CMPLRS.edl
 Image_PixMap.hxx
 Image_PixMap.cxx
+Image_PixMap_Handle.hxx
 Image_PixMapData.hxx
 Image_Color.hxx
 Image_AlienPixMap.hxx
index e0d2a41..7516048 100644 (file)
@@ -21,6 +21,7 @@
 #define _Image_PixMap_H__
 
 #include <Image_PixMapData.hxx>
+#include <Image_PixMap_Handle.hxx>
 #include <Standard_Transient.hxx>
 #include <Quantity_Color.hxx>
 
@@ -289,6 +290,4 @@ public:
 
 };
 
-DEFINE_STANDARD_HANDLE(Image_PixMap, Standard_Transient)
-
 #endif // _Image_PixMap_H__
old mode 100755 (executable)
new mode 100644 (file)
similarity index 51%
rename from src/OpenGl/OpenGl_ResourceTexture.hxx
rename to src/Image/Image_PixMap_Handle.hxx
index c117ef9..ebaa1e8
@@ -1,6 +1,4 @@
-// Created on: 2011-03-18
-// Created by: Anton POLETAEV
-// Copyright (c) 2011-2012 OPEN CASCADE SAS
+// Copyright (c) 2012 OPEN CASCADE SAS
 //
 // The content of this file is subject to the Open CASCADE Technology Public
 // License Version 6.5 (the "License"). You may not use the content of this file
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
+#ifndef _Image_PixMap_Handle_H__
+#define _Image_PixMap_Handle_H__
 
-#ifndef _OPENGL_RESOURCETEXTURE_H
-#define _OPENGL_RESOURCETEXTURE_H
+#include <Standard_DefineHandle.hxx>
+#include <Handle_Standard_Transient.hxx>
 
-#include <OpenGl_Resource.hxx>
-#include <Standard.hxx>
+class Image_PixMap;
+DEFINE_STANDARD_HANDLE(Image_PixMap, Standard_Transient)
+typedef Handle(Image_PixMap) Image_PixMap_Handle;
 
-class OpenGl_Resource;
-
-//! OpenGl_ResourceTexture represents the texture resource
-//! for OpenGl_ResourceCleaner
-class OpenGl_ResourceTexture : public OpenGl_Resource 
-{
-
-public:
-
-  //! Constructor
-  Standard_EXPORT OpenGl_ResourceTexture (const GLuint theId);
-
-  //! Destructor
-  Standard_EXPORT virtual ~OpenGl_ResourceTexture();
-
-  //! Destroy object - will release GPU memory if any.
-  Standard_EXPORT virtual void Release (const OpenGl_Context* theGlCtx);
-
-protected:
-
-  GLuint myTextureId; //!< Texture name (index)
-
-public:
-
-  DEFINE_STANDARD_RTTI(OpenGl_ResourceTexture) // Type definition
-
-};
-
-DEFINE_STANDARD_HANDLE(OpenGl_ResourceTexture,OpenGl_Resource)
-
-#endif
+#endif // _Image_PixMap_Handle_H__
index 6436c5b..84e73ee 100755 (executable)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-/*
- * modified 27/08/97 ; PCT : ajout texture mapping
- * modified 08/04/98 ; FGU : ajout parametres d emission (CALL_DEF_MATERIAL)
- * modified 30/11/98 ; FMN : ajout parametres pour les textes visibles
- * modified 24/01/00 ; EUG : G003 add DegenerationMode flag and SkipRatio value in
- *                         CALL_DEF_STRUCTURE.
- * modified 22/03/04 ; SAN : OCC4895 High-level interface for controlling polygon offsets
- *
- */
-
-
 #ifndef InterfaceGraphic_Graphic3dHeader
 #define InterfaceGraphic_Graphic3dHeader
 
 #include <InterfaceGraphic_PrimitiveArray.hxx>
-
-#define G003    /*EUG 26-01-00 Degeneration management
-*/
-
-#define OCC1174 /*SAV 08/01/03 CONTEXTFILLAREA extended with back face interior color*/
-
-#define OCC2934 /* SAN 22/01/04 Texture mapped fonts on WNT */
+#include <Standard_Transient.hxx>
 
 #ifdef THIS
-        #undef THIS
+  #undef THIS
 #endif
 
 #define CALL_DEF_STRUCTHIGHLIGHTED      1
@@ -259,7 +242,7 @@ typedef struct {
         int HAlign;
 
         int VAlign;
-       
+
         bool Zoomable;
 
 } CALL_DEF_TEXT;
@@ -378,88 +361,14 @@ typedef struct {
         float Shininess;
 
         float EnvReflexion;
-        
+
         int IsPhysic;
 
         /* Attribut couleur eclairage */
-        CALL_DEF_COLOR ColorAmb, ColorDif, ColorSpec, ColorEms, Color; 
-        
-
-} CALL_DEF_MATERIAL;
-
-
-/* TEXTURE */
-
-typedef struct
-{
-  int doModulate;
-  int doRepeat;
-  int Mode;
-  int doLinear;
-  float sx, sy;
-  float tx, ty;
-  float angle;
-
-  float sparams[4];
-  float tparams[4];
-
-} CALL_DEF_INIT_TEXTURE;
-
-
-typedef struct
-{
-  int TexId;
-  int doTextureMap;
-
-} CALL_DEF_TEXTURE;
-
-
-
-/* CONTEXTE POLYGONE */
-
-typedef struct {
-
-        int IsDef;
-
-        int IsSet;
-
-        int Style;
-
-        CALL_DEF_COLOR IntColor;
-
-#ifdef OCC1174
-        CALL_DEF_COLOR BackIntColor;
-#endif
-
-        CALL_DEF_COLOR EdgeColor;
-
-        int LineType;
-
-        float Width;
-
-        int Hatch;
-
-        int Distinguish;
-        int BackFace;
+        CALL_DEF_COLOR ColorAmb, ColorDif, ColorSpec, ColorEms, Color;
 
-        int Edge;
 
-        CALL_DEF_MATERIAL Front;
-        CALL_DEF_MATERIAL Back;
-
-        CALL_DEF_TEXTURE Texture;
-
-#ifdef G003
-        int   DegenerationMode;
-        float SkipRatio;
-#endif
-        /* OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets */
-        int   PolygonOffsetMode;
-        float PolygonOffsetFactor;
-        float PolygonOffsetUnits;
-        /* OCC4895 SAN 22/03/04 High-level interface for controlling polygon offsets */
-
-} CALL_DEF_CONTEXTFILLAREA;
+} CALL_DEF_MATERIAL;
 
 
 /* CONTEXTE MARKER */
@@ -494,20 +403,20 @@ typedef struct {
         float Expan;
 
         CALL_DEF_COLOR Color;
-        
+
         int Style;
-        
+
         int DisplayType;
 
         CALL_DEF_COLOR ColorSubTitle;
 
        int TextZoomable;
-       
+
        float TextAngle;
 
        int TextFontAspect;
-       
-       
+
+
 } CALL_DEF_CONTEXTTEXT;
 
 /* Transform persistence struct */
@@ -519,72 +428,6 @@ typedef struct
         CALL_DEF_POINT Point;
 } CALL_DEF_TRANSFORM_PERSISTENCE;
 
-/* STRUCTURE */
-
-typedef struct {
-
-        int Id;
-        void *ptrStructure;
-
-        int Priority;
-        int PreviousPriority;
-        int GroupBegin;
-        int GroupEnd;
-
-        CALL_DEF_CONTEXTLINE ContextLine;
-        CALL_DEF_CONTEXTFILLAREA ContextFillArea;
-        CALL_DEF_CONTEXTMARKER ContextMarker;
-        CALL_DEF_CONTEXTTEXT ContextText;
-
-        CALL_DEF_BOUNDBOX BoundBox;
-
-        float Transformation[4][4];
-        int Composition;
-
-        int ContainsFacet;
-
-        unsigned IsDeleted      :1;
-        unsigned IsOpen         :1;
-        unsigned IsInfinite     :1;
-        unsigned stick          :1;
-        unsigned highlight      :1;
-        unsigned visible        :1;
-        unsigned pick           :1;
-        unsigned HLRValidation  :1;
-        /* ABD 29/10/04  Transform Persistence of Presentation( pan, zoom, rotate ) */
-       /*int          TransformPersistenceFlag;
-        CALL_DEF_POINT TransformPersistencePoint;
-       */
-        CALL_DEF_TRANSFORM_PERSISTENCE TransformPersistence;
-       /* ABD 29/10/04  Transform Persistence of Presentation( pan, zoom, rotate ) */
-} CALL_DEF_STRUCTURE;
-
-
-/* GROUPE */
-
-typedef struct {
-
-        int LabelBegin;
-        int LabelEnd;
-        void *ptrGroup;
-
-        int StructureEnd;
-
-        CALL_DEF_CONTEXTLINE ContextLine;
-        CALL_DEF_CONTEXTFILLAREA ContextFillArea;
-        CALL_DEF_CONTEXTMARKER ContextMarker;
-        CALL_DEF_CONTEXTTEXT ContextText;
-
-        CALL_DEF_STRUCTURE *Struct;
-
-        CALL_DEF_PICKID PickId;
-
-        unsigned IsDeleted      :1;
-        unsigned IsOpen         :1;
-        /*int   TransformPersistenceFlag;*/
-
-} CALL_DEF_GROUP;
-
 /* BOUNDING BOX */
 
 typedef struct {
@@ -592,7 +435,7 @@ typedef struct {
         float XMin;
         float YMin;
         float ZMin;
-    
+
         float XMax;
         float YMax;
         float ZMax;
index 9d98334..1dc74d0 100755 (executable)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #ifndef InterfaceGraphic_Visual3dHeader
 #define InterfaceGraphic_Visual3dHeader
 
-       /* CAL 02/08/94
-        * #include <InterfaceGraphic_X11.hxx>
-        *   Retrait de InterfaceGraphic_X11.hxx et declaration de Window
-        * a la mode X11 dans les structures CALL_DEF_VIEW et CALL_DEF_PICK.
-        *   En effet, un #define Opposite 4 se trouve dans X11/X.h
-        * et rentre en conflit avec la methode Opposite de math_Matrix.
-        *
-        * PCT 05/08/97
-        * ajout support texture mapping
-        *
-         * EUG 21/09/99 G003
-         *  degenerated mode support
-            Add fields IsDegenerates,IsDegeneratesPrev,Backfacing
-           in CALL_DEF_VIEW structure.
-        * VKH 25/01/00 G004
-        * Dump a view
-          Add CALL_DEF_BITMAP reference in CALL_DEF_VIEW
-        */
-
-#ifndef RIC120302
-#define RIC120302       /*GG Add NEW fields in CALL_DEF_VIEW structure
-//                      to manage graphic context and call back
-*/
-#endif
-
 #include <InterfaceGraphic_Aspect.hxx>
-#ifdef RIC120302
+#include <InterfaceGraphic_Graphic3d.hxx>
 #include <Aspect_RenderingContext.hxx>
 #include <Aspect_GraphicCallbackProc.hxx>
-#endif
+#include <Standard_Transient.hxx>
 
 typedef float CALL_DEF_MATRIX4X4[4][4];
 
@@ -151,80 +125,6 @@ typedef struct {
 
 } CALL_DEF_VIEWMAPPING;
 
-
-/* CONTEXT */
-
- typedef struct {
-
-       int Aliasing;
-
-       int BackZClipping;
-       int FrontZClipping;
-
-       int DepthCueing;
-
-       float ZClipFrontPlane;
-       float ZClipBackPlane;
-
-       float DepthFrontPlane;
-       float DepthBackPlane;
-
-       int ZBufferActivity;
-       int Model;
-       int Visualization;
-
-       int NbActiveLight;
-       CALL_DEF_LIGHT *ActiveLight;
-
-       int NbActivePlane;
-       CALL_DEF_PLANE *ActivePlane;
-
-       int TexEnvId;
-       int SurfaceDetail;
-
-} CALL_DEF_VIEWCONTEXT;
-
-
-/* VUE */
-
-typedef struct {
-
-       int WsId;
-       int ViewId;
-       void *ptrView;
-
-       int IsDeleted;
-       int IsOpen;
-
-       int Active;
-
-       CALL_DEF_VIEWORIENTATION Orientation;
-       CALL_DEF_VIEWMAPPING Mapping;
-
-       CALL_DEF_VIEWORIENTATION OrientationReset;
-       CALL_DEF_VIEWMAPPING MappingReset;
-
-       CALL_DEF_VIEWCONTEXT Context;
-
-       CALL_DEF_WINDOW DefWindow;
-
-       void *ptrUnderLayer;
-       void *ptrOverLayer;
-
-        int IsDegenerates;
-        int IsDegeneratesPrev;
-        int Backfacing;
-#ifdef RIC120302
-        Aspect_RenderingContext GContext;
-        Aspect_GraphicCallbackProc GDisplayCB;
-        void* GClientData;
-#endif
-
-  void *ptrFBO;
-
-} CALL_DEF_VIEW;
-
-
 /* REPERAGE */
 
 typedef struct {
index 8de4fcf..566f3f7 100755 (executable)
@@ -30,6 +30,7 @@
 #include <Graphic3d_Vertex.hxx>
 #include <Graphic3d_Group.hxx>
 #include <Graphic3d_Array1OfVertex.hxx>
+#include <Graphic3d_TextureParams.hxx>
 
 #include <Prs3d_ShadingAspect.hxx>
 #include <Prs3d_Root.hxx>
 */
 class MeshVS_ImageTexture2D : public Graphic3d_Texture2D
 {
+
 public:
-  MeshVS_ImageTexture2D (Handle(Graphic3d_StructureManager) theSM,
-                         const Image_PixMap&                theImg);
-  virtual ~MeshVS_ImageTexture2D();
+
+  MeshVS_ImageTexture2D (const Handle(Image_PixMap)& theImg)
+  : Graphic3d_Texture2D ("", Graphic3d_TOT_2D),
+    myImage (theImg)
+  {
+    myParams->SetModulate (Standard_True);
+    myParams->SetFilter   (Graphic3d_TOTF_BILINEAR);
+  }
+
+  virtual ~MeshVS_ImageTexture2D()
+  {
+    //
+  }
+
+  virtual Standard_Boolean IsDone() const
+  {
+    return !myImage.IsNull() && !myImage->IsEmpty();
+  }
+
+  virtual Handle(Image_PixMap) GetImage() const
+  {
+    return myImage;
+  }
+
+private:
+
+  Handle(Image_PixMap) myImage;
 
 public:
+
   DEFINE_STANDARD_RTTI(MeshVS_ImageTexture2D)
+
 };
 
 DEFINE_STANDARD_HANDLE    (MeshVS_ImageTexture2D, Graphic3d_Texture2D)
 IMPLEMENT_STANDARD_HANDLE (MeshVS_ImageTexture2D, Graphic3d_Texture2D)
 IMPLEMENT_STANDARD_RTTIEXT(MeshVS_ImageTexture2D, Graphic3d_Texture2D)
 
-MeshVS_ImageTexture2D::MeshVS_ImageTexture2D (Handle(Graphic3d_StructureManager) theSM,
-                                              const Image_PixMap&                theImg)
-: Graphic3d_Texture2D (theSM, "", Graphic3d_TOT_2D)
-{
-  MyCInitTexture.doModulate = 1;
-  MyCInitTexture.doRepeat = 0;
-  MyCInitTexture.Mode = (int)Graphic3d_TOTM_MANUAL;
-  MyCInitTexture.doLinear = 1;
-  MyCInitTexture.sx = 1.0F;
-  MyCInitTexture.sy = 1.0F;
-  MyCInitTexture.tx = 0.0F;
-  MyCInitTexture.ty = 0.0F;
-  MyCInitTexture.angle = 0.0F;
-  MyCInitTexture.sparams[0] = 0.0F;
-  MyCInitTexture.sparams[1] = 0.0F;
-  MyCInitTexture.sparams[2] = 0.0F;
-  MyCInitTexture.sparams[3] = 0.0F;
-  MyCInitTexture.tparams[0] = 0.0F;
-  MyCInitTexture.tparams[1] = 0.0F;
-  MyCInitTexture.tparams[2] = 0.0F;
-  MyCInitTexture.tparams[3] = 0.0F;
-  Update();
-  LoadTexture(theImg);
-}
-
-MeshVS_ImageTexture2D::~MeshVS_ImageTexture2D()
-{
-}
-
 //================================================================
 // Function : getNearestPow2
 // Purpose  : Returns the nearest power of two greater than the
@@ -723,21 +722,15 @@ Handle(Graphic3d_Texture2D) MeshVS_NodalColorPrsBuilder::CreateTexture() const
     return NULL;
   }
 
-  Handle(PrsMgr_PresentationManager3d) aPrsMgr = GetPresentationManager();
-  if (aPrsMgr.IsNull())
-  {
-    return NULL;
-  }
-
   // create and fill image with colors
-  Image_PixMap anImage;
-  if (!anImage.InitTrash (Image_PixMap::ImgRGBA, Standard_Size(getNearestPow2 (aColorsNb)), 2))
+  Handle(Image_PixMap) anImage = new Image_PixMap();
+  if (!anImage->InitTrash (Image_PixMap::ImgRGBA, Standard_Size(getNearestPow2 (aColorsNb)), 2))
   {
     return NULL;
   }
 
-  anImage.SetTopDown (false);
-  Image_PixMapData<Image_ColorRGBA>& aData = anImage.EditData<Image_ColorRGBA>();
+  anImage->SetTopDown (false);
+  Image_PixMapData<Image_ColorRGBA>& aData = anImage->EditData<Image_ColorRGBA>();
   for (Standard_Size aCol = 0; aCol < Standard_Size(aColorsNb); ++aCol)
   {
     const Quantity_Color& aSrcColor = myTextureColorMap.Value (Standard_Integer(aCol) + 1);
@@ -759,7 +752,7 @@ Handle(Graphic3d_Texture2D) MeshVS_NodalColorPrsBuilder::CreateTexture() const
   }};
 
   // fill second row
-  for (Standard_Size aCol = (Standard_Size )aColorsNb; aCol < anImage.SizeX(); ++aCol)
+  for (Standard_Size aCol = (Standard_Size )aColorsNb; aCol < anImage->SizeX(); ++aCol)
   {
     aData.ChangeValue (0, aCol) = aLastColor;
   }
@@ -771,11 +764,11 @@ Handle(Graphic3d_Texture2D) MeshVS_NodalColorPrsBuilder::CreateTexture() const
     int(255.0 * myInvalidColor.Blue()),
     0xFF
   }};
-  for (Standard_Size aCol = 0; aCol < anImage.SizeX(); ++aCol)
+  for (Standard_Size aCol = 0; aCol < anImage->SizeX(); ++aCol)
   {
     aData.ChangeValue (1, aCol) = anInvalidColor;
   }
 
   // create texture
-  return new MeshVS_ImageTexture2D (aPrsMgr->StructureManager(), anImage);
+  return new MeshVS_ImageTexture2D (anImage);
 }
index 36814cb..fed4214 100644 (file)
 #ifndef _NCollection_Vec2_H__
 #define _NCollection_Vec2_H__
 
+#include <cmath> // std::sqrt()
+
 //! Auxiliary macros to define couple of similar access components as vector methods.
 //! @return 2 components by their names in specified order
 #define NCOLLECTION_VEC_COMPONENTS_2D(theX, theY) \
-  const NCollection_Vec2<Element_t> theX##theY##() const { return NCollection_Vec2<Element_t>(theX##(), theY##()); } \
-  const NCollection_Vec2<Element_t> theY##theX##() const { return NCollection_Vec2<Element_t>(theY##(), theX##()); }
+  const NCollection_Vec2<Element_t> theX##theY() const { return NCollection_Vec2<Element_t>(theX(), theY()); } \
+  const NCollection_Vec2<Element_t> theY##theX() const { return NCollection_Vec2<Element_t>(theY(), theX()); }
 
 //! Defines the 2D-vector template.
 //! The main target for this class - to handle raw low-level arrays (from/to graphic driver etc.).
index 33fbdae..1e5bd82 100644 (file)
 
 //! Auxiliary macros to define couple of similar access components as vector methods
 #define NCOLLECTION_VEC_COMPONENTS_3D(theX, theY, theZ) \
-  const NCollection_Vec3<Element_t> theX##theY##theZ##() const { return NCollection_Vec3<Element_t>(theX##(), theY##(), theZ##()); } \
-  const NCollection_Vec3<Element_t> theX##theZ##theY##() const { return NCollection_Vec3<Element_t>(theX##(), theZ##(), theY##()); } \
-  const NCollection_Vec3<Element_t> theY##theX##theZ##() const { return NCollection_Vec3<Element_t>(theY##(), theX##(), theZ##()); } \
-  const NCollection_Vec3<Element_t> theY##theZ##theX##() const { return NCollection_Vec3<Element_t>(theY##(), theZ##(), theX##()); } \
-  const NCollection_Vec3<Element_t> theZ##theY##theX##() const { return NCollection_Vec3<Element_t>(theZ##(), theY##(), theX##()); } \
-  const NCollection_Vec3<Element_t> theZ##theX##theY##() const { return NCollection_Vec3<Element_t>(theZ##(), theX##(), theY##()); }
+  const NCollection_Vec3<Element_t> theX##theY##theZ() const { return NCollection_Vec3<Element_t>(theX(), theY(), theZ()); } \
+  const NCollection_Vec3<Element_t> theX##theZ##theY() const { return NCollection_Vec3<Element_t>(theX(), theZ(), theY()); } \
+  const NCollection_Vec3<Element_t> theY##theX##theZ() const { return NCollection_Vec3<Element_t>(theY(), theX(), theZ()); } \
+  const NCollection_Vec3<Element_t> theY##theZ##theX() const { return NCollection_Vec3<Element_t>(theY(), theZ(), theX()); } \
+  const NCollection_Vec3<Element_t> theZ##theY##theX() const { return NCollection_Vec3<Element_t>(theZ(), theY(), theX()); } \
+  const NCollection_Vec3<Element_t> theZ##theX##theY() const { return NCollection_Vec3<Element_t>(theZ(), theX(), theY()); }
 
 //! Generic 3-components vector.
 //! To be used as RGB color pixel or XYZ 3D-point.
index 068a733..240d9e0 100755 (executable)
@@ -86,12 +86,11 @@ OpenGl_telem_view.cxx
 OpenGl_telem_view.hxx
 OpenGl_FrameBuffer.hxx
 OpenGl_FrameBuffer.cxx
-OpenGl_TextureBox.cxx
-OpenGl_TextureBox.hxx
+OpenGl_Texture.cxx
+OpenGl_Texture.hxx
+Handle_OpenGl_Texture.hxx
 OpenGl_Resource.hxx
 OpenGl_Resource.cxx
-OpenGl_ResourceTexture.hxx
-OpenGl_ResourceTexture.cxx
 OpenGl_telem_util.hxx
 OpenGl_telem_util.cxx
 OpenGl_transform_persistence.hxx
old mode 100755 (executable)
new mode 100644 (file)
similarity index 76%
rename from src/Graphic3d/Graphic3d_CInitTexture.cxx
rename to src/OpenGl/Handle_OpenGl_Texture.hxx
index 452dba4..c7f9305
@@ -1,4 +1,4 @@
-// Copyright (c) 1999-2012 OPEN CASCADE SAS
+// Copyright (c) 2012 OPEN CASCADE SAS
 //
 // The content of this file is subject to the Open CASCADE Technology Public
 // License Version 6.5 (the "License"). You may not use the content of this file
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
+#ifndef _Handle_OpenGl_Texture_Header
+#define _Handle_OpenGl_Texture_Header
 
+#include <OpenGl_Resource.hxx>
 
-#include <Graphic3d_CInitTexture.hxx>
+class OpenGl_Texture;
+DEFINE_STANDARD_HANDLE(OpenGl_Texture, OpenGl_Resource)
 
-const Handle(Standard_Type)& TYPE(Graphic3d_CInitTexture)
-{
-  static Handle(Standard_Type) _atype = 
-    new Standard_Type ("Graphic3d_CInitTexture", sizeof (Graphic3d_CInitTexture));
-  return _atype;
-}
+#endif // _Handle_OpenGl_Texture_Header
index 0718df6..b5c5b16 100644 (file)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #include <OpenGl_AspectFace.hxx>
+#include <OpenGl_Texture.hxx>
+#include <OpenGl_Workspace.hxx>
+#include <OpenGl_Context.hxx>
 
-#include <InterfaceGraphic_Graphic3d.hxx>
 #include <Aspect_PolygonOffsetMode.hxx>
+#include <Graphic3d_CGroup.hxx>
+#include <Graphic3d_TextureMap.hxx>
 
-/*----------------------------------------------------------------------*/
-
-static const TEL_CONTEXT_FACE myDefaultAspectFace =
+namespace
 {
-  Aspect_IS_SOLID,
-  TOn, TEL_HS_SOLID, TOn, TelCullNone,
-  { 0.2F, 0.8F, 0.1F, 0.0F, /* amb, diff, spec, emsv */
-    1.0F, 10.0F, 0.0F, /* trans, shine, env_reflexion */
-    0, /* isphysic */
-    (OPENGL_AMBIENT_MASK | OPENGL_DIFFUSE_MASK | OPENGL_SPECULAR_MASK), /* color_mask */
-    {{ 1.0F, 1.0F, 1.0F, 1.0F }}, /* ambient color */
-    {{ 1.0F, 1.0F, 1.0F, 1.0F }}, /* diffuse color */
-    {{ 1.0F, 1.0F, 1.0F, 1.0F }}, /* specular color */
-    {{ 1.0F, 1.0F, 1.0F, 1.0F }}, /* emissive color */
-    {{ 1.0F, 1.0F, 1.0F, 1.0F }} /* material color */
-  },
-  { 0.2F, 0.8F, 0.1F, 0.0F, /* amb, diff, spec, emsv */
-    1.0F, 10.0F, 0.0F, /* trans, shine, env_reflexion */
-    0, /* isphysic */
-    (OPENGL_AMBIENT_MASK | OPENGL_DIFFUSE_MASK | OPENGL_SPECULAR_MASK), /* color_mask */
-    {{ 1.0F, 1.0F, 1.0F, 1.0F }}, /* ambient color */
-    {{ 1.0F, 1.0F, 1.0F, 1.0F }}, /* diffuse color */
-    {{ 1.0F, 1.0F, 1.0F, 1.0F }}, /* specular color */
-    {{ 1.0F, 1.0F, 1.0F, 1.0F }}, /* emissive color */
-    {{ 1.0F, 1.0F, 1.0F, 1.0F }} /* material color */
-  },
-  0, -1, { Aspect_POM_Fill, 1.0F, 0.0F }
-};
 
-/*----------------------------------------------------------------------*/
+  static OPENGL_SURF_PROP THE_DEFAULT_MATERIAL =
+  {
+    0.2F,  0.8F, 0.1F, 0.0F, // amb, diff, spec, emsv
+    1.0F, 10.0F, 0.0F,       // trans, shine, env_reflexion
+    0, // isphysic
+    (OPENGL_AMBIENT_MASK | OPENGL_DIFFUSE_MASK | OPENGL_SPECULAR_MASK), // color_mask
+    {{ 1.0F, 1.0F, 1.0F, 1.0F }}, // ambient color
+    {{ 1.0F, 1.0F, 1.0F, 1.0F }}, // diffuse color
+    {{ 1.0F, 1.0F, 1.0F, 1.0F }}, // specular color
+    {{ 1.0F, 1.0F, 1.0F, 1.0F }}, // emissive color
+    {{ 1.0F, 1.0F, 1.0F, 1.0F }}  // material color
+  };
+
+  static TEL_POFFSET_PARAM THE_DEFAULT_POFFSET = { Aspect_POM_Fill, 1.0F, 0.0F };
+
+};
 
-static void ConvertMaterial (const CALL_DEF_MATERIAL &material, OPENGL_SURF_PROP &surface)
+// =======================================================================
+// function : convertMaterial
+// purpose  :
+// =======================================================================
+void OpenGl_AspectFace::convertMaterial (const CALL_DEF_MATERIAL& theMat,
+                                         OPENGL_SURF_PROP&        theSurf)
 {
-  /* Cas par cas pour l evaluation */
-  surface.amb  = material.IsAmbient? material.Ambient : 0.F;
-  surface.diff = material.IsDiffuse? material.Diffuse : 0.F;
-  surface.spec = material.IsSpecular? material.Specular : 0.F;
-  surface.emsv = material.IsEmission? material.Emission : 0.F;
-
-  /* type de materiel */
-  surface.isphysic = material.IsPhysic? 1 : 0;
-
-  /* Couleur du materiel */
-  surface.color_mask = 0;
-  if ( material.IsAmbient )
-    surface.color_mask |= OPENGL_AMBIENT_MASK;
-  if ( material.IsDiffuse )
-    surface.color_mask |= OPENGL_DIFFUSE_MASK;
-  if ( material.IsSpecular )
-    surface.color_mask |= OPENGL_SPECULAR_MASK;
-  if ( material.IsEmission )
-    surface.color_mask |= OPENGL_EMISSIVE_MASK;
-
-  /* Couleur eclairage ambient */
-  surface.ambcol.rgb[0] = material.ColorAmb.r;
-  surface.ambcol.rgb[1] = material.ColorAmb.g;
-  surface.ambcol.rgb[2] = material.ColorAmb.b;
-  surface.ambcol.rgb[3] = 1.F;
-
-  /* Couleur eclairage diffus */
-  surface.difcol.rgb[0] = material.ColorDif.r;
-  surface.difcol.rgb[1] = material.ColorDif.g;
-  surface.difcol.rgb[2] = material.ColorDif.b;
-  surface.difcol.rgb[3] = 1.F;
-
-  /* Couleur eclairage speculaire */
-  surface.speccol.rgb[0] = material.ColorSpec.r;
-  surface.speccol.rgb[1] = material.ColorSpec.g;
-  surface.speccol.rgb[2] = material.ColorSpec.b;
-  surface.speccol.rgb[3] = 1.F;
-
-  /* Couleur d emission */
-  surface.emscol.rgb[0] = material.ColorEms.r;
-  surface.emscol.rgb[1] = material.ColorEms.g;
-  surface.emscol.rgb[2] = material.ColorEms.b;
-  surface.emscol.rgb[3] = 1.F;
-
-  surface.shine = ( float )128 * material.Shininess;
-  surface.env_reflexion = material.EnvReflexion;
-
-  /* Dans la couche C++ :
-  * prop->trans = 0. => opaque
-  * prop->trans = 1. => transparent
-  * in OpenGl it is opposite.
-  */
-  surface.trans = 1.0F - material.Transparency;
-}
+  theSurf.amb  = theMat.IsAmbient  ? theMat.Ambient  : 0.0f;
+  theSurf.diff = theMat.IsDiffuse  ? theMat.Diffuse  : 0.0f;
+  theSurf.spec = theMat.IsSpecular ? theMat.Specular : 0.0f;
+  theSurf.emsv = theMat.IsEmission ? theMat.Emission : 0.0f;
 
-/*----------------------------------------------------------------------*/
+  theSurf.isphysic = theMat.IsPhysic ? 1 : 0; // type of material
 
-OpenGl_AspectFace::OpenGl_AspectFace ()
- : myContext(myDefaultAspectFace)
-{}
+  // color of material
+  theSurf.color_mask = 0;
+  if (theMat.IsAmbient)
+  {
+    theSurf.color_mask |= OPENGL_AMBIENT_MASK;
+  }
+  if (theMat.IsDiffuse)
+  {
+    theSurf.color_mask |= OPENGL_DIFFUSE_MASK;
+  }
+  if (theMat.IsSpecular)
+  {
+    theSurf.color_mask |= OPENGL_SPECULAR_MASK;
+  }
+  if (theMat.IsEmission)
+  {
+    theSurf.color_mask |= OPENGL_EMISSIVE_MASK;
+  }
 
-/*----------------------------------------------------------------------*/
+  // ambient color
+  theSurf.ambcol.rgb[0] = theMat.ColorAmb.r;
+  theSurf.ambcol.rgb[1] = theMat.ColorAmb.g;
+  theSurf.ambcol.rgb[2] = theMat.ColorAmb.b;
+  theSurf.ambcol.rgb[3] = 1.0f;
+
+  // diffuse color
+  theSurf.difcol.rgb[0] = theMat.ColorDif.r;
+  theSurf.difcol.rgb[1] = theMat.ColorDif.g;
+  theSurf.difcol.rgb[2] = theMat.ColorDif.b;
+  theSurf.difcol.rgb[3] = 1.0f;
+
+  // specular color
+  theSurf.speccol.rgb[0] = theMat.ColorSpec.r;
+  theSurf.speccol.rgb[1] = theMat.ColorSpec.g;
+  theSurf.speccol.rgb[2] = theMat.ColorSpec.b;
+  theSurf.speccol.rgb[3] = 1.0f;
+
+  // emission color
+  theSurf.emscol.rgb[0] = theMat.ColorEms.r;
+  theSurf.emscol.rgb[1] = theMat.ColorEms.g;
+  theSurf.emscol.rgb[2] = theMat.ColorEms.b;
+  theSurf.emscol.rgb[3] = 1.0f;
+
+  theSurf.shine = 128.0f * float(theMat.Shininess);
+  theSurf.env_reflexion = theMat.EnvReflexion;
+
+  // trans = 0. => opaque
+  // trans = 1. => transparent
+  // in OpenGl it is opposite.
+  theSurf.trans = 1.0f - theMat.Transparency;
+}
 
-void OpenGl_AspectFace::SetContext (const CALL_DEF_CONTEXTFILLAREA &AContext)
+// =======================================================================
+// function : OpenGl_AspectFace
+// purpose  :
+// =======================================================================
+OpenGl_AspectFace::OpenGl_AspectFace()
+: InteriorStyle (Aspect_IS_SOLID),
+  Edge (Aspect_IS_SOLID),
+  Hatch (TOn),
+  DistinguishingMode (TEL_HS_SOLID),
+  CullingMode (TelCullNone),
+  doTextureMap (0)
 {
-  //TelInteriorStyle
-  myContext.InteriorStyle = (Aspect_InteriorStyle) AContext.Style;
+  IntFront      = THE_DEFAULT_MATERIAL;
+  IntBack       = THE_DEFAULT_MATERIAL;
+  PolygonOffset = THE_DEFAULT_POFFSET;
+}
 
-  //TelEdgeFlag
-  myContext.Edge = AContext.Edge ? TOn : TOff;
+// =======================================================================
+// function : Init
+// purpose  :
+// =======================================================================
+void OpenGl_AspectFace::Init (const Handle(OpenGl_Context)&   theContext,
+                              const CALL_DEF_CONTEXTFILLAREA& theAspect)
+{
+  InteriorStyle = (Aspect_InteriorStyle )theAspect.Style;
+  Edge = theAspect.Edge ? TOn : TOff;
 
   //TelInteriorStyleIndex
-  switch( AContext.Hatch )
+  switch (theAspect.Hatch)
   {
-    case 0 : /* Aspect_HS_HORIZONTAL */
-      myContext.Hatch = TEL_HS_HORIZONTAL;
+    case 0: /* Aspect_HS_HORIZONTAL */
+      Hatch = TEL_HS_HORIZONTAL;
       break;
-    case 1 : /* Aspect_HS_HORIZONTAL_WIDE */
-      myContext.Hatch = TEL_HS_HORIZONTAL_SPARSE;
+    case 1: /* Aspect_HS_HORIZONTAL_WIDE */
+      Hatch = TEL_HS_HORIZONTAL_SPARSE;
       break;
-    case 2 : /* Aspect_HS_VERTICAL */
-      myContext.Hatch = TEL_HS_VERTICAL;
+    case 2: /* Aspect_HS_VERTICAL */
+      Hatch = TEL_HS_VERTICAL;
       break;
-    case 3 : /* Aspect_HS_VERTICAL_WIDE */
-      myContext.Hatch = TEL_HS_VERTICAL_SPARSE;
+    case 3: /* Aspect_HS_VERTICAL_WIDE */
+      Hatch = TEL_HS_VERTICAL_SPARSE;
       break;
-    case 4 : /* Aspect_HS_DIAGONAL_45 */
-      myContext.Hatch = TEL_HS_DIAG_45;
+    case 4: /* Aspect_HS_DIAGONAL_45 */
+      Hatch = TEL_HS_DIAG_45;
       break;
-    case 5 : /* Aspect_HS_DIAGONAL_45_WIDE */
-      myContext.Hatch = TEL_HS_DIAG_45_SPARSE;
+    case 5: /* Aspect_HS_DIAGONAL_45_WIDE */
+      Hatch = TEL_HS_DIAG_45_SPARSE;
       break;
-    case 6 : /* Aspect_HS_DIAGONAL_135 */
-      myContext.Hatch = TEL_HS_DIAG_135;
+    case 6: /* Aspect_HS_DIAGONAL_135 */
+      Hatch = TEL_HS_DIAG_135;
       break;
-    case 7 : /* Aspect_HS_DIAGONAL_135_WIDE */
-      myContext.Hatch = TEL_HS_DIAG_135_SPARSE;
+    case 7: /* Aspect_HS_DIAGONAL_135_WIDE */
+      Hatch = TEL_HS_DIAG_135_SPARSE;
       break;
-    case 8 : /* Aspect_HS_GRID */
-      myContext.Hatch = TEL_HS_GRID;
+    case 8: /* Aspect_HS_GRID */
+      Hatch = TEL_HS_GRID;
       break;
-    case 9 : /* Aspect_HS_GRID_WIDE */
-      myContext.Hatch = TEL_HS_GRID_SPARSE;
+    case 9: /* Aspect_HS_GRID_WIDE */
+      Hatch = TEL_HS_GRID_SPARSE;
       break;
-    case 10 : /* Aspect_HS_GRID_DIAGONAL */
-      myContext.Hatch = TEL_HS_CROSS;
+    case 10: /* Aspect_HS_GRID_DIAGONAL */
+      Hatch = TEL_HS_CROSS;
       break;
-    case 11 : /* Aspect_HS_GRID_DIAGONAL_WIDE */
-      myContext.Hatch = TEL_HS_CROSS_SPARSE;
+    case 11: /* Aspect_HS_GRID_DIAGONAL_WIDE */
+      Hatch = TEL_HS_CROSS_SPARSE;
       break;
-    default :
-      myContext.Hatch = 0;
+    default:
+      Hatch = 0;
       break;
   }
 
-  //TelFaceDistinguishingMode
-  myContext.DistinguishingMode = AContext.Distinguish ? TOn : TOff;
-
-  //TelFaceCullingMode
-  myContext.CullingMode = AContext.BackFace ? TelCullBack : TelCullNone;
-
-  //TelSurfaceAreaProperties
-  ConvertMaterial(AContext.Front,myContext.IntFront);
+  DistinguishingMode = theAspect.Distinguish ? TOn : TOff;
+  CullingMode = theAspect.BackFace ? TelCullBack : TelCullNone;
 
-  //TelBackSurfaceAreaProperties
-  ConvertMaterial(AContext.Back,myContext.IntBack);
+  convertMaterial (theAspect.Front, IntFront);
+  convertMaterial (theAspect.Back,  IntBack);
 
   //TelInteriorColour
-  myContext.IntFront.matcol.rgb[0] = (float) AContext.IntColor.r;
-  myContext.IntFront.matcol.rgb[1] = (float) AContext.IntColor.g;
-  myContext.IntFront.matcol.rgb[2] = (float) AContext.IntColor.b;
-  myContext.IntFront.matcol.rgb[3] = 1.f;
+  IntFront.matcol.rgb[0] = (float )theAspect.IntColor.r;
+  IntFront.matcol.rgb[1] = (float )theAspect.IntColor.g;
+  IntFront.matcol.rgb[2] = (float )theAspect.IntColor.b;
+  IntFront.matcol.rgb[3] = 1.0f;
 
   //TelBackInteriorColour
-  myContext.IntBack.matcol.rgb[0] = (float) AContext.BackIntColor.r;
-  myContext.IntBack.matcol.rgb[1] = (float) AContext.BackIntColor.g;
-  myContext.IntBack.matcol.rgb[2] = (float) AContext.BackIntColor.b;
-  myContext.IntBack.matcol.rgb[3] = 1.f;
-
-  //TelDoTextureMap
-  myContext.doTextureMap = AContext.Texture.doTextureMap;
-
-  //TelTextureId
-  myContext.TexId = AContext.Texture.TexId;
+  IntBack.matcol.rgb[0] = (float )theAspect.BackIntColor.r;
+  IntBack.matcol.rgb[1] = (float )theAspect.BackIntColor.g;
+  IntBack.matcol.rgb[2] = (float )theAspect.BackIntColor.b;
+  IntBack.matcol.rgb[3] = 1.0f;
+
+  // setup texture
+  doTextureMap = theAspect.Texture.doTextureMap;
+  const Handle(Graphic3d_TextureMap)& aNewTexture = theAspect.Texture.TextureMap;
+  TCollection_AsciiString aNewKey = aNewTexture.IsNull() ? TCollection_AsciiString() : aNewTexture->GetId();
+  TextureParams = aNewTexture.IsNull() ? NULL : aNewTexture->GetParams();
+  if (aNewKey.IsEmpty()
+   || myTextureId != aNewKey)
+  {
+    if (!TextureRes.IsNull())
+    {
+      if (myTextureId.IsEmpty())
+      {
+        theContext->DelayedRelease (TextureRes);
+        TextureRes.Nullify();
+      }
+      else
+      {
+        TextureRes.Nullify(); // we need nullify all handles before ReleaseResource() call
+        theContext->ReleaseResource (myTextureId);
+      }
+    }
+    myTextureId = aNewKey;
+
+    if (!aNewTexture.IsNull())
+    {
+      if (aNewKey.IsEmpty() || !theContext->GetResource<Handle(OpenGl_Texture)> (aNewKey, TextureRes))
+      {
+        TextureRes = new OpenGl_Texture (TextureParams);
+        Handle(Image_PixMap) anImage = aNewTexture->GetImage();
+        if (!anImage.IsNull())
+        {
+          TextureRes->Init (theContext, *anImage.operator->(), aNewTexture->Type());
+        }
+        if (!aNewKey.IsEmpty())
+        {
+          theContext->ShareResource (aNewKey, TextureRes);
+        }
+      }
+    }
+  }
 
   //TelPolygonOffset
-  myContext.PolygonOffset.mode   = (Aspect_PolygonOffsetMode) AContext.PolygonOffsetMode;
-  myContext.PolygonOffset.factor = AContext.PolygonOffsetFactor;
-  myContext.PolygonOffset.units  = AContext.PolygonOffsetUnits;
+  PolygonOffset.mode   = (Aspect_PolygonOffsetMode )theAspect.PolygonOffsetMode;
+  PolygonOffset.factor = theAspect.PolygonOffsetFactor;
+  PolygonOffset.units  = theAspect.PolygonOffsetUnits;
 
   CALL_DEF_CONTEXTLINE anEdgeContext;
-
-  //TelEdgeColour
-  anEdgeContext.Color.r = (float) AContext.EdgeColor.r;
-  anEdgeContext.Color.g = (float) AContext.EdgeColor.g;
-  anEdgeContext.Color.b = (float) AContext.EdgeColor.b;
-
-  //TelEdgeType
-  anEdgeContext.LineType = (Aspect_TypeOfLine) AContext.LineType;
-
-  //TelEdgeWidth
-  anEdgeContext.Width = (float) AContext.Width;
-
-  myAspectEdge.SetContext(anEdgeContext);
+  anEdgeContext.Color.r  = (float )theAspect.EdgeColor.r;
+  anEdgeContext.Color.g  = (float )theAspect.EdgeColor.g;
+  anEdgeContext.Color.b  = (float )theAspect.EdgeColor.b;
+  anEdgeContext.LineType = (Aspect_TypeOfLine )theAspect.LineType;
+  anEdgeContext.Width    = (float )theAspect.Width;
+  myAspectEdge.SetContext (anEdgeContext);
 }
 
-/*----------------------------------------------------------------------*/
-
+// =======================================================================
+// function : Render
+// purpose  :
+// =======================================================================
 void OpenGl_AspectFace::Render (const Handle(OpenGl_Workspace)& theWorkspace) const
 {
   theWorkspace->SetAspectFace (this);
 }
 
+// =======================================================================
+// function : Release
+// purpose  :
+// =======================================================================
 void OpenGl_AspectFace::Release (const Handle(OpenGl_Context)& theContext)
 {
-  //
+  if (!TextureRes.IsNull())
+  {
+    if (!theContext.IsNull())
+    {
+      if (myTextureId.IsEmpty())
+      {
+        theContext->DelayedRelease (TextureRes);
+      }
+      else
+      {
+        TextureRes.Nullify(); // we need nullify all handles before ReleaseResource() call
+        theContext->ReleaseResource (myTextureId);
+      }
+    }
+    TextureRes.Nullify();
+  }
+  myTextureId.Clear();
 }
index dd9993a..7dbb2bf 100644 (file)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #ifndef _OpenGl_AspectFace_Header
 #define _OpenGl_AspectFace_Header
 
 #include <InterfaceGraphic_telem.hxx>
 #include <Aspect_InteriorStyle.hxx>
+#include <TCollection_AsciiString.hxx>
+#include <Handle_Graphic3d_TextureParams.hxx>
 
 #include <OpenGl_AspectLine.hxx>
+#include <OpenGl_Element.hxx>
+#include <Handle_OpenGl_Texture.hxx>
 
 #define OPENGL_AMBIENT_MASK  (1<<0)
 #define OPENGL_DIFFUSE_MASK  (1<<1)
 #define OPENGL_SPECULAR_MASK (1<<2)
 #define OPENGL_EMISSIVE_MASK (1<<3)
 
+class CALL_DEF_CONTEXTFILLAREA;
+
 struct OPENGL_SURF_PROP
 {
   float        amb, diff, spec, emsv;
@@ -42,47 +47,52 @@ struct OPENGL_SURF_PROP
   DEFINE_STANDARD_ALLOC
 };
 
-struct TEL_CONTEXT_FACE
-{
-  Aspect_InteriorStyle InteriorStyle;
-  int                  Edge;
-  int                  Hatch;
-  int                  DistinguishingMode;
-  int                  CullingMode;
-  OPENGL_SURF_PROP     IntFront;
-  OPENGL_SURF_PROP     IntBack;
-  int                  doTextureMap;
-  int                  TexId;
-  TEL_POFFSET_PARAM PolygonOffset;
-  DEFINE_STANDARD_ALLOC
-};
-
-#include <OpenGl_Element.hxx>
-
 class OpenGl_AspectFace : public OpenGl_Element
 {
- public:
 
-  OpenGl_AspectFace ();
+public:
 
-  void SetContext (const CALL_DEF_CONTEXTFILLAREA &AContext);
+  OpenGl_AspectFace();
 
-  void SetContext (const TEL_CONTEXT_FACE &AContext) { myContext = AContext; }
-  void SetAspectEdge (const OpenGl_AspectLine * AnAspectEdge) { myAspectEdge = *AnAspectEdge; }
+  void Init (const Handle(OpenGl_Context)&   theContext,
+             const CALL_DEF_CONTEXTFILLAREA& theAspect);
 
-  const TEL_CONTEXT_FACE & Context() const { return myContext; }
-  const OpenGl_AspectLine * AspectEdge() const { return &myAspectEdge; }
+  void SetAspectEdge (const OpenGl_AspectLine* theAspectEdge) { myAspectEdge = *theAspectEdge; }
+
+  const OpenGl_AspectLine* AspectEdge() const { return &myAspectEdge; }
 
   virtual void Render  (const Handle(OpenGl_Workspace)& theWorkspace) const;
   virtual void Release (const Handle(OpenGl_Context)&   theContext);
 
- protected:
+private:
+
+  void convertMaterial (const CALL_DEF_MATERIAL& theMat,
+                        OPENGL_SURF_PROP&        theSurf);
+
+public:
+
+  Aspect_InteriorStyle    InteriorStyle;
+  int                     Edge;
+  int                     Hatch;
+  int                     DistinguishingMode;
+  int                     CullingMode;
+  OPENGL_SURF_PROP        IntFront;
+  OPENGL_SURF_PROP        IntBack;
+  TEL_POFFSET_PARAM       PolygonOffset;
 
-  TEL_CONTEXT_FACE   myContext;
-  OpenGl_AspectLine  myAspectEdge;
+  int                     doTextureMap;
+  Handle(OpenGl_Texture)  TextureRes;
+  Handle(Graphic3d_TextureParams) TextureParams;
+
+protected:
+
+  TCollection_AsciiString myTextureId;
+  OpenGl_AspectLine       myAspectEdge;
+
+public:
 
- public:
   DEFINE_STANDARD_ALLOC
+
 };
 
 #endif //_OpenGl_AspectFace_Header
index 6d20572..cdbb7e6 100644 (file)
@@ -17,8 +17,8 @@
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #include <OpenGl_AspectLine.hxx>
+#include <OpenGl_Workspace.hxx>
 
 static const TEL_COLOUR myDefaultColor = {{ 1.0F, 1.0F, 1.0F, 1.0F }};
 
index cf76c3f..1725541 100644 (file)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #ifndef _OpenGl_AspectLine_Header
 #define _OpenGl_AspectLine_Header
 
-#include <InterfaceGraphic_telem.hxx>
+#include <InterfaceGraphic_Graphic3d.hxx>
 #include <Aspect_TypeOfLine.hxx>
 
 #include <OpenGl_Element.hxx>
index a02b397..8f7ddee 100644 (file)
@@ -17,8 +17,8 @@
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #include <OpenGl_AspectMarker.hxx>
+#include <OpenGl_Workspace.hxx>
 
 static const TEL_COLOUR myDefaultColor = {{ 1.0F, 1.0F, 1.0F, 1.0F }};
 
index c03fdcb..a3b85cc 100644 (file)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #ifndef OpenGl_AspectMarker_Header
 #define OpenGl_AspectMarker_Header
 
-#include <InterfaceGraphic_telem.hxx>
+#include <InterfaceGraphic_Graphic3d.hxx>
 #include <Aspect_TypeOfMarker.hxx>
 
 #include <OpenGl_Element.hxx>
index 7a5a021..c889b2d 100644 (file)
@@ -17,8 +17,8 @@
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #include <OpenGl_AspectText.hxx>
+#include <OpenGl_Workspace.hxx>
 
 static const TEL_COLOUR myDefaultColor = {{ 1.0F, 1.0F, 1.0F, 1.0F }};
 
index 4904825..d7fd9ac 100644 (file)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #ifndef OpenGl_AspectText_Header
 #define OpenGl_AspectText_Header
 
-#include <InterfaceGraphic_telem.hxx>
+#include <InterfaceGraphic_Graphic3d.hxx>
 #include <Font_FontAspect.hxx>
 #include <Aspect_TypeOfStyleText.hxx>
 #include <Aspect_TypeOfDisplayText.hxx>
index 2de3bc9..998c817 100644 (file)
@@ -74,17 +74,22 @@ OpenGl_Context::OpenGl_Context()
   core14 (NULL),
   core15 (NULL),
   core20 (NULL),
+  arbNPTW(Standard_False),
   arbVBO (NULL),
   arbTBO (NULL),
   arbIns (NULL),
   extFBO (NULL),
   extGS  (NULL),
+  extBgra(Standard_False),
+  extAnis(Standard_False),
   atiMem (Standard_False),
   nvxMem (Standard_False),
   mySharedResources (new OpenGl_ResourcesMap()),
   myReleaseQueue (new OpenGl_ResourcesQueue()),
   myGlLibHandle (NULL),
   myGlCore20 (NULL),
+  myMaxTexDim  (1024),
+  myAnisoMax   (1),
   myGlVerMajor (0),
   myGlVerMinor (0),
   myIsFeedback (Standard_False),
@@ -131,6 +136,24 @@ OpenGl_Context::~OpenGl_Context()
 }
 
 // =======================================================================
+// function : MaxDegreeOfAnisotropy
+// purpose  :
+// =======================================================================
+Standard_Integer OpenGl_Context::MaxDegreeOfAnisotropy() const
+{
+  return myAnisoMax;
+}
+
+// =======================================================================
+// function : MaxTextureSize
+// purpose  :
+// =======================================================================
+Standard_Integer OpenGl_Context::MaxTextureSize() const
+{
+  return myMaxTexDim;
+}
+
+// =======================================================================
 // function : Share
 // purpose  :
 // =======================================================================
@@ -474,8 +497,17 @@ void OpenGl_Context::init()
   // read version
   readGlVersion();
 
-  atiMem = CheckExtension ("GL_ATI_meminfo");
-  nvxMem = CheckExtension ("GL_NVX_gpu_memory_info");
+  arbNPTW = CheckExtension ("GL_ARB_texture_non_power_of_two");
+  extBgra = CheckExtension ("GL_EXT_bgra");
+  extAnis = CheckExtension ("GL_EXT_texture_filter_anisotropic");
+  atiMem  = CheckExtension ("GL_ATI_meminfo");
+  nvxMem  = CheckExtension ("GL_NVX_gpu_memory_info");
+
+  glGetIntegerv (GL_MAX_TEXTURE_SIZE, &myMaxTexDim);
+  if (extAnis)
+  {
+    glGetIntegerv (GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &myAnisoMax);
+  }
 
   // initialize VBO extension (ARB)
   if (CheckExtension ("GL_ARB_vertex_buffer_object"))
index 0fd25a3..9752680 100644 (file)
@@ -17,7 +17,6 @@
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #ifndef _OpenGl_Context_H__
 #define _OpenGl_Context_H__
 
@@ -210,6 +209,12 @@ public:
   //! Clean up the delayed release queue.
   Standard_EXPORT void ReleaseDelayed();
 
+  //! @return maximum degree of anisotropy texture filter
+  Standard_EXPORT Standard_Integer MaxDegreeOfAnisotropy() const;
+
+  //! @return value for GL_MAX_TEXTURE_SIZE
+  Standard_EXPORT Standard_Integer MaxTextureSize() const;
+
 private:
 
   //! Wrapper to system function to retrieve GL function pointer by name.
@@ -231,13 +236,16 @@ public: // core profiles
 
 public: // extensions
 
-  OpenGl_ArbVBO*   arbVBO; //!< GL_ARB_vertex_buffer_object
-  OpenGl_ArbTBO*   arbTBO; //!< GL_ARB_texture_buffer_object
-  OpenGl_ArbIns*   arbIns; //!< GL_ARB_draw_instanced
-  OpenGl_ExtFBO*   extFBO; //!< GL_EXT_framebuffer_object
-  OpenGl_ExtGS*    extGS;  //!< GL_EXT_geometry_shader4
-  Standard_Boolean atiMem; //!< GL_ATI_meminfo
-  Standard_Boolean nvxMem; //!< GL_NVX_gpu_memory_info
+  Standard_Boolean arbNPTW; //!< GL_ARB_texture_non_power_of_two
+  OpenGl_ArbVBO*   arbVBO;  //!< GL_ARB_vertex_buffer_object
+  OpenGl_ArbTBO*   arbTBO;  //!< GL_ARB_texture_buffer_object
+  OpenGl_ArbIns*   arbIns;  //!< GL_ARB_draw_instanced
+  OpenGl_ExtFBO*   extFBO;  //!< GL_EXT_framebuffer_object
+  OpenGl_ExtGS*    extGS;   //!< GL_EXT_geometry_shader4
+  Standard_Boolean extBgra; //!< GL_EXT_bgra
+  Standard_Boolean extAnis; //!< GL_EXT_texture_filter_anisotropic
+  Standard_Boolean atiMem;  //!< GL_ATI_meminfo
+  Standard_Boolean nvxMem;  //!< GL_NVX_gpu_memory_info
 
 private: // system-dependent fields
 
@@ -263,6 +271,8 @@ private: // context info
 
   void*            myGlLibHandle;   //!< optional handle to GL library
   OpenGl_GlCore20* myGlCore20;      //!< common structure for GL core functions upto 2.0
+  Standard_Integer myAnisoMax;      //!< maximum level of anisotropy texture filter
+  Standard_Integer myMaxTexDim;     //!< value for GL_MAX_TEXTURE_SIZE
   Standard_Integer myGlVerMajor;    //!< cached GL version major number
   Standard_Integer myGlVerMinor;    //!< cached GL version minor number
   Standard_Boolean myIsFeedback;    //!< flag indicates GL_FEEDBACK mode
index e9d6773..ba81189 100644 (file)
@@ -21,7 +21,8 @@
 #ifndef OpenGl_Element_Header
 #define OpenGl_Element_Header
 
-#include <OpenGl_Workspace.hxx>
+#include <Handle_OpenGl_Context.hxx>
+#include <Handle_OpenGl_Workspace.hxx>
 
 class OpenGl_Element
 {
index 73d1e0e..41244b5 100644 (file)
@@ -17,7 +17,6 @@
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #ifndef _OpenGl_GraphicDriver_HeaderFile
 #define _OpenGl_GraphicDriver_HeaderFile
 
@@ -32,6 +31,7 @@
 #include <Quantity_PlaneAngle.hxx>
 #include <Quantity_NameOfColor.hxx>
 #include <Handle_AlienImage_AlienImage.hxx>
+#include <Handle_OpenGl_View.hxx>
 
 #include <Aspect_Display.hxx>
 #include <Aspect_GradientFillMethod.hxx>
@@ -55,8 +55,6 @@
 #include <Graphic3d_CUserDraw.hxx>
 #include <Graphic3d_CGraduatedTrihedron.hxx>
 #include <Graphic3d_TypeOfComposition.hxx>
-#include <Graphic3d_TypeOfTexture.hxx>
-#include <Graphic3d_CInitTexture.hxx>
 #include <Graphic3d_ExportFormat.hxx>
 #include <Graphic3d_SortType.hxx>
 #include <Graphic3d_PtrFrameBuffer.hxx>
@@ -84,7 +82,6 @@ class TCollection_ExtendedString;
 class AlienImage_AlienImage;
 class Image_PixMap;
 class TColStd_HArray1OfReal;
-class Handle(OpenGl_View);
 class Handle(OpenGl_Workspace);
 class OpenGl_Element;
 class OpenGl_Structure;
@@ -92,7 +89,7 @@ class OpenGl_Structure;
 //! This class defines an OpenGl graphic driver <br>
 class OpenGl_GraphicDriver : public Graphic3d_GraphicDriver
 {
- public:
+public:
 
   //! Constructor
   Standard_EXPORT OpenGl_GraphicDriver (const Standard_CString theShrName);
@@ -272,12 +269,6 @@ public:
   //! This method is internal and should be used by Graphic3d_Group only. <br>
   Standard_EXPORT void RemovePrimitiveArray(const Graphic3d_CGroup& theCGroup,const Graphic3d_PrimitiveArray& thePArray);
   Standard_EXPORT Standard_Integer InquirePlaneLimit();
-  Standard_EXPORT Standard_Integer CreateTexture (const Graphic3d_TypeOfTexture        theType,
-                                                  const Image_PixMap&                  theImage,
-                                                  const Standard_CString               theFileName,
-                                                  const Handle(TColStd_HArray1OfReal)& theTexUpperBounds) const;
-  Standard_EXPORT void DestroyTexture(const Standard_Integer TexId) const;
-  Standard_EXPORT void ModifyTexture(const Standard_Integer TexId,const Graphic3d_CInitTexture& AValue) const;
   Standard_EXPORT Standard_ShortReal DefaultTextHeight() const;
   Standard_EXPORT void FBOGetDimensions(const Graphic3d_CView& view,const Graphic3d_PtrFrameBuffer fboPtr,Standard_Integer& width,Standard_Integer& height,Standard_Integer& widthMax,Standard_Integer& heightMax);
   Standard_EXPORT void FBOChangeViewport(const Graphic3d_CView& view,Graphic3d_PtrFrameBuffer& fboPtr,const Standard_Integer width,const Standard_Integer height);
index 04fdd15..7c67c33 100755 (executable)
@@ -45,7 +45,7 @@ void OpenGl_GraphicDriver::FaceContextGroup (const Graphic3d_CGroup& theCGroup,
   if (!theCGroup.ContextFillArea.IsDef || theCGroup.ptrGroup == NULL)
     return;
 
-  ((OpenGl_Group* )theCGroup.ptrGroup)->SetAspectFace (theCGroup.ContextFillArea, theNoInsert);
+  ((OpenGl_Group* )theCGroup.ptrGroup)->SetAspectFace (GetSharedContext(), theCGroup.ContextFillArea, theNoInsert);
   InvalidateAllWorkspaces();
 }
 
@@ -77,7 +77,7 @@ void OpenGl_GraphicDriver::MarkerContextGroup (const Graphic3d_CGroup& theCGroup
   InvalidateAllWorkspaces();
 }
 
-void OpenGl_GraphicDriver::MarkerContextGroup (const Graphic3d_CGroup& theCGroup, 
+void OpenGl_GraphicDriver::MarkerContextGroup (const Graphic3d_CGroup& theCGroup,
                                                const Standard_Integer  theNoInsert,
                                                const Standard_Integer  theMarkWidth,
                                                const Standard_Integer  theMarkHeight,
index 1b849af..4c10105 100755 (executable)
@@ -46,7 +46,7 @@ void OpenGl_GraphicDriver::ContextStructure (const Graphic3d_CStructure& theCStr
     aStructure->SetAspectLine (theCStructure.ContextLine);
 
   if (theCStructure.ContextFillArea.IsDef)
-    aStructure->SetAspectFace (theCStructure.ContextFillArea);
+    aStructure->SetAspectFace (GetSharedContext(), theCStructure.ContextFillArea);
 
   if (theCStructure.ContextMarker.IsDef)
     aStructure->SetAspectMarker (theCStructure.ContextMarker);
index d545154..c7d3be6 100755 (executable)
@@ -168,7 +168,7 @@ Standard_Boolean OpenGl_GraphicDriver::UnProjectRaster (const Graphic3d_CView& A
   const Standard_Integer aHeight = aCView->WS->Height();
 
   /*
-  Patched by P.Dolbey: the window pixel height decreased by one 
+  Patched by P.Dolbey: the window pixel height decreased by one
   in order for yr to remain within valid coordinate range [0; Ym -1]
   where Ym means window pixel height.
   */
@@ -430,7 +430,8 @@ void OpenGl_GraphicDriver::RemoveView (const Graphic3d_CView& theCView)
     }
   }
 
-  OpenGl_CView *aCView = (OpenGl_CView *)theCView.ptrView;
+  OpenGl_CView* aCView = (OpenGl_CView* )theCView.ptrView;
+  aCView->View->ReleaseGlResources (aShareCtx);
   delete aCView;
   ((Graphic3d_CView *)&theCView)->ptrView = NULL;
 }
@@ -554,7 +555,7 @@ void OpenGl_GraphicDriver::SetBackFacingModel (const Graphic3d_CView& ACView)
 
 //=======================================================================
 //function : AddZLayer
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 void OpenGl_GraphicDriver::AddZLayer (const Graphic3d_CView& theCView,
index b990da6..ef4cc2f 100755 (executable)
 #include <OpenGl_CView.hxx>
 #include <OpenGl_Trihedron.hxx>
 #include <OpenGl_GraduatedTrihedron.hxx>
-#include <OpenGl_TextureBox.hxx>
 #include <OpenGl_tgl_funcs.hxx>
 
-#include <Quantity_NameOfColor.hxx>
-#include <TColStd_HArray1OfReal.hxx>
-#include <Image_Image.hxx>
-
-void OpenGl_GraphicDriver::Environment(const Graphic3d_CView& ACView)
+void OpenGl_GraphicDriver::Environment(const Graphic3d_CView& theCView)
 {
-  const OpenGl_CView *aCView = (const OpenGl_CView *)ACView.ptrView;
-  if (aCView)
+  const OpenGl_CView* aCView = (const OpenGl_CView* )theCView.ptrView;
+  if (aCView == NULL)
   {
-    aCView->View->SetTextureEnv(ACView.Context.TexEnvId);
-    aCView->View->SetSurfaceDetail((Visual3d_TypeOfSurfaceDetail)ACView.Context.SurfaceDetail);
+    return;
   }
+
+  aCView->View->SetTextureEnv    (GetSharedContext(), theCView.Context.TextureEnv);
+  aCView->View->SetSurfaceDetail ((Visual3d_TypeOfSurfaceDetail)theCView.Context.SurfaceDetail);
 }
 
 //
@@ -138,138 +135,3 @@ void OpenGl_GraphicDriver::GraduatedTrihedronMinMaxValues(const Standard_ShortRe
 {
   OpenGl_GraduatedTrihedron::SetMinMax(xmin, ymin, zmin, xmax, ymax, zmax);
 }
-
-// Helper function, returns the nearest power of two greater than the argument value
-inline Standard_Integer GetNearestPow2(Standard_Integer theValue)
-{
-  // Precaution against overflow
-  Standard_Integer aHalfMax = IntegerLast() >> 1, aRes = 1;
-  if ( theValue > aHalfMax ) theValue = aHalfMax;
-  while ( aRes < theValue ) aRes <<= 1;
-  return aRes;
-}
-
-Standard_Integer OpenGl_GraphicDriver::CreateTexture (const Graphic3d_TypeOfTexture        theType,
-                                                      const Image_PixMap&                  theImage,
-                                                      const Standard_CString               theFileName,
-                                                      const Handle(TColStd_HArray1OfReal)& theTexUpperBounds) const
-{
-  if (theImage.IsEmpty())
-  {
-    return -1;
-  }
-
-  Standard_Integer aGlWidth  = (Standard_Integer )theImage.Width();
-  Standard_Integer aGlHeight = (Standard_Integer )theImage.Height();
-  if (theType != Graphic3d_TOT_2D_MIPMAP)
-  {
-    aGlWidth  = GetNearestPow2 (aGlWidth);
-    aGlHeight = GetNearestPow2 (aGlHeight);
-  }
-  theTexUpperBounds->SetValue (1, Standard_Real(theImage.Width())  / Standard_Real(aGlWidth));
-  theTexUpperBounds->SetValue (2, Standard_Real(theImage.Height()) / Standard_Real(aGlHeight));
-
-  Image_PixMap anImage;
-  if (!anImage.InitTrash (Image_PixMap::ImgRGBA, Standard_Size(aGlWidth), Standard_Size(aGlHeight)))
-  {
-    return -1;
-  }
-
-  anImage.SetTopDown (false);
-  Image_PixMapData<Image_ColorRGBA>& aDataNew = anImage.EditData<Image_ColorRGBA>();
-  Quantity_Color aSrcColor;
-  for (Standard_Size aRow = 0; aRow < theImage.SizeY(); ++aRow)
-  {
-    for (Standard_Size aCol = 0; aCol < theImage.SizeX(); ++aCol)
-    {
-      aSrcColor = theImage.PixelColor (aCol, aRow);
-      Image_ColorRGBA& aColor = aDataNew.ChangeValue (aRow, aCol);
-      aColor.r() = int(255.0 * aSrcColor.Red());
-      aColor.g() = int(255.0 * aSrcColor.Green());
-      aColor.b() = int(255.0 * aSrcColor.Blue());
-      aColor.a() = 0xFF;
-    }
-
-    for (Standard_Size aCol = theImage.SizeX(); aCol < anImage.SizeX(); ++aCol)
-    {
-      Image_ColorRGBA& aColor = aDataNew.ChangeValue (aRow, aCol);
-      aColor.r() = 0x00;
-      aColor.g() = 0x00;
-      aColor.b() = 0x00;
-      aColor.a() = 0xFF;
-    }
-  }
-
-  // Padding the lower part of the texture with black
-  for (Standard_Size aRow = theImage.SizeY(); aRow < anImage.SizeY(); ++aRow)
-  {
-    for (Standard_Size aCol = 0; aCol < anImage.SizeX(); ++aCol)
-    {
-      Image_ColorRGBA& aColor = aDataNew.ChangeValue (aRow, aCol);
-      aColor.r() = 0x00;
-      aColor.g() = 0x00;
-      aColor.b() = 0x00;
-      aColor.a() = 0xFF;
-    }
-  }
-
-  static Standard_Integer TheTextureRank = 0;
-  char aTextureStrId[255];
-  sprintf (aTextureStrId, "Tex%d", ++TheTextureRank);
-
-  switch (theType)
-  {
-    case Graphic3d_TOT_1D:        return GetTextureData1D       (aTextureStrId, aGlWidth, aGlHeight, anImage.Data());
-    case Graphic3d_TOT_2D:        return GetTextureData2D       (aTextureStrId, aGlWidth, aGlHeight, anImage.Data());
-    case Graphic3d_TOT_2D_MIPMAP: return GetTextureData2DMipMap (aTextureStrId, aGlWidth, aGlHeight, anImage.Data());
-    default:                      return -1;
-  }
-}
-
-void OpenGl_GraphicDriver::DestroyTexture (const Standard_Integer theTexId) const
-{
-  FreeTexture (GetSharedContext(), theTexId);
-}
-
-void OpenGl_GraphicDriver::ModifyTexture (const Standard_Integer        theTexId,
-                                          const Graphic3d_CInitTexture& theInfo) const
-{
-  if (theInfo.doModulate)
-    SetTextureModulate (theTexId);
-  else
-    SetTextureDecal (theTexId);
-
-  if (theInfo.doRepeat)
-    SetTextureRepeat (theTexId);
-  else
-    SetTextureClamp (theTexId);
-
-  switch (theInfo.Mode)
-  {
-    case 0:
-      SetModeObject (theTexId, theInfo.sparams, theInfo.tparams);
-      break;
-
-    case 1:
-      SetModeSphere (theTexId);
-      break;
-
-    case 2:
-      SetModeEye (theTexId, theInfo.sparams, theInfo.tparams);
-      break;
-
-    case 3:
-      SetModeManual (theTexId);
-      break;
-  }
-
-  if (theInfo.doLinear)
-    SetRenderLinear (theTexId);
-  else
-    SetRenderNearest (theTexId);
-
-  SetTexturePosition (theTexId,
-                      theInfo.sx, theInfo.sy,
-                      theInfo.tx, theInfo.ty,
-                      theInfo.angle);
-}
index 51a5919..4f4e2eb 100644 (file)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #include <OpenGl_Group.hxx>
 
-#include <OpenGl_TextureBox.hxx>
 #include <OpenGl_PrimitiveArray.hxx>
+#include <OpenGl_Workspace.hxx>
 
 /*----------------------------------------------------------------------*/
 
@@ -60,19 +59,22 @@ void OpenGl_Group::SetAspectLine (const CALL_DEF_CONTEXTLINE& theContext,
 
 /*----------------------------------------------------------------------*/
 
-void OpenGl_Group::SetAspectFace (const CALL_DEF_CONTEXTFILLAREA& theContext,
-                                  const Standard_Boolean theIsGlobal)
+void OpenGl_Group::SetAspectFace (const Handle(OpenGl_Context)&   theCtx,
+                                  const CALL_DEF_CONTEXTFILLAREA& theAspect,
+                                  const Standard_Boolean          theIsGlobal)
 {
   if (theIsGlobal || myFirst == NULL)
   {
     if (myAspectFace == NULL)
+    {
       myAspectFace = new OpenGl_AspectFace();
-    myAspectFace->SetContext (theContext);
+    }
+    myAspectFace->Init (theCtx, theAspect);
   }
   else
   {
     OpenGl_AspectFace* anAspectFace = new OpenGl_AspectFace();
-    anAspectFace->SetContext (theContext);
+    anAspectFace->Init (theCtx, theAspect);
     AddElement (TelNil/*TelAspectFace*/, anAspectFace);
   }
 }
@@ -141,7 +143,7 @@ void OpenGl_Group::RemovePrimitiveArray (const Handle(OpenGl_Context)& theGlCtx,
       CALL_DEF_PARRAY* aCurPArray = ((const OpenGl_PrimitiveArray* )node->elem)->PArray();
 
       // validate for correct pointer
-      if (aCurPArray->num_bounds  == thePArray->num_bounds  && 
+      if (aCurPArray->num_bounds  == thePArray->num_bounds  &&
           aCurPArray->num_edges   == thePArray->num_edges   &&
           aCurPArray->num_vertexs == thePArray->num_vertexs &&
           aCurPArray->type        == thePArray->type)
@@ -160,54 +162,69 @@ void OpenGl_Group::RemovePrimitiveArray (const Handle(OpenGl_Context)& theGlCtx,
 
 /*----------------------------------------------------------------------*/
 
-void OpenGl_Group::Render (const Handle(OpenGl_Workspace) &AWorkspace) const
+void OpenGl_Group::Render (const Handle(OpenGl_Workspace)& theWorkspace) const
 {
   // Is rendering in ADD or IMMEDIATE mode?
-  const Standard_Boolean isImmediate = (AWorkspace->NamedStatus & (OPENGL_NS_ADD | OPENGL_NS_IMMEDIATE)) != 0;
+  const Standard_Boolean isImmediate = (theWorkspace->NamedStatus & (OPENGL_NS_ADD | OPENGL_NS_IMMEDIATE)) != 0;
 
   // Setup aspects
-  const OpenGl_AspectLine *aspect_line = AWorkspace->AspectLine(Standard_False);
-  const OpenGl_AspectFace *aspect_face = AWorkspace->AspectFace(Standard_False);
-  const OpenGl_AspectMarker *aspect_marker = AWorkspace->AspectMarker(Standard_False);
-  const OpenGl_AspectText *aspect_text = AWorkspace->AspectText(Standard_False);
+  const OpenGl_AspectLine*   aBackAspectLine   = theWorkspace->AspectLine   (Standard_False);
+  const OpenGl_AspectFace*   aBackAspectFace   = theWorkspace->AspectFace   (Standard_False);
+  const OpenGl_AspectMarker* aBackAspectMarker = theWorkspace->AspectMarker (Standard_False);
+  const OpenGl_AspectText*   aBackAspectText   = theWorkspace->AspectText   (Standard_False);
   if (myAspectLine)
-    AWorkspace->SetAspectLine(myAspectLine);
+  {
+    theWorkspace->SetAspectLine (myAspectLine);
+  }
   if (myAspectFace)
-    AWorkspace->SetAspectFace(myAspectFace);
+  {
+    theWorkspace->SetAspectFace (myAspectFace);
+  }
   if (myAspectMarker)
-    AWorkspace->SetAspectMarker(myAspectMarker);
+  {
+    theWorkspace->SetAspectMarker (myAspectMarker);
+  }
   if (myAspectText)
-    AWorkspace->SetAspectText(myAspectText);
+  {
+    theWorkspace->SetAspectText (myAspectText);
+  }
 
   // Render group elements
-  OpenGl_ElementNode *node = myFirst;
-  while (node)
+  Handle(OpenGl_Texture) aPrevTexture; // temporary disabled texture
+  for (OpenGl_ElementNode* aNodeIter = myFirst; aNodeIter != NULL; aNodeIter = aNodeIter->next)
   {
-    switch (node->type)
+    switch (aNodeIter->type)
     {
       case TelPolyline:
       case TelMarker:
       case TelMarkerSet:
       case TelText:
       {
-        glDisable(GL_LIGHTING);
+        glDisable (GL_LIGHTING);
 
         if (isImmediate)
         {
-          glDepthMask(GL_FALSE);
+          glDepthMask (GL_FALSE);
         }
-        else if ( (AWorkspace->NamedStatus & OPENGL_NS_ANIMATION) != 0 &&
-                  (AWorkspace->NamedStatus & OPENGL_NS_WIREFRAME) == 0 &&
-                   AWorkspace->DegenerateModel != 0 )
+        else if ((theWorkspace->NamedStatus & OPENGL_NS_ANIMATION) != 0 &&
+                 (theWorkspace->NamedStatus & OPENGL_NS_WIREFRAME) == 0 &&
+                  theWorkspace->DegenerateModel != 0)
         {
-          glDisable( GL_DEPTH_TEST );
-          if ( AWorkspace->NamedStatus & OPENGL_NS_TEXTURE ) DisableTexture();
-          AWorkspace->NamedStatus |= OPENGL_NS_WIREFRAME;
+          glDisable (GL_DEPTH_TEST);
+          if (theWorkspace->NamedStatus & OPENGL_NS_TEXTURE)
+          {
+            aPrevTexture = theWorkspace->DisableTexture();
+          }
+          theWorkspace->NamedStatus |= OPENGL_NS_WIREFRAME;
         }
 
-        node->elem->Render( AWorkspace );
+        if (!aPrevTexture.IsNull())
+        {
+          theWorkspace->EnableTexture (aPrevTexture);
+          aPrevTexture.Nullify();
+        }
 
-        if ( !isImmediate && (AWorkspace->NamedStatus & OPENGL_NS_TEXTURE) != 0 ) EnableTexture();
+        aNodeIter->elem->Render (theWorkspace);
         break;
       }
 
@@ -220,40 +237,41 @@ void OpenGl_Group::Render (const Handle(OpenGl_Workspace) &AWorkspace) const
         {
           glDepthMask(GL_FALSE);
         }
-        else if ( (AWorkspace->NamedStatus & OPENGL_NS_ANIMATION) != 0 &&
-                  (AWorkspace->NamedStatus & OPENGL_NS_WIREFRAME) != 0 &&
-                  AWorkspace->DegenerateModel < 2 )
+        else if ((theWorkspace->NamedStatus & OPENGL_NS_ANIMATION) != 0 &&
+                 (theWorkspace->NamedStatus & OPENGL_NS_WIREFRAME) != 0 &&
+                  theWorkspace->DegenerateModel < 2)
         {
-          if ( AWorkspace->NamedStatus & OPENGL_NS_TEXTURE ) EnableTexture ();
-
-          glEnable( GL_DEPTH_TEST );
-          AWorkspace->NamedStatus &= ~OPENGL_NS_WIREFRAME;
+          glEnable (GL_DEPTH_TEST);
+          theWorkspace->NamedStatus &= ~OPENGL_NS_WIREFRAME;
         }
 
-        if ( AWorkspace->NamedStatus & OPENGL_NS_HIGHLIGHT )
-          AWorkspace->DisablePolygonOffset();
+        if (theWorkspace->NamedStatus & OPENGL_NS_HIGHLIGHT)
+        {
+          theWorkspace->DisablePolygonOffset();
+        }
 
-        node->elem->Render( AWorkspace );
+        aNodeIter->elem->Render (theWorkspace);
 
-        if ( AWorkspace->NamedStatus & OPENGL_NS_HIGHLIGHT )
-          AWorkspace->EnablePolygonOffset();
+        if (theWorkspace->NamedStatus & OPENGL_NS_HIGHLIGHT)
+        {
+          theWorkspace->EnablePolygonOffset();
+        }
         break;
       }
 
       default:
       {
-        node->elem->Render( AWorkspace );
+        aNodeIter->elem->Render (theWorkspace);
         break;
       }
     }
-    node = node->next;
   }
 
   // Restore aspects
-  AWorkspace->SetAspectLine(aspect_line);
-  AWorkspace->SetAspectFace(aspect_face);
-  AWorkspace->SetAspectMarker(aspect_marker);
-  AWorkspace->SetAspectText(aspect_text);
+  theWorkspace->SetAspectLine   (aBackAspectLine);
+  theWorkspace->SetAspectFace   (aBackAspectFace);
+  theWorkspace->SetAspectMarker (aBackAspectMarker);
+  theWorkspace->SetAspectText   (aBackAspectText);
 }
 
 void OpenGl_Group::Release (const Handle(OpenGl_Context)& theGlCtx)
index d2cbee1..705dfec 100644 (file)
@@ -17,7 +17,6 @@
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #ifndef _OpenGl_Group_Header
 #define _OpenGl_Group_Header
 
@@ -48,7 +47,9 @@ public:
   OpenGl_Group();
 
   void SetAspectLine (const CALL_DEF_CONTEXTLINE &AContext, const Standard_Boolean IsGlobal = Standard_True);
-  void SetAspectFace (const CALL_DEF_CONTEXTFILLAREA &AContext, const Standard_Boolean IsGlobal = Standard_True);
+  void SetAspectFace (const Handle(OpenGl_Context)&   theCtx,
+                      const CALL_DEF_CONTEXTFILLAREA& theAspect,
+                      const Standard_Boolean          IsGlobal = Standard_True);
   void SetAspectMarker (const CALL_DEF_CONTEXTMARKER &AContext, const Standard_Boolean IsGlobal = Standard_True);
   void SetAspectText (const CALL_DEF_CONTEXTTEXT &AContext, const Standard_Boolean IsGlobal = Standard_True);
 
index 2462265..b8abc80 100644 (file)
@@ -26,6 +26,7 @@
 #include <OpenGl_AspectMarker.hxx>
 #include <OpenGl_Structure.hxx>
 #include <OpenGl_Display.hxx>
+#include <OpenGl_Workspace.hxx>
 
 /*----------------------------------------------------------------------*/
 
@@ -85,7 +86,7 @@ void OpenGl_Marker::Render (const Handle(OpenGl_Workspace) &AWorkspace) const
           break;
         }
         case Aspect_TOM_USERDEFINED :
-        {       
+        {
           glCallList( openglDisplay->GetUserMarkerListIndex( (int)aspect_marker->Scale() ) );
           break;
         }
index 09231f5..2ba4bc5 100644 (file)
@@ -17,7 +17,6 @@
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #include <OpenGl_GlCore11.hxx>
 #include <OpenGl_Context.hxx>
 
@@ -26,6 +25,7 @@
 #include <OpenGl_AspectMarker.hxx>
 #include <OpenGl_Structure.hxx>
 #include <OpenGl_Display.hxx>
+#include <OpenGl_Workspace.hxx>
 
 /*----------------------------------------------------------------------*/
 
index d370ef8..cedbd62 100644 (file)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #include <OpenGl_GlCore11.hxx>
 
 #include <OpenGl_Polygon.hxx>
 
 #include <OpenGl_telem_util.hxx>
-#include <OpenGl_TextureBox.hxx>
 
 #include <OpenGl_AspectFace.hxx>
 #include <OpenGl_Structure.hxx>
+#include <OpenGl_Workspace.hxx>
 
 #include <GL/glu.h>
 
@@ -113,7 +112,7 @@ void OpenGl_Polygon::draw_polygon (const Handle(OpenGl_Workspace) &AWorkspace, T
         {
           glNormal3fv( pvn[i].xyz );
           glVertex3fv( ptr->xyz );
-        }      
+        }
     }
     else
     {
@@ -140,7 +139,7 @@ void OpenGl_Polygon::draw_polygon (const Handle(OpenGl_Workspace) &AWorkspace, T
         glVertex3fv( ptr->xyz );
       }
     }
-  } 
+  }
   glEnd();
   if( myData.reverse_order ) glFrontFace( GL_CCW );
 
@@ -283,7 +282,7 @@ bgntriangulate(const TEL_POLYGON_DATA *d, void ( APIENTRY * out_ver)() )
   gluTessCallback( tripak, GLU_TESS_END, out_endtmesh );
   gluTessCallback( tripak, GLU_TESS_ERROR, (_GLUfuncptr)(out_error) );
   gluTessCallback( tripak, GLU_TESS_COMBINE, (_GLUfuncptr)(mycombine) );
-#else 
+#else
   gluTessCallback( tripak, GLU_TESS_BEGIN, (void (APIENTRY*)())out_bgntmesh );
   gluTessCallback( tripak, GLU_TESS_VERTEX, (void (APIENTRY*)())out_ver );
   gluTessCallback( tripak, GLU_TESS_END, (void (APIENTRY*)())out_endtmesh );
@@ -360,7 +359,7 @@ void OpenGl_Polygon::draw_polygon_concav (const Handle(OpenGl_Workspace) &AWorks
     {
       xyz[0] = ptr->xyz[0];
       xyz[1] = ptr->xyz[1];
-      xyz[2] = ptr->xyz[2];    
+      xyz[2] = ptr->xyz[2];
 #ifndef WNT
       gluTessVertex( tripak, xyz,(void * ) i );
 #else
@@ -373,8 +372,8 @@ void OpenGl_Polygon::draw_polygon_concav (const Handle(OpenGl_Workspace) &AWorks
     gluTessEndContour( tripak );
     gluTessEndPolygon( tripak );
     endtriangulate();
-  } 
-  else 
+  }
+  else
   {
     if( front_lighting_model )
     {
@@ -391,37 +390,39 @@ void OpenGl_Polygon::draw_polygon_concav (const Handle(OpenGl_Workspace) &AWorks
 
 /*----------------------------------------------------------------------*/
 
-void OpenGl_Polygon::draw_edges (const TEL_COLOUR *edge_colour, const Aspect_InteriorStyle interior_style, const Handle(OpenGl_Workspace) &AWorkspace) const
+void OpenGl_Polygon::draw_edges (const TEL_COLOUR*               theEdgeColor,
+                                 const Aspect_InteriorStyle      theInteriorStyle,
+                                 const Handle(OpenGl_Workspace)& theWorkspace) const
 {
-  const OpenGl_AspectFace *aspect_face = AWorkspace->AspectFace( Standard_True );
+  const OpenGl_AspectFace* anAspectFace = theWorkspace->AspectFace (Standard_True);
 
-  if ( interior_style != Aspect_IS_HIDDENLINE && aspect_face->Context().Edge == TOff )
+  if (theInteriorStyle != Aspect_IS_HIDDENLINE
+   && anAspectFace->Edge == TOff)
+  {
     return;
+  }
 
-  glDisable(GL_LIGHTING);
-  const GLboolean texture_on = IsTextureEnabled();
-  if (texture_on) DisableTexture();
+  glDisable (GL_LIGHTING);
+  const Handle(OpenGl_Texture) aPrevTexture = theWorkspace->DisableTexture();
 
   // Setup line aspect
-  const OpenGl_AspectLine *aspect_line_old = AWorkspace->SetAspectLine( aspect_face->AspectEdge() );
-  AWorkspace->AspectLine( Standard_True );
-
-  Tint i;
-  tel_point ptr = myData.vertices;
+  const OpenGl_AspectLine* aPrevAspectLine = theWorkspace->SetAspectLine (anAspectFace->AspectEdge());
+  theWorkspace->AspectLine (Standard_True);
 
-  glColor3fv( edge_colour->rgb );
+  glColor3fv (theEdgeColor->rgb);
 
-  glBegin(GL_LINE_LOOP);
-  for( i=0; i<myData.num_vertices; i++, ptr++ )
+  glBegin (GL_LINE_LOOP);
+  tel_point ptr = myData.vertices;
+  for (Tint i = 0; i < myData.num_vertices; i++, ptr++)
   {
-    glVertex3fv( ptr->xyz );
+    glVertex3fv (ptr->xyz);
   }
   glEnd();
 
   // Restore line context
-  AWorkspace->SetAspectLine( aspect_line_old );
+  theWorkspace->SetAspectLine (aPrevAspectLine);
 
-  if (texture_on) EnableTexture();
+  theWorkspace->EnableTexture (aPrevTexture);
 }
 
 /*----------------------------------------------------------------------*/
@@ -578,20 +579,20 @@ void OpenGl_Polygon::Render (const Handle(OpenGl_Workspace) &AWorkspace) const
 {
   const OpenGl_AspectFace *aspect_face = AWorkspace->AspectFace( Standard_True );
 
-  Tint front_lighting_model = aspect_face->Context().IntFront.color_mask;
-  const Aspect_InteriorStyle interior_style = aspect_face->Context().InteriorStyle;
-  const TEL_COLOUR *interior_colour = &aspect_face->Context().IntFront.matcol;
+  Tint front_lighting_model = aspect_face->IntFront.color_mask;
+  const Aspect_InteriorStyle interior_style = aspect_face->InteriorStyle;
+  const TEL_COLOUR *interior_colour = &aspect_face->IntFront.matcol;
   const TEL_COLOUR *edge_colour = &aspect_face->AspectEdge()->Color();
 
   // Use highlight colous
   if ( AWorkspace->NamedStatus & OPENGL_NS_HIGHLIGHT )
-  {                         
+  {
     edge_colour = interior_colour = AWorkspace->HighlightColor;
     front_lighting_model = 0;
   }
 
   if( interior_style != Aspect_IS_EMPTY && AWorkspace->DegenerateModel < 2 )
-  {          
+  {
     if ( front_lighting_model )
       glEnable(GL_LIGHTING);
     else
index 05dd82a..73770f5 100644 (file)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #include <OpenGl_GlCore11.hxx>
 
 #include <OpenGl_Polyline.hxx>
 
 #include <OpenGl_AspectLine.hxx>
 #include <OpenGl_Structure.hxx>
+#include <OpenGl_Workspace.hxx>
 
 /*----------------------------------------------------------------------*/
 
index b29d51e..a512f26 100755 (executable)
@@ -25,7 +25,7 @@
 #include <OpenGl_AspectFace.hxx>
 #include <OpenGl_GraphicDriver.hxx>
 #include <OpenGl_Structure.hxx>
-#include <OpenGl_TextureBox.hxx>
+#include <OpenGl_Workspace.hxx>
 
 #include <InterfaceGraphic_PrimitiveArray.hxx>
 
@@ -157,10 +157,10 @@ void OpenGl_PrimitiveArray::DrawArray (Tint theLightingModel,
     for (i = 0; i < myPArray->num_vertexs; ++i)
     {
       transp = int(theFaceProp->trans * 255.0f);
-    #if defined (sparc) || defined (__sparc__) || defined (__sparc) 
+    #if defined (sparc) || defined (__sparc__) || defined (__sparc)
       pvc[i] = (pvc[i] & 0xffffff00);
       pvc[i] += transp;
-    #else     
+    #else
       pvc[i] = (pvc[i] & 0x00ffffff);
       pvc[i] += transp << 24;
     #endif
@@ -210,7 +210,7 @@ void OpenGl_PrimitiveArray::DrawArray (Tint theLightingModel,
     }
 
     // Sometimes the GL_LIGHTING mode is activated here
-    // without glEnable(GL_LIGHTING) call for an unknown reason, so it is necessary 
+    // without glEnable(GL_LIGHTING) call for an unknown reason, so it is necessary
     // to call glEnable(GL_LIGHTING) to synchronize Light On/Off mechanism*
     if (theLightingModel == 0 || myDrawMode <= GL_LINE_STRIP)
       glDisable (GL_LIGHTING);
@@ -279,7 +279,7 @@ void OpenGl_PrimitiveArray::DrawArray (Tint theLightingModel,
           for (i = 0; i < myPArray->num_bounds; ++i)
           {
             glDrawElements (myDrawMode, myPArray->bounds[i], myVbos[VBOEdges]->GetDataType(), anOffset);
-            anOffset += myPArray->bounds[i]; 
+            anOffset += myPArray->bounds[i];
           }
         }
         else
@@ -318,7 +318,7 @@ void OpenGl_PrimitiveArray::DrawArray (Tint theLightingModel,
         glDisable (GL_COLOR_MATERIAL);
         theWorkspace->NamedStatus |= OPENGL_NS_RESMAT; // Reset material
       }
-    } 
+    }
     else
     {
       if (myPArray->num_bounds > 0)
@@ -384,13 +384,13 @@ void OpenGl_PrimitiveArray::DrawArray (Tint theLightingModel,
     switch (theWorkspace->DegenerateModel)
     {
       default: // XXX_TDM_NODE or TINY
-        //  On some NVIDIA graphic cards, using glEdgeFlagPointer() in 
+        //  On some NVIDIA graphic cards, using glEdgeFlagPointer() in
         //  combination with VBO ( edge flag data put into a VBO buffer)
-        //  leads to a crash in a driver. Therefore, edge flags are simply 
-        //  igonored when VBOs are enabled, so all the edges are drawn if 
-        //  edge visibility is turned on. In order to draw edges selectively, 
-        //  either disable VBO or turn off edge visibilty in the current 
-        //  primitive array and create a separate primitive array (segments) 
+        //  leads to a crash in a driver. Therefore, edge flags are simply
+        //  igonored when VBOs are enabled, so all the edges are drawn if
+        //  edge visibility is turned on. In order to draw edges selectively,
+        //  either disable VBO or turn off edge visibilty in the current
+        //  primitive array and create a separate primitive array (segments)
         //  and put edges to be drawn into it.
         if (myDrawMode > GL_LINE_STRIP)
         {
@@ -444,7 +444,7 @@ void OpenGl_PrimitiveArray::DrawEdges (const TEL_COLOUR*               theEdgeCo
   /// 2) draw elements from vertice array, when bounds defines count of primitive's verts.
   /// 3) draw primitive's edges by vertexes if no edges and bounds array is specified
   if (toDrawVbo())
-  { 
+  {
     myVbos[VBOVertices]->BindFixed (aGlContext, GL_VERTEX_ARRAY);
     glColor3fv (theEdgeColour->rgb);
     if (!myVbos[VBOEdges].IsNull())
@@ -521,7 +521,7 @@ void OpenGl_PrimitiveArray::DrawEdges (const TEL_COLOUR*               theEdgeCo
           n += myPArray->bounds[i];
         }
       }
-    } 
+    }
     else if (myPArray->num_edges > 0)
     {
       if (myPArray->edge_vis)
@@ -558,7 +558,7 @@ void OpenGl_PrimitiveArray::DrawEdges (const TEL_COLOUR*               theEdgeCo
 // purpose  :
 // =======================================================================
 void OpenGl_PrimitiveArray::DrawDegeneratesPointsAsPoints() const
-{ 
+{
   tel_point pv = myPArray->vertices;
   for (Tint aVertId = 0; aVertId < myPArray->num_vertexs; ++aVertId)
   {
@@ -589,7 +589,7 @@ void OpenGl_PrimitiveArray::DrawDegeneratesLinesAsPoints() const
     pt[2] *= 0.5f;
     glVertex3fv (pt);
   }
-}  
+}
 
 // =======================================================================
 // function : DrawDegeneratesTrianglesAsPoints
@@ -648,7 +648,7 @@ void OpenGl_PrimitiveArray::DrawDegeneratesTrianglesAsPoints() const
 // purpose  :
 // =======================================================================
 void OpenGl_PrimitiveArray::DrawDegeneratesTrianglestripsAsPoints() const
-{ 
+{
   Tint      i, j, k, n;
   GLfloat   pt[ 3 ];
   tel_point pv = myPArray->vertices;
@@ -702,7 +702,7 @@ void OpenGl_PrimitiveArray::DrawDegeneratesTrianglestripsAsPoints() const
 // purpose  :
 // =======================================================================
 void OpenGl_PrimitiveArray::DrawDegeneratesPolygonsAsPoints() const
-{ 
+{
   Tint      j, k, n, iv;
   GLfloat   pt[3];
   tel_point pv = myPArray->vertices;
@@ -823,14 +823,14 @@ void OpenGl_PrimitiveArray::DrawDegeneratesQuadranglesAsPoints() const
       glVertex3fv (pt);
     }
   }
-}  
+}
 
 // =======================================================================
 // function : DrawDegeneratesAsPoints
 // purpose  :
 // =======================================================================
 void OpenGl_PrimitiveArray::DrawDegeneratesQuadranglestripsAsPoints() const
-{ 
+{
   Tint      i, j, k, n;
   GLfloat   pt[3];
   tel_point pv = myPArray->vertices;
@@ -888,7 +888,7 @@ void OpenGl_PrimitiveArray::DrawDegeneratesAsPoints (const TEL_COLOUR* theEdgeCo
   GLboolean zbuff_state = glIsEnabled (GL_DEPTH_TEST);
   glDisable (GL_LIGHTING);
   if (zbuff_state)
-    glDisable (GL_DEPTH_TEST); 
+    glDisable (GL_DEPTH_TEST);
   glColor3fv (theEdgeColour->rgb);
 
   glBegin (GL_POINTS);
@@ -1014,7 +1014,7 @@ void OpenGl_PrimitiveArray::DrawDegeneratesLinesAsLines (const float theSkipRati
 // purpose  :
 // =======================================================================
 void OpenGl_PrimitiveArray::DrawDegeneratesTrianglesAsLines (const float theSkipRatio) const
-{ 
+{
   Tint i, iv;
   tel_point pv = myPArray->vertices;
 
@@ -1032,7 +1032,7 @@ void OpenGl_PrimitiveArray::DrawDegeneratesTrianglesAsLines (const float theSkip
     {
       iv = myPArray->edges[j];
       if (myPArray->keys[iv] < 0)
-      { 
+      {
         myPArray->keys[iv] = -myPArray->keys[iv];
         glBegin (GL_LINE_LOOP);
         for (i = 0; i < 3; ++i)
@@ -1067,7 +1067,7 @@ void OpenGl_PrimitiveArray::DrawDegeneratesTrianglesAsLines (const float theSkip
 // purpose  :
 // =======================================================================
 void OpenGl_PrimitiveArray::DrawDegeneratesTrianglestripsAsLines (const float theSkipRatio) const
-{ 
+{
   Tint i, j, k, n, ni;
   tel_point pv = myPArray->vertices;
 
@@ -1126,7 +1126,7 @@ void OpenGl_PrimitiveArray::DrawDegeneratesTrianglestripsAsLines (const float th
 // purpose  :
 // =======================================================================
 void OpenGl_PrimitiveArray::DrawDegeneratesPolygonsAsLines (const float theSkipRatio) const
-{ 
+{
   Tint i, iv;
   tel_point pv = myPArray->vertices;
 
@@ -1203,7 +1203,7 @@ void OpenGl_PrimitiveArray::DrawDegeneratesPolygonsAsLines (const float theSkipR
     }
     glEnd();
   }
-}  
+}
 
 // =======================================================================
 // function : DrawDegeneratesQuadranglesAsLines
@@ -1263,7 +1263,7 @@ void OpenGl_PrimitiveArray::DrawDegeneratesQuadranglesAsLines (const float theSk
 // purpose  :
 // =======================================================================
 void OpenGl_PrimitiveArray::DrawDegeneratesQuadranglestripsAsLines (const float theSkipRatio) const
-{ 
+{
   Tint i, j, k, n, ni;
   tel_point pv = myPArray->vertices;
 
@@ -1333,7 +1333,7 @@ void OpenGl_PrimitiveArray::DrawDegeneratesAsLines (const TEL_COLOUR*
   glDisable (GL_LIGHTING);
 
   if (zbuff_state)
-    glDisable (GL_DEPTH_TEST); 
+    glDisable (GL_DEPTH_TEST);
 
   glColor3fv (theEdgeColour->rgb);
 
@@ -1433,8 +1433,8 @@ void OpenGl_PrimitiveArray::DrawDegeneratesAsLines (const TEL_COLOUR*
   }
 
   if (zbuff_state)
-    glEnable(GL_DEPTH_TEST); 
-}  
+    glEnable(GL_DEPTH_TEST);
+}
 
 // =======================================================================
 // function : DrawDegeneratesAsBBoxs
@@ -1567,7 +1567,9 @@ void OpenGl_PrimitiveArray::Release (const Handle(OpenGl_Context)& theContext)
 void OpenGl_PrimitiveArray::Render (const Handle(OpenGl_Workspace)& theWorkspace) const
 {
   if (myPArray == NULL || myDrawMode == DRAW_MODE_NONE || myPArray->num_vertexs <= 0)
+  {
     return;
+  }
 
   // create VBOs on first render call
   if (!myIsVboInit && OpenGl_GraphicDriver::ToUseVBO() && theWorkspace->GetGlContext()->core15 != NULL)
@@ -1576,6 +1578,7 @@ void OpenGl_PrimitiveArray::Render (const Handle(OpenGl_Workspace)& theWorkspace
     myIsVboInit = Standard_True;
   }
 
+  Standard_Boolean toDisableTexture = Standard_False;
   switch (myPArray->type)
   {
     case TelPointsArrayType:
@@ -1589,8 +1592,7 @@ void OpenGl_PrimitiveArray::Render (const Handle(OpenGl_Workspace)& theWorkspace
            theWorkspace->DegenerateModel)
       {
         glDisable (GL_DEPTH_TEST);
-        if (theWorkspace->NamedStatus & OPENGL_NS_TEXTURE)
-          DisableTexture();
+        toDisableTexture = (theWorkspace->NamedStatus & OPENGL_NS_TEXTURE);
         theWorkspace->NamedStatus |= OPENGL_NS_WIREFRAME;
       }
       break;
@@ -1606,8 +1608,6 @@ void OpenGl_PrimitiveArray::Render (const Handle(OpenGl_Workspace)& theWorkspace
           (theWorkspace->NamedStatus & OPENGL_NS_WIREFRAME) != 0 &&
            theWorkspace->DegenerateModel < 2)
       {
-        if (theWorkspace->NamedStatus & OPENGL_NS_TEXTURE)
-          EnableTexture();
         glEnable (GL_DEPTH_TEST);
         theWorkspace->NamedStatus &= ~OPENGL_NS_WIREFRAME;
       }
@@ -1617,39 +1617,38 @@ void OpenGl_PrimitiveArray::Render (const Handle(OpenGl_Workspace)& theWorkspace
       break;
   }
 
+  Handle(OpenGl_Texture) aPrevTexture;
   const OpenGl_AspectFace*   anAspectFace   = theWorkspace->AspectFace   (Standard_True);
   const OpenGl_AspectLine*   anAspectLine   = theWorkspace->AspectLine   (Standard_True);
   const OpenGl_AspectMarker* anAspectMarker = theWorkspace->AspectMarker (myPArray->type == TelPointsArrayType);
+  if (toDisableTexture)
+  {
+    aPrevTexture = theWorkspace->DisableTexture();
+  }
 
-  Tint aFrontLightingModel = anAspectFace->Context().IntFront.color_mask;
-  const TEL_COLOUR* anInteriorColor = &anAspectFace->Context().IntFront.matcol;
+  Tint aFrontLightingModel = anAspectFace->IntFront.color_mask;
+  const TEL_COLOUR* anInteriorColor = &anAspectFace->IntFront.matcol;
   const TEL_COLOUR* anEdgeColor = &anAspectFace->AspectEdge()->Color();
   const TEL_COLOUR* aLineColor = (myPArray->type == TelPointsArrayType) ? &anAspectMarker->Color() : &anAspectLine->Color();
 
   // Use highlight colors
   if (theWorkspace->NamedStatus & OPENGL_NS_HIGHLIGHT)
-  {                         
+  {
     anEdgeColor = anInteriorColor = aLineColor = theWorkspace->HighlightColor;
     aFrontLightingModel = 0;
   }
 
   DrawArray (aFrontLightingModel,
-             anAspectFace->Context().InteriorStyle,
-             anAspectFace->Context().Edge,
+             anAspectFace->InteriorStyle,
+             anAspectFace->Edge,
              anInteriorColor,
              aLineColor,
              anEdgeColor,
-             &anAspectFace->Context().IntFront,
+             &anAspectFace->IntFront,
              theWorkspace);
 
-  switch (myPArray->type)
+  if (!aPrevTexture.IsNull())
   {
-    case TelPointsArrayType:
-    case TelPolylinesArrayType:
-    case TelSegmentsArrayType:
-    {
-      if (theWorkspace->NamedStatus & OPENGL_NS_TEXTURE)
-        EnableTexture();
-    }
+    theWorkspace->EnableTexture (aPrevTexture);
   }
 }
index 4d4a4fd..0e9c545 100644 (file)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #ifndef OpenGl_PrimitiveArray_Header
 #define OpenGl_PrimitiveArray_Header
 
 #include <OpenGl_VertexBuffer.hxx>
 
-#include <InterfaceGraphic_telem.hxx>
+#include <InterfaceGraphic_Graphic3d.hxx>
 #include <Aspect_InteriorStyle.hxx>
 
 #include <OpenGl_Element.hxx>
diff --git a/src/OpenGl/OpenGl_ResourceTexture.cxx b/src/OpenGl/OpenGl_ResourceTexture.cxx
deleted file mode 100755 (executable)
index fd3eb8d..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-// Created on: 2011-03-18
-// Created by: Anton POLETAEV
-// Copyright (c) 2011-2012 OPEN CASCADE SAS
-//
-// The content of this file is subject to the Open CASCADE Technology Public
-// License Version 6.5 (the "License"). You may not use the content of this file
-// except in compliance with the License. Please obtain a copy of the License
-// at http://www.opencascade.org and read it completely before using this file.
-//
-// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
-// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
-//
-// The Original Code and all software distributed under the License is
-// distributed on an "AS IS" basis, without warranty of any kind, and the
-// Initial Developer hereby disclaims all such warranties, including without
-// limitation, any warranties of merchantability, fitness for a particular
-// purpose or non-infringement. Please see the License for the specific terms
-// and conditions governing the rights and limitations under the License.
-
-
-#include <OpenGl_GlCore11.hxx>
-#include <OpenGl_Context.hxx>
-#include <OpenGl_ResourceTexture.hxx>
-
-IMPLEMENT_STANDARD_HANDLE (OpenGl_ResourceTexture, OpenGl_Resource)
-IMPLEMENT_STANDARD_RTTIEXT(OpenGl_ResourceTexture, OpenGl_Resource)
-
-//=======================================================================
-//function : OpenGl_ResourceTexture
-//purpose  :
-//=======================================================================
-OpenGl_ResourceTexture::OpenGl_ResourceTexture (const GLuint theId)
-: myTextureId (theId)
-{
-  //
-}
-
-//=======================================================================
-//function : ~OpenGl_ResourceTexture
-//purpose  :
-//=======================================================================
-OpenGl_ResourceTexture::~OpenGl_ResourceTexture()
-{
-  Release (NULL);
-}
-
-//=======================================================================
-//function : Release
-//purpose  : free OpenGl memory allocated for texture resource
-//=======================================================================
-void OpenGl_ResourceTexture::Release (const OpenGl_Context* theGlCtx)
-{
-  if (myTextureId != 0 && theGlCtx != NULL)
-  {
-    glDeleteTextures (1, &myTextureId);
-    myTextureId = 0;
-  }
-}
index 20d5afd..5db8005 100644 (file)
@@ -112,11 +112,14 @@ void OpenGl_Structure::SetAspectLine (const CALL_DEF_CONTEXTLINE &AContext)
 
 /*----------------------------------------------------------------------*/
 
-void OpenGl_Structure::SetAspectFace (const CALL_DEF_CONTEXTFILLAREA &AContext)
+void OpenGl_Structure::SetAspectFace (const Handle(OpenGl_Context)&   theCtx,
+                                      const CALL_DEF_CONTEXTFILLAREA& theAspect)
 {
   if (!myAspectFace)
+  {
     myAspectFace = new OpenGl_AspectFace();
-  myAspectFace->SetContext( AContext );
+  }
+  myAspectFace->Init (theCtx, theAspect);
 }
 
 /*----------------------------------------------------------------------*/
@@ -485,7 +488,7 @@ void OpenGl_Structure::ReleaseGlResources (const Handle(OpenGl_Context)& theGlCt
 
 //=======================================================================
 //function : SetZLayer
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 void OpenGl_Structure::SetZLayer (const Standard_Integer theLayerIndex)
@@ -495,7 +498,7 @@ void OpenGl_Structure::SetZLayer (const Standard_Integer theLayerIndex)
 
 //=======================================================================
 //function : GetZLayer
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 Standard_Integer OpenGl_Structure::GetZLayer () const
index 2650592..5b1f513 100644 (file)
@@ -17,7 +17,6 @@
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #ifndef OpenGl_Structure_Header
 #define OpenGl_Structure_Header
 
 #include <OpenGl_Group.hxx>
 #include <OpenGl_Matrix.hxx>
 
-typedef NCollection_List<const OpenGl_Structure *> OpenGl_ListOfStructure;
-typedef NCollection_List<const OpenGl_Group *> OpenGl_ListOfGroup;
+class OpenGl_Structure;
+
+typedef NCollection_List<const OpenGl_Structure* > OpenGl_ListOfStructure;
+typedef NCollection_List<const OpenGl_Group*     > OpenGl_ListOfGroup;
 
 class OpenGl_Structure : public OpenGl_Element
 {
@@ -49,7 +50,8 @@ public:
   void SetDegenerateModel (const Standard_Integer AMode, const float ASkipRatio);
 
   void SetAspectLine (const CALL_DEF_CONTEXTLINE &AContext);
-  void SetAspectFace (const CALL_DEF_CONTEXTFILLAREA &AContext);
+  void SetAspectFace (const Handle(OpenGl_Context)&   theCtx,
+                      const CALL_DEF_CONTEXTFILLAREA& theAspect);
   void SetAspectMarker (const CALL_DEF_CONTEXTMARKER &AContext);
   void SetAspectText (const CALL_DEF_CONTEXTTEXT &AContext);
 
index ca4b825..b906a96 100644 (file)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
-
 #include <OpenGl_GlCore11.hxx>
 #include <OpenGl_Text.hxx>
 #include <OpenGl_AspectText.hxx>
 #include <OpenGl_Structure.hxx>
+#include <OpenGl_Workspace.hxx>
 
 #include <GL/glu.h> // gluUnProject()
 
@@ -79,7 +79,7 @@ void OpenGl_Text::Render (const Handle(OpenGl_Workspace) &AWorkspace) const
 
   // Use highlight colours
   if( AWorkspace->NamedStatus & OPENGL_NS_HIGHLIGHT )
-  {                         
+  {
     tcolor = scolor = AWorkspace->HighlightColor;
   }
   else
@@ -128,33 +128,33 @@ void OpenGl_Text::Render (const Handle(OpenGl_Workspace) &AWorkspace) const
       int sWidth, sAscent, sDescent;
       AWorkspace->StringSize(myString, sWidth, sAscent, sDescent);
 
-      objrefX = (float)myAttachPnt.xyz[0];   
-      objrefY = (float)myAttachPnt.xyz[1];   
+      objrefX = (float)myAttachPnt.xyz[0];
+      objrefY = (float)myAttachPnt.xyz[1];
       objrefZ = (float)myAttachPnt.xyz[2];
       status = gluProject (objrefX, objrefY, objrefZ, modelMatrix, projMatrix, viewport,
         &winx1, &winy1, &winz1);
 
       winx = winx1;
       winy = winy1-sDescent;
-      winz = winz1+0.00001;     
+      winz = winz1+0.00001;
       status = gluUnProject (winx, winy, winz, modelMatrix, projMatrix, viewport,
         &objX, &objY, &objZ);
 
       winx = winx1 + sWidth;
       winy = winy1-sDescent;
-      winz = winz1+0.00001; /* il vaut mieux F+B / 1000000 ? */     
+      winz = winz1+0.00001; /* il vaut mieux F+B / 1000000 ? */
       status = gluUnProject (winx, winy, winz, modelMatrix, projMatrix, viewport,
         &obj1X, &obj1Y, &obj1Z);
 
       winx = winx1 + sWidth;
       winy = winy1 + sAscent;
-      winz = winz1+0.00001;     
+      winz = winz1+0.00001;
       status = gluUnProject (winx, winy, winz, modelMatrix, projMatrix, viewport,
         &obj2X, &obj2Y, &obj2Z);
 
       winx = winx1;
       winy = winy1+ sAscent;
-      winz = winz1+0.00001;   
+      winz = winz1+0.00001;
       status = gluUnProject (winx, winy, winz, modelMatrix, projMatrix, viewport,
         &obj3X, &obj3Y, &obj3Z);
 
@@ -169,15 +169,15 @@ void OpenGl_Text::Render (const Handle(OpenGl_Workspace) &AWorkspace) const
     }
 
     case Aspect_TODT_DEKALE:
-      objrefX = (float)myAttachPnt.xyz[0];   
-      objrefY = (float)myAttachPnt.xyz[1];   
+      objrefX = (float)myAttachPnt.xyz[0];
+      objrefY = (float)myAttachPnt.xyz[1];
       objrefZ = (float)myAttachPnt.xyz[2];
       status = gluProject (objrefX, objrefY, objrefZ, modelMatrix, projMatrix, viewport,
         &winx1, &winy1, &winz1);
 
       winx = winx1+1;
       winy = winy1+1;
-      winz = winz1+0.00001;     
+      winz = winz1+0.00001;
       status = gluUnProject (winx, winy, winz, modelMatrix, projMatrix, viewport,
         &objX, &objY, &objZ);
 
@@ -192,7 +192,7 @@ void OpenGl_Text::Render (const Handle(OpenGl_Workspace) &AWorkspace) const
       winx = winx1-1;
       winy = winy1+1;
       status = gluUnProject (winx, winy, winz, modelMatrix, projMatrix, viewport,
-        &objX, &objY, &objZ); 
+        &objX, &objY, &objZ);
 
       AWorkspace->RenderText( myString, 0, (float)objX, (float)objY,(float)objZ );
       winx = winx1+1;
diff --git a/src/OpenGl/OpenGl_Texture.cxx b/src/OpenGl/OpenGl_Texture.cxx
new file mode 100644 (file)
index 0000000..aa52cc8
--- /dev/null
@@ -0,0 +1,412 @@
+// Created by: Kirill GAVRILOV
+// Copyright (c) 2012 OPEN CASCADE SAS
+//
+// The content of this file is subject to the Open CASCADE Technology Public
+// License Version 6.5 (the "License"). You may not use the content of this file
+// except in compliance with the License. Please obtain a copy of the License
+// at http://www.opencascade.org and read it completely before using this file.
+//
+// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
+// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
+//
+// The Original Code and all software distributed under the License is
+// distributed on an "AS IS" basis, without warranty of any kind, and the
+// Initial Developer hereby disclaims all such warranties, including without
+// limitation, any warranties of merchantability, fitness for a particular
+// purpose or non-infringement. Please see the License for the specific terms
+// and conditions governing the rights and limitations under the License.
+
+#include <OpenGl_Texture.hxx>
+
+#include <OpenGl_Context.hxx>
+#include <Graphic3d_TextureParams.hxx>
+#include <Standard_Assert.hxx>
+#include <Image_PixMap.hxx>
+
+IMPLEMENT_STANDARD_HANDLE (OpenGl_Texture, OpenGl_Resource)
+IMPLEMENT_STANDARD_RTTIEXT(OpenGl_Texture, OpenGl_Resource)
+
+//! Function for getting power of to number larger or equal to input number.
+//! @param theNumber    number to 'power of two'
+//! @param theThreshold upper threshold
+//! @return power of two number
+inline GLsizei getPowerOfTwo (const GLsizei theNumber,
+                              const GLsizei theThreshold)
+{
+  for (GLsizei p2 = 2; p2 <= theThreshold; p2 <<= 1)
+  {
+    if (theNumber <= p2)
+    {
+      return p2;
+    }
+  }
+  return theThreshold;
+}
+
+// =======================================================================
+// function : OpenGl_Texture
+// purpose  :
+// =======================================================================
+OpenGl_Texture::OpenGl_Texture (const Handle(Graphic3d_TextureParams)& theParams)
+: OpenGl_Resource(),
+  myTextureId (NO_TEXTURE),
+  myTarget (GL_TEXTURE_2D),
+  mySizeX (0),
+  mySizeY (0),
+  myTextFormat (GL_FLOAT),
+  myHasMipmaps (Standard_False),
+  myParams     (theParams)
+{
+  if (myParams.IsNull())
+  {
+    myParams = new Graphic3d_TextureParams();
+  }
+}
+
+// =======================================================================
+// function : ~OpenGl_Texture
+// purpose  :
+// =======================================================================
+OpenGl_Texture::~OpenGl_Texture()
+{
+  Release (NULL);
+}
+
+// =======================================================================
+// function : HasMipmaps
+// purpose  :
+// =======================================================================
+const Standard_Boolean OpenGl_Texture::HasMipmaps() const
+{
+  return myHasMipmaps;
+}
+
+// =======================================================================
+// function : GetParams
+// purpose  :
+// =======================================================================
+const Handle(Graphic3d_TextureParams)& OpenGl_Texture::GetParams() const
+{
+  return myParams;
+}
+
+// =======================================================================
+// function : SetParams
+// purpose  :
+// =======================================================================
+void OpenGl_Texture::SetParams (const Handle(Graphic3d_TextureParams)& theParams)
+{
+  myParams = theParams;
+}
+
+// =======================================================================
+// function : Create
+// purpose  :
+// =======================================================================
+bool OpenGl_Texture::Create (const Handle(OpenGl_Context)& )
+{
+  if (myTextureId == NO_TEXTURE)
+  {
+    glGenTextures (1, &myTextureId);
+  }
+  return myTextureId != NO_TEXTURE;
+}
+
+// =======================================================================
+// function : Release
+// purpose  :
+// =======================================================================
+void OpenGl_Texture::Release (const OpenGl_Context* theGlCtx)
+{
+  if (myTextureId == NO_TEXTURE)
+  {
+    return;
+  }
+
+  // application can not handle this case by exception - this is bug in code
+  Standard_ASSERT_RETURN (theGlCtx != NULL,
+    "OpenGl_Texture destroyed without GL context! Possible GPU memory leakage...",);
+
+  glDeleteTextures (1, &myTextureId);
+  myTextureId = NO_TEXTURE;
+  mySizeX = mySizeY = 0;
+}
+
+// =======================================================================
+// function : Bind
+// purpose  :
+// =======================================================================
+void OpenGl_Texture::Bind (const Handle(OpenGl_Context)& theCtx,
+                           const GLenum theTextureUnit) const
+{
+  if (theCtx->IsGlGreaterEqual (1, 3))
+  {
+    theCtx->core13->glActiveTexture (theTextureUnit);
+  }
+  glBindTexture (myTarget, myTextureId);
+}
+
+// =======================================================================
+// function : Unbind
+// purpose  :
+// =======================================================================
+void OpenGl_Texture::Unbind (const Handle(OpenGl_Context)& theCtx,
+                             const GLenum theTextureUnit) const
+{
+  if (theCtx->IsGlGreaterEqual (1, 3))
+  {
+    theCtx->core13->glActiveTexture (theTextureUnit);
+  }
+  glBindTexture (myTarget, NO_TEXTURE);
+}
+
+// =======================================================================
+// function : Init
+// purpose  :
+// =======================================================================
+bool OpenGl_Texture::Init (const Handle(OpenGl_Context)& theCtx,
+                           const Image_PixMap&           theImage,
+                           const Graphic3d_TypeOfTexture theType)
+{
+  myHasMipmaps = Standard_False;
+  if (theImage.IsEmpty() || !Create (theCtx))
+  {
+    return false;
+  }
+
+  GLenum aTextureFormat = GL_RGBA8;
+  GLenum aPixelFormat   = 0;
+  GLenum aDataType      = 0;
+  switch (theImage.Format())
+  {
+    case Image_PixMap::ImgGrayF:
+    {
+      aTextureFormat = GL_ALPHA8; // GL_R8, GL_R32F
+      aPixelFormat   = GL_ALPHA;  // GL_RED
+      aDataType      = GL_FLOAT;
+      break;
+    }
+    case Image_PixMap::ImgRGBAF:
+    {
+      aTextureFormat = GL_RGBA8; // GL_RGBA32F
+      aPixelFormat   = GL_RGBA;
+      aDataType      = GL_FLOAT;
+      break;
+    }
+    case Image_PixMap::ImgBGRAF:
+    {
+      if (!theCtx->IsGlGreaterEqual (1, 2) && !theCtx->extBgra)
+      {
+        return false;
+      }
+      aTextureFormat = GL_RGBA8; // GL_RGBA32F
+      aPixelFormat   = GL_BGRA;  // equals to GL_BGRA_EXT
+      aDataType      = GL_FLOAT;
+      break;
+    }
+    case Image_PixMap::ImgRGBF:
+    {
+      aTextureFormat = GL_RGB8; // GL_RGB32F
+      aPixelFormat   = GL_RGB;
+      aDataType      = GL_FLOAT;
+      break;
+    }
+    case Image_PixMap::ImgBGRF:
+    {
+      aTextureFormat = GL_RGB8; // GL_RGB32F
+      aPixelFormat   = GL_BGR;  // equals to GL_BGR_EXT
+      aDataType      = GL_FLOAT;
+      break;
+    }
+    case Image_PixMap::ImgRGBA:
+    {
+      aTextureFormat = GL_RGBA8;
+      aPixelFormat   = GL_RGBA;
+      aDataType      = GL_UNSIGNED_BYTE;
+      break;
+    }
+    case Image_PixMap::ImgBGRA:
+    {
+      if (!theCtx->IsGlGreaterEqual (1, 2) && !theCtx->extBgra)
+      {
+        return false;
+      }
+      aTextureFormat = GL_RGBA8;
+      aPixelFormat   = GL_BGRA;  // equals to GL_BGRA_EXT
+      aDataType      = GL_UNSIGNED_BYTE;
+      break;
+    }
+    case Image_PixMap::ImgRGB32:
+    {
+      aTextureFormat = GL_RGB8;
+      aPixelFormat   = GL_RGBA;
+      aDataType      = GL_UNSIGNED_BYTE;
+      break;
+    }
+    case Image_PixMap::ImgBGR32:
+    {
+      if (!theCtx->IsGlGreaterEqual (1, 2) && !theCtx->extBgra)
+      {
+        return false;
+      }
+      aTextureFormat = GL_RGB8;
+      aPixelFormat   = GL_BGRA;  // equals to GL_BGRA_EXT
+      aDataType      = GL_UNSIGNED_BYTE;
+      break;
+    }
+    case Image_PixMap::ImgRGB:
+    {
+      aTextureFormat = GL_RGB8;
+      aPixelFormat   = GL_RGB;
+      aDataType      = GL_UNSIGNED_BYTE;
+      break;
+    }
+    case Image_PixMap::ImgBGR:
+    {
+      if (!theCtx->IsGlGreaterEqual (1, 2) && !theCtx->extBgra)
+      {
+        return false;
+      }
+      aTextureFormat = GL_RGB8;
+      aPixelFormat   = GL_BGR;  // equals to GL_BGR_EXT
+      aDataType      = GL_UNSIGNED_BYTE;
+      break;
+    }
+    case Image_PixMap::ImgGray:
+    {
+      aTextureFormat = GL_ALPHA8; // GL_R8
+      aPixelFormat   = GL_ALPHA;  // GL_RED
+      aDataType      = GL_UNSIGNED_BYTE;
+      break;
+    }
+    default:
+    {
+      return false;
+    }
+  }
+
+  const GLsizei aMaxSize   = theCtx->MaxTextureSize();
+  const GLsizei aWidth     = (GLsizei )theImage.SizeX();
+  const GLsizei aHeight    = (GLsizei )theImage.SizeY();
+
+  // Notice that formally general NPOT textures are required by OpenGL 2.0 specifications
+  // however some hardware (NV30 - GeForce FX, RadeOn 9xxx and Xxxx) supports GLSL but not NPOT!
+  // Trying to create NPOT rextures on such hardware will not fail
+  // but driver will fall back into software rendering,
+  const bool    toForceP2  = !theCtx->IsGlGreaterEqual (3, 0) && !theCtx->arbNPTW;
+  const GLsizei aWidthOut  = toForceP2 ? getPowerOfTwo (aWidth,  aMaxSize) : Min (aWidth,  aMaxSize);
+  const GLsizei aHeightOut = toForceP2 ? getPowerOfTwo (aHeight, aMaxSize) : Min (aHeight, aMaxSize);
+
+  GLint aTestWidth  = 0;
+  GLint aTestHeight = 0;
+
+  glPixelStorei (GL_UNPACK_ALIGNMENT, 1); // ensure alignment will not screw up the party
+  switch (theType)
+  {
+    case Graphic3d_TOT_1D:
+    {
+      myTarget = GL_TEXTURE_1D;
+      Bind (theCtx);
+      glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+      glTexParameteri (GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+
+      Image_PixMap aCopy;
+      GLvoid* aDataPtr = (GLvoid* )theImage.Data();
+      if (aWidth != aWidthOut)
+      {
+        if (!aCopy.InitTrash (theImage.Format(), Standard_Size(aWidthOut), 1)
+          || gluScaleImage (aPixelFormat,
+                            aWidth,    1, aDataType, theImage.Data(),
+                            aWidthOut, 1, aDataType, aCopy.ChangeData()) != 0)
+        {
+          Unbind (theCtx);
+          return false;
+        }
+
+        aDataPtr = (GLvoid* )aCopy.Data();
+      }
+
+      // use proxy to check texture could be created or not
+      glTexImage1D (GL_PROXY_TEXTURE_1D, 0, aTextureFormat,
+                    aWidthOut, 0,
+                    aPixelFormat, aDataType, NULL);
+      glGetTexLevelParameteriv (GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &aTestWidth);
+      if (aTestWidth == 0)
+      {
+        // no memory or broken input parameters
+        Unbind (theCtx);
+        return false;
+      }
+
+      glTexImage1D (GL_TEXTURE_1D, 0, aTextureFormat,
+                    aWidthOut, 0,
+                    aPixelFormat, aDataType, aDataPtr);
+
+      Unbind (theCtx);
+      return true;
+    }
+    case Graphic3d_TOT_2D:
+    {
+      myTarget = GL_TEXTURE_2D;
+      Bind (theCtx);
+      glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+      glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+
+      Image_PixMap aCopy;
+      GLvoid* aDataPtr = (GLvoid* )theImage.Data();
+      if (aWidth != aWidthOut || aHeight != aHeightOut)
+      {
+        // scale texture
+
+        if (!aCopy.InitTrash (theImage.Format(), Standard_Size(aWidthOut), Standard_Size(aHeightOut))
+          || gluScaleImage (aPixelFormat,
+                            aWidth,    aHeight,    aDataType, theImage.Data(),
+                            aWidthOut, aHeightOut, aDataType, aCopy.ChangeData()) != 0)
+        {
+          Unbind (theCtx);
+          return false;
+        }
+
+        aDataPtr = (GLvoid* )aCopy.Data();
+      }
+
+      // use proxy to check texture could be created or not
+      glTexImage2D (GL_PROXY_TEXTURE_2D, 0, aTextureFormat,
+                    aWidthOut, aHeightOut, 0,
+                    aPixelFormat, aDataType, NULL);
+      glGetTexLevelParameteriv (GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH,  &aTestWidth);
+      glGetTexLevelParameteriv (GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &aTestHeight);
+      if (aTestWidth == 0 || aTestHeight == 0)
+      {
+        // no memory or broken input parameters
+        Unbind (theCtx);
+        return false;
+      }
+
+      glTexImage2D (GL_TEXTURE_2D, 0, aTextureFormat,
+                    aWidthOut, aHeightOut, 0,
+                    aPixelFormat, aDataType, aDataPtr);
+
+      Unbind (theCtx);
+      return true;
+    }
+    case Graphic3d_TOT_2D_MIPMAP:
+    {
+      myTarget     = GL_TEXTURE_2D;
+      myHasMipmaps = Standard_True;
+      Bind (theCtx);
+      glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
+      glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+
+      bool isCreated = gluBuild2DMipmaps (GL_TEXTURE_2D, aTextureFormat,
+                                          aWidth, aHeight,
+                                          aPixelFormat, aDataType, theImage.Data()) == 0;
+      Unbind (theCtx);
+      return isCreated;
+    }
+    default:
+    {
+      return false;
+    }
+  }
+}
diff --git a/src/OpenGl/OpenGl_Texture.hxx b/src/OpenGl/OpenGl_Texture.hxx
new file mode 100644 (file)
index 0000000..6e9c5e0
--- /dev/null
@@ -0,0 +1,107 @@
+// Created by: Kirill GAVRILOV
+// Copyright (c) 2012 OPEN CASCADE SAS
+//
+// The content of this file is subject to the Open CASCADE Technology Public
+// License Version 6.5 (the "License"). You may not use the content of this file
+// except in compliance with the License. Please obtain a copy of the License
+// at http://www.opencascade.org and read it completely before using this file.
+//
+// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
+// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
+//
+// The Original Code and all software distributed under the License is
+// distributed on an "AS IS" basis, without warranty of any kind, and the
+// Initial Developer hereby disclaims all such warranties, including without
+// limitation, any warranties of merchantability, fitness for a particular
+// purpose or non-infringement. Please see the License for the specific terms
+// and conditions governing the rights and limitations under the License.
+
+#ifndef _OpenGl_Texture_H__
+#define _OpenGl_Texture_H__
+
+#include <OpenGl_GlCore13.hxx>
+#include <OpenGl_Resource.hxx>
+#include <Handle_OpenGl_Texture.hxx>
+#include <Graphic3d_TypeOfTexture.hxx>
+#include <Handle_Graphic3d_TextureParams.hxx>
+
+class Handle(OpenGl_Context);
+class OpenGl_Context;
+class Image_PixMap;
+
+//! Texture resource.
+class OpenGl_Texture : public OpenGl_Resource
+{
+
+public:
+
+  //! Helpful constants
+  static const GLuint NO_TEXTURE = 0;
+
+public:
+
+  //! Create uninitialized VBO.
+  Standard_EXPORT OpenGl_Texture (const Handle(Graphic3d_TextureParams)& theParams = NULL);
+
+  //! Destroy object.
+  Standard_EXPORT virtual ~OpenGl_Texture();
+
+  //! @return true if current object was initialized
+  inline bool IsValid() const
+  {
+    return myTextureId != NO_TEXTURE;
+  }
+
+  //! @return target to which the texture is bound (GL_TEXTURE_1D, GL_TEXTURE_2D)
+  inline GLenum GetTarget() const
+  {
+    return myTarget;
+  }
+
+  //! Creates Texture id if not yet generated.
+  //! Data should be initialized by another method.
+  Standard_EXPORT bool Create (const Handle(OpenGl_Context)& theCtx);
+
+  //! Destroy object - will release GPU memory if any.
+  Standard_EXPORT virtual void Release (const OpenGl_Context* theCtx);
+
+  //! Bind this Texture to specified unit.
+  Standard_EXPORT void Bind (const Handle(OpenGl_Context)& theCtx,
+                             const GLenum                  theTextureUnit = GL_TEXTURE0) const;
+
+  //! Unbind texture from specified unit.
+  Standard_EXPORT void Unbind (const Handle(OpenGl_Context)& theCtx,
+                               const GLenum                  theTextureUnit = GL_TEXTURE0) const;
+
+  //! Notice that texture will be unbound after this call.
+  Standard_EXPORT bool Init (const Handle(OpenGl_Context)& theCtx,
+                             const Image_PixMap&           theImage,
+                             const Graphic3d_TypeOfTexture theType);
+
+  //! @return true if texture was generated within mipmaps
+  Standard_EXPORT const Standard_Boolean HasMipmaps() const;
+
+  //! @return assigned texture parameters (not necessary applied)
+  Standard_EXPORT const Handle(Graphic3d_TextureParams)& GetParams() const;
+
+  //! @param texture parameters
+  Standard_EXPORT void SetParams (const Handle(Graphic3d_TextureParams)& theParams);
+
+protected:
+
+  GLuint           myTextureId;  //!< GL resource ID
+  GLenum           myTarget;     //!< GL_TEXTURE_1D/GL_TEXTURE_2D
+  GLsizei          mySizeX;      //!< texture width
+  GLsizei          mySizeY;      //!< texture height
+  GLint            myTextFormat; //!< texture format - GL_RGB, GL_RGBA,...
+  Standard_Boolean myHasMipmaps; //!< flag indicates that texture was uploaded with mipmaps
+
+  Handle(Graphic3d_TextureParams) myParams; //!< texture parameters
+
+public:
+
+  DEFINE_STANDARD_RTTI(OpenGl_Texture) // Type definition
+
+};
+
+#endif // _OpenGl_Texture_H__
diff --git a/src/OpenGl/OpenGl_TextureBox.cxx b/src/OpenGl/OpenGl_TextureBox.cxx
deleted file mode 100755 (executable)
index 3d8b77d..0000000
+++ /dev/null
@@ -1,847 +0,0 @@
-// Copyright (c) 1999-2012 OPEN CASCADE SAS
-//
-// The content of this file is subject to the Open CASCADE Technology Public
-// License Version 6.5 (the "License"). You may not use the content of this file
-// except in compliance with the License. Please obtain a copy of the License
-// at http://www.opencascade.org and read it completely before using this file.
-//
-// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
-// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
-//
-// The Original Code and all software distributed under the License is
-// distributed on an "AS IS" basis, without warranty of any kind, and the
-// Initial Developer hereby disclaims all such warranties, including without
-// limitation, any warranties of merchantability, fitness for a particular
-// purpose or non-infringement. Please see the License for the specific terms
-// and conditions governing the rights and limitations under the License.
-
-/*
-* Fonction
-* ~~~~~~~~
-*   Gestion des textures sous OpenGL
-*
-*
-* Notes
-* ~~~~~
-*   Les textures sont toujours initialisee avec des parametres par defaut
-*     texture 1D:        WRAP_S = CLAMP
-*                        MAG_FILTER = NEAREST
-*                        generation de texture automatique en OBJECT_LINEAR
-*                        rendu avec DECAL
-*
-*     texture 2D:        WRAP_S/T = REPEAT
-*                        MAG/MIN_FILTER = LINEAR
-*                        generation de texture automatique en OBJECT_LINEAR
-*                        rendu avec MODULATE
-*
-*     texture 2D MipMap: WRAP_S/T = REPEAT
-*                        MAG_FILTER = LINEAR
-*                        MIN_FILTER = LINEAR_MIPMAP_NEAREST
-*                        generation de texture automatique en OBJECT_LINEAR
-*                        rendu avec MODULATE
-*
-* Historique des modifications
-* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-*   22-05-97: PCT ; Creation
-*   18-06-97: FMN ; Ajout entete
-*   20-06-97: PCT ; Correction bug parametres par defaut texture 1D
-*   30-06-97: PCT ; Correction bug rechargement de la texture courante
-*   04-07-97: PCT ; suppression de l'utilisation de libimage.a de SGI
-*   01-08-97: PCT ; suppression InitializeTextureBox()
-*   04-08-97: FMN,PCT ; Portage WNT
-*   05-08-97: FMN ; ajout GetTextureData...
-*   10-09-97: PCT ; ajout commentaires. GetTexture() ne doit pas
-*                   etre utilisee dans Cas.Cade ( le chargement est
-*                   fait par Graphic3d )
-*   06-10-97: FMN ; Portage HP
-*   14-10-97: FMN ; Ajout OpenGl_Extension
-*   22-10-97: FMN ; Meilleure gestion de l'extension glXGetCurrentDisplayEXT
-*   04-11-97: FMN ; Gestion des differentes versions GLX
-*   19-11-97: FMN ; Ajout GetCurrentDisplay plus simple que glXGetCurrentDisplayEXT
-*   04-12-97: FMN ; On suppose que l'on travaille en OpenGL1.1 (cf OpenGl_Extension)
-*   17-12-97: FMN ; Probleme compilation SGI
-*   17-12-97: FMN ; Probleme sur Optimisation sur MyBindTextureEXT()
-*        Le test sur la texture courante doit tenir compte du contexte.
-*   22-07-98: FGU ; Ajout fonctions TransferTexture_To_Data() et TransferData_To_Texture()
-*
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <OpenGl_GlCore11.hxx>
-#include <OpenGl_Display.hxx>
-#include <OpenGl_TextureBox.hxx>
-#include <OpenGl_ResourceTexture.hxx>
-#include <OpenGl_Context.hxx>
-
-#include <GL/glu.h> // gluBuild2DMipmaps()
-
-#include <NCollection_Vector.hxx>
-
-typedef enum {TEXDATA_NONE, TEXDATA_1D, TEXDATA_2D, TEXDATA_2DMM} texDataStatus;
-typedef enum {TEX_NONE, TEX_ALLOCATED} texStatus;
-
-typedef GLfloat SizeType[4];
-
-typedef int TextureDataID;
-#define TEXTUREDATA_ERROR -1
-
-struct texData
-{
-  char imageFileName[128];
-  int imageWidth, imageHeight;
-  GLubyte *image;
-  texDataStatus status;
-  GLint type;
-  int share_count;
-  DEFINE_STANDARD_ALLOC
-};
-
-struct contextData
-{
-  GLuint number;
-  GLDRAWABLE drawable;
-  GLCONTEXT context;
-};
-
-struct texDraw
-{
-  TextureDataID data;
-  NCollection_Vector<contextData> contextdata;
-  texStatus status;
-
-  GLint Gen;
-  GLint Light;
-  GLint Wrap;
-  GLfloat Plane1[4];
-  GLfloat Plane2[4];
-  GLint Render;
-  GLfloat scalex, scaley;
-  GLfloat transx, transy;
-  GLfloat angle;
-
-  DEFINE_STANDARD_ALLOC
-};
-
-
-/*----------------------------------------------------------------------*/
-/*
-* Variables statiques
-*/
-
-static NCollection_Vector<texDraw> textab;
-
-static NCollection_Vector<texData> texdata;
-
-static TextureDataID current_texture_data = TEXTUREDATA_ERROR;
-static TextureID current_texture = TEXTUREBOX_ERROR;
-
-static GLfloat sgenparams[] = { 1.0 ,0.0 ,0.0 ,0.0};
-static GLfloat tgenparams[] = { 0.0 ,1.0 ,0.0 ,0.0};
-
-static GLenum status2type[] = { GL_NONE, GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_2D };
-
-/*----------------------------------------------------------------------*/
-/*
-* Fonctions privees
-*/
-
-/*----------------------------------------------------------------------*/
-/*
-* recherche l'existence de datas de texture par son nom
-*/
-static TextureDataID FindTextureData(char *FileName)
-{
-  for (int i = 0; i < texdata.Length(); i++)
-  {
-    if ( texdata(i).status != TEXDATA_NONE && strcmp(FileName, texdata(i).imageFileName) == 0 )
-    {
-      return i;
-    }
-  }
-
-  return TEXTUREDATA_ERROR;
-}
-
-/*----------------------------------------------------------------------*/
-/*
-* recherche un emplacement de data texture libre
-*/
-static TextureDataID FindFreeTextureData(void)
-{
-  for (int i = 0; i < texdata.Length(); i++)
-  {
-    if (texdata(i).status == TEXDATA_NONE)
-    {
-      return i;
-    }
-  }
-
-  texData aTexData;
-  texdata.Append(aTexData);
-  return texdata.Length() - 1;
-}
-
-/*----------------------------------------------------------------------*/
-/*
-* recherche un emplacement de texture libre
-*/
-static TextureID FindFreeTexture(void)
-{
-  for (int i = 0; i < textab.Length(); i++)
-  {
-    if (textab(i).status == TEX_NONE)
-    {
-      return i;
-    }
-  }
-
-  texDraw aTexDraw;
-  textab.Append(aTexDraw);
-  return textab.Length() - 1;
-}
-
-/*----------------------------------------------------------------------*/
-/*
-* regarde si la texture a ete definie pour le contexte courant
-*/
-static int FindTextureContext(TextureID ID)
-{
-  int i;
-
-  GLCONTEXT cur = GET_GL_CONTEXT();
-  for (i=0; i<textab(ID).contextdata.Length(); i++)
-    if (textab(ID).contextdata(i).context == cur)
-      return i;
-
-  return TEXTUREBOX_ERROR;
-}
-
-/*----------------------------------------------------------------------*/
-/*
-* chargement d'une texture suivant son type
-*/
-static void LoadTexture(TextureID ID)
-{
-  TextureDataID data;
-
-  data = textab(ID).data;
-  switch (texdata(data).status)
-  {
-  case TEXDATA_1D:
-    glTexImage1D(GL_TEXTURE_1D, 0, 4,
-      texdata(data).imageWidth, 0,
-      GL_RGBA, GL_UNSIGNED_BYTE, texdata(data).image);
-    break;
-
-  case TEXDATA_2D:
-    glTexImage2D(GL_TEXTURE_2D, 0, 4,
-      texdata(data).imageWidth, texdata(data).imageHeight, 0,
-      GL_RGBA, GL_UNSIGNED_BYTE, texdata(data).image);
-    break;
-
-  case TEXDATA_2DMM:
-    gluBuild2DMipmaps(GL_TEXTURE_2D, 4,
-      texdata(data).imageWidth,
-      texdata(data).imageHeight,
-      GL_RGBA, GL_UNSIGNED_BYTE, texdata(data).image);
-    break;
-  default:
-    break;
-  }
-}
-
-/*----------------------------------------------------------------------*/
-/*
-* les parametres d'initialisation d'une texture
-* NE PAS METTRE DANS UNE DISPLAY LIST POUR L'INSTANT ( pb avec les matrices )
-*/
-static void SetTextureParam(TextureID ID)
-{
-  GLint cur_matrix;
-  TextureDataID data;
-
-
-  data = textab(ID).data;
-  glGetIntegerv(GL_MATRIX_MODE, &cur_matrix);
-
-  /*
-  * MISE EN PLACE DE LA MATRICE DE TEXTURE
-  */
-  glMatrixMode(GL_TEXTURE);
-  glLoadIdentity();
-  /* if (textab(ID).Gen != GL_SPHERE_MAP)
-  {*/
-  glScalef(textab(ID).scalex, textab(ID).scaley, 1.0);
-  glTranslatef(-textab(ID).transx, -textab(ID).transy, 0.0);
-  glRotatef(-textab(ID).angle, 0.0, 0.0, 1.0);
-  /*}*/
-
-
-  /*
-  * GENERATION AUTOMATIQUE DE TEXTURE
-  */
-  switch (textab(ID).Gen)
-  {
-  case GL_OBJECT_LINEAR:
-    glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
-    glTexGenfv(GL_S, GL_OBJECT_PLANE, textab(ID).Plane1);
-    if (texdata(data).status != TEXDATA_1D)
-    {
-      glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
-      glTexGenfv(GL_T, GL_OBJECT_PLANE, textab(ID).Plane2);
-    }
-    break;
-
-  case GL_SPHERE_MAP:
-    glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
-    if (texdata(data).status != TEXDATA_1D)
-      glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
-    break;
-
-  case GL_EYE_LINEAR:
-    glMatrixMode(GL_MODELVIEW);
-    glPushMatrix();
-    glLoadIdentity();
-
-    glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
-    glTexGenfv(GL_S, GL_EYE_PLANE, textab(ID).Plane1);
-
-    if (texdata(data).status != TEXDATA_1D)
-    {
-      glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
-      glTexGenfv(GL_T, GL_EYE_PLANE, textab(ID).Plane2);
-    }
-
-    glPopMatrix();
-    break;
-  }
-
-
-  /*
-  * RENDU DE LA TEXTURE AVEC LES LUMIERES
-  */
-  glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, textab(ID).Light);
-
-
-  /*
-  * LISSAGE DE LA TEXTURE
-  */
-  switch (texdata(data).status)
-  {
-  case TEXDATA_1D:
-  case TEXDATA_2D:
-    glTexParameteri(texdata(data).type, GL_TEXTURE_MAG_FILTER, textab(ID).Render);
-    glTexParameteri(texdata(data).type, GL_TEXTURE_MIN_FILTER, textab(ID).Render);
-    break;
-
-  case TEXDATA_2DMM:
-    if (textab(ID).Render == GL_NEAREST)
-    {
-      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
-    }
-    else
-    {
-      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
-    }
-    break;
-  default:
-    break;
-  }
-
-
-  /*
-  * WRAP DE LA TEXTURE
-  */
-  switch (texdata(data).status)
-  {
-  case TEXDATA_1D:
-    glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, textab(ID).Wrap);
-    break;
-
-  case TEXDATA_2D:
-  case TEXDATA_2DMM:
-    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, textab(ID).Wrap);
-    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, textab(ID).Wrap);
-    break;
-  default:
-    break;
-  }
-
-  glMatrixMode(cur_matrix);
-}
-
-/*----------------------------------------------------------------------*/
-/*
-* simulation du glGenTexturesEXT pour un context
-*/
-static void MyGenTextureEXT (TextureID ID)
-{
-  TextureDataID data = textab(ID).data;
-  contextData aContextData;
-
-  aContextData.context = GET_GL_CONTEXT();
-  aContextData.drawable = GET_GLDEV_CONTEXT();
-  glGenTextures (1, &aContextData.number);
-  textab(ID).contextdata.Append(aContextData);
-  glBindTexture (texdata(data).type, aContextData.number);
-  LoadTexture (ID);
-}
-
-/*----------------------------------------------------------------------*/
-/*
-* simulation du glBindTextureEXT
-*/
-static void MyBindTextureEXT (TextureID ID, int Context)
-{
-  TextureDataID data = textab(ID).data;
-  if (texdata(data).status == TEXDATA_NONE)
-    return;
-
-  GLenum aParamName = texdata(data).status == TEXDATA_1D ?
-  GL_TEXTURE_BINDING_1D : GL_TEXTURE_BINDING_2D;
-
-  GLint aCurrTex = -1;
-  glGetIntegerv (aParamName, &aCurrTex);
-  if (textab(ID).contextdata(Context).number != aCurrTex)
-  {
-    glBindTexture (texdata(data).type, textab(ID).contextdata(Context).number);
-  }
-}
-
-/*----------------------------------------------------------------------*/
-/*
-* installation de la texture pour le dernier contexte
-*/
-static int InstallTextureInContext(TextureID ID)
-{
-#ifdef PRINT
-  printf("InstallTextureInContext::installation de la texture dans le context\n");
-#endif
-  MyGenTextureEXT(ID);
-  SetTextureParam(ID);
-#ifdef PRINT
-  printf("InstallTextureInContext::context ok\n");
-#endif
-  return 0;
-}
-
-/*----------------------------------------------------------------------*/
-static TextureID GetTextureData(char *FileName, texDataStatus status, const GLint width, const GLint height, const void *data)
-{
-  TextureDataID i;
-  TextureID j;
-
-  /* essait de trouver la texture */
-  i = FindTextureData(FileName);
-  if (i == TEXTUREDATA_ERROR)
-  {
-#ifdef PRINT
-    printf("GetTextureData::la texture %s n'existe pas => chargement\n", FileName);
-#endif
-    /* creation d'une texture */
-    i = FindFreeTextureData();
-    if (i == TEXTUREDATA_ERROR) return TEXTUREBOX_ERROR;
-
-    texdata(i).share_count = 0;
-    strcpy(texdata(i).imageFileName, FileName);
-    texdata(i).image = new GLubyte[width*height*4];
-    memcpy(texdata(i).image, data, (width*height*4));
-    texdata(i).imageWidth = width;
-    texdata(i).imageHeight = height;
-
-    if (texdata(i).image == NULL) return TEXTUREBOX_ERROR;
-
-    texdata(i).status = status;
-    texdata(i).type = status2type[status];
-  }
-
-  j = FindFreeTexture();
-  if (j != TEXTUREBOX_ERROR)
-  {
-#ifdef PRINT
-    printf("GetTextureData::installation texture pour obj %d\n", j);
-#endif
-    textab(j).contextdata.Clear();
-    textab(j).data = i;
-    textab(j).status = TEX_ALLOCATED;
-    texdata(i).share_count++;
-
-    SetTextureDefaultParams(j);
-
-#ifdef PRINT
-    printf("GetTextureData::texture %s(%d)    texture %d   count=%d\n", texdata(i).imageFileName, i, j, texdata(i).share_count);
-#endif
-  }
-  else
-    if (texdata(i).share_count != 0)
-      delete [] texdata(i).image;
-
-  return j;
-}
-
-/*----------------------------------------------------------------------*/
-/*
-* Fonctions publiques
-*/
-
-
-/*----------------------------------------------------------------------*/
-
-GLboolean IsTextureValid(TextureID ID)
-{
-  if ( (ID < 0) || (ID >= textab.Length()) )
-    return GL_FALSE;
-
-  if (textab.Length() > 0)
-  {
-    return textab(ID).status == TEX_ALLOCATED;
-  }
-  else
-  {
-    return GL_FALSE;
-  }
-}
-
-/*----------------------------------------------------------------------*/
-
-TextureID GetTextureData1D(char *FileName, const GLint width, const GLint height, const void *data)
-{
-#ifdef PRINT
-  printf("GetTextureData1D::loading 1d %s  \n", FileName);
-#endif
-  return GetTextureData(FileName, TEXDATA_1D, width, height, data);
-}
-
-/*----------------------------------------------------------------------*/
-
-TextureID GetTextureData2D(char *FileName, const GLint width, const GLint height, const void *data)
-{
-#ifdef PRINT
-  printf("GetTextureData2D::loading 2d %s   \n", FileName);
-#endif
-  return GetTextureData(FileName, TEXDATA_2D, width, height, data);
-}
-
-/*----------------------------------------------------------------------*/
-
-TextureID GetTextureData2DMipMap(char *FileName, const GLint width, const GLint height, const void *data)
-{
-#ifdef PRINT
-  printf("GetTextureData2DMipMap::loading 2dmm %s   \n", FileName);
-#endif
-  return GetTextureData(FileName, TEXDATA_2DMM, width, height, data);
-}
-
-
-/*----------------------------------------------------------------------*/
-
-void SetCurrentTexture(TextureID ID)
-{
-  int context;
-
-  if (!IsTextureValid(ID)) return;
-
-  context = FindTextureContext(ID);
-
-  /* la texture n'existe pas dans ce contexte */
-  if (context == TEXTUREBOX_ERROR)
-  {
-#ifdef PRINT
-    printf("SetCurrentTexture::installation texture %d dans context\n", ID);
-#endif
-    /* si on a une erreur pendant l'installation dans le context
-    * alors on installe la texture sans bind */
-    if (InstallTextureInContext(ID) == TEXTUREBOX_ERROR)
-    {
-      LoadTexture(ID);
-      SetTextureParam(ID);
-    }
-  }
-
-  /*oui, alors on bind directement */
-  else
-  {
-#ifdef PRINT
-    printf("SetCurrentTexture: utilisation du bind %d\n", ID);
-#endif
-    MyBindTextureEXT(ID, context);
-    SetTextureParam(ID);
-  }
-
-  current_texture = ID;
-  current_texture_data = textab(ID).data;
-}
-
-/*----------------------------------------------------------------------*/
-
-void FreeTexture (const Handle(OpenGl_Context)& theContext,
-                  TextureID                     ID)
-{
-  if (!IsTextureValid (ID))
-  {
-    return;
-  }
-
-  TextureDataID data = textab(ID).data;
-  texdata(data).share_count--;
-  if (texdata(data).share_count == 0)
-  {
-    // release texture data
-    delete [] texdata(data).image;
-
-    // liberation de la texture dans tous les contextes
-    for (int i = 0; i < textab(ID).contextdata.Length(); ++i)
-    {
-      Handle(OpenGl_ResourceTexture) aResource = new OpenGl_ResourceTexture (textab(ID).contextdata(i).number);
-      
-      if (!theContext.IsNull()) 
-      {
-        theContext->DelayedRelease (aResource);
-      }
-    }
-
-    texdata(data).status = TEXDATA_NONE;
-
-    textab(ID).contextdata.Clear();
-  }
-
-  textab(ID).status = TEX_NONE;
-
-  current_texture_data = TEXTUREDATA_ERROR;
-}
-
-/*----------------------------------------------------------------------*/
-
-void EnableTexture(void)
-{
-  if (!IsTextureValid(current_texture)) return;
-
-  switch (texdata(current_texture_data).status)
-  {
-  case TEXDATA_1D:
-    if (textab(current_texture).Gen != GL_NONE)
-      glEnable(GL_TEXTURE_GEN_S);
-    glEnable(GL_TEXTURE_1D);
-    break;
-
-  case TEXDATA_2D:
-  case TEXDATA_2DMM:
-    if (textab(current_texture).Gen != GL_NONE)
-    {
-      glEnable(GL_TEXTURE_GEN_S);
-      glEnable(GL_TEXTURE_GEN_T);
-    }
-    glEnable(GL_TEXTURE_2D);
-    break;
-  default:
-    break;
-  }
-}
-
-/*----------------------------------------------------------------------*/
-
-void DisableTexture(void)
-{
-  if ( !IsTextureEnabled() )
-    return;
-  if ( !IsTextureValid( current_texture ) )
-    return;
-
-  switch (texdata(current_texture_data).status)
-  {
-  case TEXDATA_1D:
-    if (textab(current_texture).Gen != GL_NONE)
-      glDisable(GL_TEXTURE_GEN_S);
-    glDisable(GL_TEXTURE_1D);
-    break;
-
-  case TEXDATA_2D:
-  case TEXDATA_2DMM:
-    if (textab(current_texture).Gen != GL_NONE)
-    {
-      glDisable(GL_TEXTURE_GEN_S);
-      glDisable(GL_TEXTURE_GEN_T);
-    }
-    glDisable(GL_TEXTURE_2D);
-    break;
-  default:
-    break;
-  }
-}
-
-/*----------------------------------------------------------------------*/
-
-GLboolean IsTextureEnabled(void)
-{
-  GLboolean isEnabled1D= GL_FALSE, isEnabled2D= GL_FALSE;
-  glGetBooleanv( GL_TEXTURE_1D, &isEnabled1D );
-  glGetBooleanv( GL_TEXTURE_2D, &isEnabled2D );
-  return isEnabled1D || isEnabled2D;
-}
-
-/*----------------------------------------------------------------------*/
-
-void SetTextureModulate(TextureID ID)
-{
-  if (!IsTextureValid(ID)) return;
-
-  textab(ID).Light = GL_MODULATE;
-}
-
-/*----------------------------------------------------------------------*/
-
-void SetTextureDecal(TextureID ID)
-{
-  if (!IsTextureValid(ID)) return;
-
-  textab(ID).Light = GL_DECAL;
-}
-
-/*----------------------------------------------------------------------*/
-
-void SetTextureClamp(TextureID ID)
-{
-  if (!IsTextureValid(ID)) return;
-
-  textab(ID).Wrap = GL_CLAMP;
-}
-
-/*----------------------------------------------------------------------*/
-
-void SetTextureRepeat(TextureID ID)
-{
-  if (!IsTextureValid(ID)) return;
-
-  textab(ID).Wrap = GL_REPEAT;
-}
-
-/*----------------------------------------------------------------------*/
-
-/* gestion de la facon d'appliquer la texture */
-void SetModeObject(TextureID ID, const GLfloat sparams[4], const GLfloat tparams[4])
-{
-  if (!IsTextureValid(ID)) return;
-
-  textab(ID).Gen = GL_OBJECT_LINEAR;
-  if (sparams != NULL) memcpy(textab(ID).Plane1, sparams, sizeof(sgenparams));
-  else                 memcpy(textab(ID).Plane1, sgenparams, sizeof(sgenparams));
-
-  if (texdata(textab(ID).data).status != TEXDATA_1D) {
-    if (tparams != NULL) memcpy(textab(ID).Plane2, tparams, sizeof(tgenparams));
-    else                 memcpy(textab(ID).Plane2, tgenparams, sizeof(tgenparams));
-  }
-}
-
-/*----------------------------------------------------------------------*/
-
-void SetModeSphere(TextureID ID)
-{
-  if (!IsTextureValid(ID)) return;
-
-  textab(ID).Gen = GL_SPHERE_MAP;
-}
-
-/*----------------------------------------------------------------------*/
-
-void SetModeEye(TextureID ID, const GLfloat sparams[4], const GLfloat tparams[4])
-{
-  if (!IsTextureValid(ID)) return;
-
-  textab(ID).Gen = GL_EYE_LINEAR;
-  if (sparams != NULL) memcpy(textab(ID).Plane1, sparams, sizeof(sgenparams));
-  else                 memcpy(textab(ID).Plane1, sgenparams, sizeof(sgenparams));
-
-  if (texdata(textab(ID).data).status != TEXDATA_1D) {
-    if (tparams != NULL) memcpy(textab(ID).Plane2, tparams, sizeof(tgenparams));
-    else                 memcpy(textab(ID).Plane2, tgenparams, sizeof(tgenparams));
-  }
-}
-
-/*----------------------------------------------------------------------*/
-
-void SetModeManual(TextureID ID)
-{
-  if (!IsTextureValid(ID)) return;
-
-  textab(ID).Gen = GL_NONE;
-}
-
-/*----------------------------------------------------------------------*/
-
-void SetRenderNearest(TextureID ID)
-{
-  if (!IsTextureValid(ID)) return;
-
-  textab(ID).Render = GL_NEAREST;
-}
-
-/*----------------------------------------------------------------------*/
-
-void SetRenderLinear(TextureID ID)
-{
-  if (!IsTextureValid(ID)) return;
-
-  textab(ID).Render = GL_LINEAR;
-}
-
-/*----------------------------------------------------------------------*/
-
-void SetTexturePosition(TextureID ID,
-                        GLfloat scalex, GLfloat scaley,
-                        GLfloat transx, GLfloat transy,
-                        GLfloat angle)
-{
-  textab(ID).scalex = scalex;
-  textab(ID).scaley = scaley;
-  textab(ID).transx = transx;
-  textab(ID).transy = transy;
-  textab(ID).angle = angle;
-}
-
-/*----------------------------------------------------------------------*/
-
-void SetTextureDefaultParams(TextureID ID)
-{
-  if (!IsTextureValid(ID)) return;
-
-#ifdef PRINT
-  printf("SetTextureDefaultParams::set parm par defaut textures\n");
-#endif
-
-
-  textab(ID).scalex = 1.0;
-  textab(ID).scaley = 1.0;
-  textab(ID).transx = 0.0;
-  textab(ID).transy = 0.0;
-  textab(ID).angle = 0.0;
-
-  textab(ID).Gen = GL_OBJECT_LINEAR;
-  textab(ID).Light = texdata(textab(ID).data).status == TEXDATA_1D ? GL_DECAL : GL_MODULATE;
-  textab(ID).Wrap = texdata(textab(ID).data).status == TEXDATA_1D ? GL_CLAMP : GL_REPEAT;
-  memcpy(textab(ID).Plane1, sgenparams, sizeof(sgenparams));
-  memcpy(textab(ID).Plane2, tgenparams, sizeof(tgenparams));
-  textab(ID).Render = texdata(textab(ID).data).status == TEXDATA_1D ? GL_NEAREST : GL_LINEAR;
-}
-
-/*----------------------------------------------------------------------*/
-/* Transfere de donnee des donnees internes a la structure TransferData */
-void TransferTexture_To_Data(TextureID ID, TextureData *TransfDt)
-{
-  /* affectations */
-  strcpy(TransfDt->path, texdata(textab(ID).data).imageFileName);
-  TransfDt->gen = textab(ID).Gen;
-  TransfDt->wrap  = textab(ID).Wrap;
-  TransfDt->render  = textab(ID).Light;
-  TransfDt->scalex  = textab(ID).scalex;
-  TransfDt->scaley  = textab(ID).scaley;
-  TransfDt->transx  = textab(ID).transx;
-  TransfDt->transy  = textab(ID).transy;
-  TransfDt->angle = textab(ID).angle;
-  memcpy(TransfDt->plane1,  textab(ID).Plane1, sizeof(SizeType));
-  memcpy(TransfDt->plane2,  textab(ID).Plane2, sizeof(SizeType));
-}
diff --git a/src/OpenGl/OpenGl_TextureBox.hxx b/src/OpenGl/OpenGl_TextureBox.hxx
deleted file mode 100755 (executable)
index 71aadb3..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright (c) 1999-2012 OPEN CASCADE SAS
-//
-// The content of this file is subject to the Open CASCADE Technology Public
-// License Version 6.5 (the "License"). You may not use the content of this file
-// except in compliance with the License. Please obtain a copy of the License
-// at http://www.opencascade.org and read it completely before using this file.
-//
-// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
-// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
-//
-// The Original Code and all software distributed under the License is
-// distributed on an "AS IS" basis, without warranty of any kind, and the
-// Initial Developer hereby disclaims all such warranties, including without
-// limitation, any warranties of merchantability, fitness for a particular
-// purpose or non-infringement. Please see the License for the specific terms
-// and conditions governing the rights and limitations under the License.
-
-/*
-* Fonction
-* ~~~~~~~~
-*   Gestion des textures sous OpenGL
-*
-*
-* Notes
-* ~~~~~
-*   Les textures sont toujours initialisee avec des parametres par defaut
-*     texture 1D:        WRAP_S = CLAMP
-*                        MAG_FILTER = NEAREST
-*                        generation de texture automatique en OBJECT_LINEAR
-*                        rendu avec DECAL
-*
-*     texture 2D:        WRAP_S/T = REPEAT
-*                        MAG/MIN_FILTER = LINEAR
-*                        generation de texture automatique en OBJECT_LINEAR
-*                        rendu avec MODULATE
-*
-*     texture 2D MipMap: WRAP_S/T = REPEAT
-*                        MAG_FILTER = LINEAR
-*                        MIN_FILTER = LINEAR_MIPMAP_NEAREST
-*                        generation de texture automatique en OBJECT_LINEAR
-*                        rendu avec MODULATE
-*
-*
-* Attention:
-* ~~~~~~~~~~~
-*  Ce package a ete teste sur SGI, OSF, SUN, HP et WNT.
-*
-*
-* Historique des modifications
-* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-*   22-05-97: PCT ; creation
-*   01-08-97: PCT ; suppression InitializeTextureBox()
-*   05-08-97: FMN ; ajout GetTextureData...
-*   19-06-98: FMN ; Portage Optimizer (C++)
-*   22-07-98: FGU ; ajout stucture TextureData
-*/
-/*----------------------------------------------------------------------*/
-
-#ifndef _OPENGL_TEXTUREBOX_H_
-#define _OPENGL_TEXTUREBOX_H_
-
-#include <OpenGl_GlCore11.hxx>
-#include <Standard_DefineAlloc.hxx>
-
-typedef int TextureID;
-#define TEXTUREBOX_ERROR ((TextureID)-1)
-
-/*
-*  Structure
-*/
-struct _TextureData
-{
-  /* Donnees propre au fichier */
-  char path[256];
-
-  /* Donnees propre a la texture */
-  GLint gen;
-  GLint wrap;
-  GLfloat plane1[4],  plane2[4];
-  GLint render;
-  GLfloat scalex,  scaley;
-  GLfloat transx, transy;
-  GLfloat angle;
-  DEFINE_STANDARD_ALLOC
-};
-typedef _TextureData TextureData;
-
-/*
-* Gestion des textures
-*/
-
-/* Get texture a partir des donnees (format RGBA) GLubyte data[width][height][4]
-* Le nom est utiliser pour la gesiton en interne, il permet d'eviter de charger
-* plusieurs textures avec le meme noms.
-*/
-TextureID GetTextureData1D(char *FileName, const GLint width, const GLint height, const void *data);
-TextureID GetTextureData2D(char *FileName, const GLint width, const GLint height, const void *data);
-TextureID GetTextureData2DMipMap(char *FileName, const GLint width, const GLint height, const void *data);
-
-class Handle(OpenGl_Context);
-void FreeTexture (const Handle(OpenGl_Context)& theContext,
-                  TextureID                     ID);
-
-void SetCurrentTexture(TextureID ID);
-GLboolean IsTextureValid(TextureID ID);
-
-void EnableTexture(void);
-void DisableTexture(void);
-GLboolean IsTextureEnabled(void);
-
-/*
-* Configuration d'une texture
-*/
-
-void SetTextureModulate(TextureID ID);
-void SetTextureDecal(TextureID ID);
-
-void SetTextureClamp(TextureID ID);
-void SetTextureRepeat(TextureID ID);
-
-void SetModeObject(TextureID ID, const GLfloat sparams[4], const GLfloat tparams[4]);
-void SetModeSphere(TextureID ID);
-void SetModeEye(TextureID ID, const GLfloat sparams[4], const GLfloat tparams[4]);
-void SetModeManual(TextureID ID);
-
-void SetRenderNearest(TextureID ID);
-void SetRenderLinear(TextureID ID);
-
-
-void SetTexturePosition(TextureID ID,
-                        GLfloat scalex, GLfloat scaley,
-                        GLfloat transx, GLfloat transy,
-                        GLfloat angle);
-
-
-void SetTextureDefaultParams(TextureID ID);
-
-void TransferTexture_To_Data(TextureID, TextureData *);
-
-/*----------------------------------------------------------------------*/
-
-#endif /* _OPENGL_TEXTUREBOX_H_ */
index 49c03bc..5099a2e 100644 (file)
@@ -24,8 +24,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-#include <OpenGl_TextureBox.hxx>
-
 #include <InterfaceGraphic_Graphic3d.hxx>  /* pour CALL_DEF_STRUCTURE */
 #include <InterfaceGraphic_Aspect.hxx>  /* pour CALL_DEF_VIEW  */
 #include <InterfaceGraphic_Visual3d.hxx>
@@ -99,7 +97,7 @@ void OpenGl_Trihedron::Redraw (const Handle(OpenGl_Workspace) &AWorkspace) const
   const Standard_Real V = AWorkspace->ActiveView()->Width();
 
   /* la taille des axes est 1 proportion (fixee a l'init du triedre) */
-  /* de la dimension la plus petite de la window.                    */ 
+  /* de la dimension la plus petite de la window.                    */
   const GLdouble L = ( U < V ? U : V ) * myScale;
 
   /*
@@ -158,18 +156,18 @@ void OpenGl_Trihedron::Redraw (const Handle(OpenGl_Workspace) &AWorkspace) const
       break;
   }
 
-  /* 
-  * Creation du triedre 
+  /*
+  * Creation du triedre
   */
   const OpenGl_AspectLine *AspectLine = AWorkspace->AspectLine( Standard_True );
 
-  /* Fotis Sioutis 2007-11-14 15:06 
-  I have also seen in previous posts that the view trihedron in V3d_WIREFRAME mode 
-  changes colors depending on the state of the view. This behaviour can be easily 
+  /* Fotis Sioutis 2007-11-14 15:06
+  I have also seen in previous posts that the view trihedron in V3d_WIREFRAME mode
+  changes colors depending on the state of the view. This behaviour can be easily
   corrected by altering call_triedron_redraw function in OpenGl_triedron.c of TKOpengl.
-  The only change needed is to erase glDisable(GL_LIGHTING) that is called before the 
+  The only change needed is to erase glDisable(GL_LIGHTING) that is called before the
   Axis name drawing and move this function call just before the initial axis drawing.
-  Below is the code portion with the modification.I don't know if this is considered to 
+  Below is the code portion with the modification.I don't know if this is considered to
   be a bug but anyway i believe it might help some of you out there.*/
   glDisable(GL_LIGHTING);
 
@@ -259,10 +257,10 @@ void OpenGl_Trihedron::Redraw (const Handle(OpenGl_Workspace) &AWorkspace) const
     TriedronCoord[1] = rayon * cos(ii * Angle1);
     glVertex3dv( TriedronCoord );
     ii--;
-  }  
+  }
   glEnd();
 
-  /* 
+  /*
   * Noms des axes et de l'origine
   */
   const OpenGl_AspectText *AspectText = AWorkspace->AspectText( Standard_True );
@@ -272,7 +270,7 @@ void OpenGl_Trihedron::Redraw (const Handle(OpenGl_Workspace) &AWorkspace) const
   AWorkspace->RenderText (L"Y", 0, float(rayon),        float(L + 3.0 * rayon), float(2.0 * rayon));
   AWorkspace->RenderText (L"Z", 0, float(-2.0 * rayon), float(0.5 * rayon),     float(L + 3.0 * rayon));
 
-  /* 
+  /*
   * restauration du contexte des matrices
   */
   glMatrixMode (GL_PROJECTION);
@@ -304,7 +302,7 @@ void OpenGl_Trihedron::RedrawZBuffer (const Handle(OpenGl_Workspace) &AWorkspace
   GLboolean isWithinView = GL_FALSE;
 
   /* la taille des axes est 1 proportion (fixee a l'init du triedre) */
-  /* de la dimension la plus petite de la window.                    */ 
+  /* de la dimension la plus petite de la window.                    */
   GLdouble L = ( U < V ? U : V ) * myScale;
 
   if (!isWithinView)
@@ -332,7 +330,7 @@ void OpenGl_Trihedron::RedrawZBuffer (const Handle(OpenGl_Workspace) &AWorkspace
     */
     switch (myPos)
     {
-      case Aspect_TOTP_LEFT_LOWER : 
+      case Aspect_TOTP_LEFT_LOWER :
         glTranslated( -0.5*U + L , -0.5*V + L , 0. );
         break;
 
@@ -358,7 +356,7 @@ void OpenGl_Trihedron::RedrawZBuffer (const Handle(OpenGl_Workspace) &AWorkspace
   const OpenGl_AspectLine *AspectLine = AWorkspace->AspectLine( Standard_True );
   const TEL_COLOUR &aLineColor = AspectLine->Color();
 
-  /* 
+  /*
   * Creation the trihedron
   */
 #define CYLINDER_LENGTH   0.75f
@@ -373,7 +371,7 @@ void OpenGl_Trihedron::RedrawZBuffer (const Handle(OpenGl_Workspace) &AWorkspace
   /* GL_DEPTH_WRITEMASK is not a valid argument to glIsEnabled, the  */
   /* original code is shown to be broken when run under an OpenGL debugger  */
   /* like GLIntercept. This is the correct way to retrieve the mask value.  */
-  glGetBooleanv(GL_DEPTH_WRITEMASK, &aIsDepthMaskEnabled); 
+  glGetBooleanv(GL_DEPTH_WRITEMASK, &aIsDepthMaskEnabled);
 
   const GLdouble aCylinderLength = L * CYLINDER_LENGTH;
   const GLdouble aCylinderDiametr = L * myDiameter;
@@ -411,21 +409,21 @@ void OpenGl_Trihedron::RedrawZBuffer (const Handle(OpenGl_Workspace) &AWorkspace
   glEnable(GL_CULL_FACE);
 
   /*Fotis Sioutis | 2008-01-21 10:55
-  In the function call_zbuffer_triedron_redraw of TKOpengl, 
-  the z buffered trihedron changes colors in case there 
-  is an object in the scene that has an explicit material 
-  attached to it.In the trihedron display loop, 
-  GL_COLOR_MATERIAL is enabled, but only the GL_DIFFUSE 
+  In the function call_zbuffer_triedron_redraw of TKOpengl,
+  the z buffered trihedron changes colors in case there
+  is an object in the scene that has an explicit material
+  attached to it.In the trihedron display loop,
+  GL_COLOR_MATERIAL is enabled, but only the GL_DIFFUSE
   parameter is utilized in glColorMaterial(...).
-  This causes the last ambient,specular and emission values 
+  This causes the last ambient,specular and emission values
   used, to stay at the stack and applied to the trihedron
   (which causes the color change).
-  A fix is proposed , to change GL_DIFFUSE to 
-  GL_AMBIENT_AND_DIFFUSE in glColorMaterial call in 
-  line 946.The above of course will leave unchanged 
+  A fix is proposed , to change GL_DIFFUSE to
+  GL_AMBIENT_AND_DIFFUSE in glColorMaterial call in
+  line 946.The above of course will leave unchanged
   the SPECULAR and EMISSION values.
-  Another proposal which would fix 100% the problem 
-  is to use glMaterial instead of glColor on the trihedron 
+  Another proposal which would fix 100% the problem
+  is to use glMaterial instead of glColor on the trihedron
   drawing loop.               */
   const GLfloat aNULLColor[] = { 0.f, 0.f, 0.f, 0.f }; /* FS 21/01/08 */
   glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, aNULLColor);
@@ -459,18 +457,18 @@ void OpenGl_Trihedron::RedrawZBuffer (const Handle(OpenGl_Workspace) &AWorkspace
 
   /* PCD 17/06/07  */
   GLint df;
-  glGetIntegerv (GL_DEPTH_FUNC, &df); 
+  glGetIntegerv (GL_DEPTH_FUNC, &df);
 
   int i;
   for (i = 0; i < 2; i++) /* PCD 11/02/08 Two pass method */
   {
     if (i == 0) /*  First pass  */
-    {                          
-      glDepthFunc(GL_ALWAYS); 
+    {
+      glDepthFunc(GL_ALWAYS);
     }
     else
     {
-      glDepthFunc(GL_LEQUAL); 
+      glDepthFunc(GL_LEQUAL);
     }
 
     glPushMatrix();
@@ -486,7 +484,7 @@ void OpenGl_Trihedron::RedrawZBuffer (const Handle(OpenGl_Workspace) &AWorkspace
     glTranslated(0, 0, L * CYLINDER_LENGTH);
     glCallList(startList + 3);
     glCallList(startList + 1);
-    glPopMatrix();    
+    glPopMatrix();
 
     // X axis
     glRotated(90.0, TriedronAxeY[0], TriedronAxeY[1], TriedronAxeY[2]);
@@ -495,7 +493,7 @@ void OpenGl_Trihedron::RedrawZBuffer (const Handle(OpenGl_Workspace) &AWorkspace
     glTranslated(0, 0, L * CYLINDER_LENGTH);
     glCallList(startList + 3);
     glCallList(startList + 1);
-    glPopMatrix();    
+    glPopMatrix();
 
     // Y axis
     glRotated(-90.0, TriedronAxeX[0], TriedronAxeX[1], TriedronAxeX[2]);
@@ -507,7 +505,7 @@ void OpenGl_Trihedron::RedrawZBuffer (const Handle(OpenGl_Workspace) &AWorkspace
     glPopMatrix();
   }
 
-  if (!aIsDepthEnabled) 
+  if (!aIsDepthEnabled)
     glDisable(GL_DEPTH_TEST);
 
   if (!aIsDepthMaskEnabled)
@@ -520,7 +518,7 @@ void OpenGl_Trihedron::RedrawZBuffer (const Handle(OpenGl_Workspace) &AWorkspace
   glColor3fv (aLineColor.rgb);
 
   /* Always write the text */
-  glDepthFunc(GL_ALWAYS); 
+  glDepthFunc(GL_ALWAYS);
 
   glPopAttrib();
 
@@ -529,11 +527,11 @@ void OpenGl_Trihedron::RedrawZBuffer (const Handle(OpenGl_Workspace) &AWorkspace
   const GLdouble rayon = L/30. ; /* rayon de la base du cone */
   //const double Angle = 2. * M_PI/ myNbFacettes;
 
-  glDeleteLists(startList, 4); 
+  glDeleteLists(startList, 4);
 
   glDisable(GL_LIGHTING);
 
-  /* 
+  /*
   * origine names
   */
   const OpenGl_AspectText *AspectText = AWorkspace->AspectText( Standard_True );
@@ -559,7 +557,7 @@ void OpenGl_Trihedron::RedrawZBuffer (const Handle(OpenGl_Workspace) &AWorkspace
 
 /*----------------------------------------------------------------------*/
 /*
-* Fonctions publiques 
+* Fonctions publiques
 */
 
 
@@ -614,44 +612,51 @@ OpenGl_Trihedron::~OpenGl_Trihedron ()
 /*----------------------------------------------------------------------*/
 
 /*
-* affichage d'un triedre non zoomable dans la wks  awsid 
+* affichage d'un triedre non zoomable dans la wks  awsid
 *
 * Triedre = Objet non Zoomable;
-* on cree cette fonction pour pouvoir travailler par les structures 
+* on cree cette fonction pour pouvoir travailler par les structures
 * utilisees par les fonctions Tsm* et TEL_VIEW_REP
 *
 */
 
 //call_triedron_redraw_from_wsid
-void OpenGl_Trihedron::Render (const Handle(OpenGl_Workspace) &AWorkspace) const
+void OpenGl_Trihedron::Render (const Handle(OpenGl_Workspace)& theWorkspace) const
 {
-  const OpenGl_AspectLine *oldAspectLine = AWorkspace->SetAspectLine(&myAspectLine);
-  const OpenGl_AspectText *oldAspectText = AWorkspace->SetAspectText(&myAspectText);
+  const OpenGl_AspectLine* aPrevAspectLine = theWorkspace->SetAspectLine (&myAspectLine);
+  const OpenGl_AspectText* aPrevAspectText = theWorkspace->SetAspectText (&myAspectText);
 
   /* check if GL_LIGHTING should be disabled
-  no enabling 'cause it will be done (if necessary: kinda Polygon types ) 
+  no enabling 'cause it will be done (if necessary: kinda Polygon types )
   during redrawing structures
   */
-  if (!AWorkspace->UseGLLight())
-    glDisable( GL_LIGHTING );
+  if (!theWorkspace->UseGLLight())
+  {
+    glDisable (GL_LIGHTING);
+  }
 
-  /* sauvegarde du contexte (on reste dans le buffer courant) */
-  const GLboolean save_texture_state = IsTextureEnabled();
-  DisableTexture();
+  const Handle(OpenGl_Texture) aPrevTexture = theWorkspace->DisableTexture();
 
   /* affichage du Triedre Non Zoomable */
-  AWorkspace->ActiveView()->EndTransformPersistence();
+  theWorkspace->ActiveView()->EndTransformPersistence();
 
   if (myIsWireframe)
-    Redraw (AWorkspace);
+  {
+    Redraw (theWorkspace);
+  }
   else
-    RedrawZBuffer (AWorkspace);
+  {
+    RedrawZBuffer (theWorkspace);
+  }
 
-  /* restauration du contexte */
-  if (save_texture_state) EnableTexture();
+  // restore aspects
+  if (!aPrevTexture.IsNull())
+  {
+    theWorkspace->EnableTexture (aPrevTexture);
+  }
 
-  AWorkspace->SetAspectText(oldAspectText);
-  AWorkspace->SetAspectLine(oldAspectLine);
+  theWorkspace->SetAspectText (aPrevAspectText);
+  theWorkspace->SetAspectLine (aPrevAspectLine);
 }
 
 /*----------------------------------------------------------------------*/
index 96e655b..012af13 100644 (file)
 #include <OpenGl_GlCore11.hxx>
 
 #include <OpenGl_View.hxx>
-
+#include <OpenGl_Context.hxx>
 #include <OpenGl_Workspace.hxx>
 #include <OpenGl_Display.hxx>
 
-#include <OpenGl_Display.hxx>
+#include <OpenGl_Texture.hxx>
 #include <OpenGl_Trihedron.hxx>
 #include <OpenGl_GraduatedTrihedron.hxx>
 
 #include <OpenGl_transform_persistence.hxx>
 
+#include <Graphic3d_TextureEnv.hxx>
+
 #include <GL/glu.h> // gluUnProject()
 
 IMPLEMENT_STANDARD_HANDLE(OpenGl_View,MMgt_TShared)
@@ -77,8 +79,7 @@ static const TEL_TRANSFORM_PERSISTENCE myDefaultTransPers = { 0, 0.F, 0.F, 0.F }
 /*----------------------------------------------------------------------*/
 
 OpenGl_View::OpenGl_View (const CALL_DEF_VIEWCONTEXT &AContext)
-: myTextureEnv(0),
-  mySurfaceDetail(Visual3d_TOD_NONE),
+: mySurfaceDetail(Visual3d_TOD_NONE),
   myBackfacing(0),
   myBgTexture(myDefaultBgTexture),
   myBgGradient(myDefaultBgGradient),
@@ -122,11 +123,45 @@ OpenGl_View::OpenGl_View (const CALL_DEF_VIEWCONTEXT &AContext)
 
 OpenGl_View::~OpenGl_View ()
 {
+  ReleaseGlResources (NULL); // ensure ReleaseGlResources() was called within valid context
+}
+
+void OpenGl_View::ReleaseGlResources (const Handle(OpenGl_Context)& theCtx)