0031478: Visualization, TKOpenGl - allow uploading Cubemap in compressed DDS format...
[occt.git] / src / Graphic3d / Graphic3d_TextureRoot.hxx
index 5cf14be..fb155c4 100644 (file)
@@ -25,6 +25,8 @@
 #include <Standard_Type.hxx>
 #include <TCollection_AsciiString.hxx>
 
+class Image_CompressedPixMap;
+class Image_SupportedFormats;
 class Graphic3d_TextureParams;
 
 //! This is the texture root class enable the dialog with the GraphicDriver allows the loading of texture.
@@ -80,13 +82,20 @@ public:
   void UpdateRevision() { ++myRevision; }
 
   //! This method will be called by graphic driver each time when texture resource should be created.
+  //! It is called in front of GetImage() for uploading compressed image formats natively supported by GPU.
+  //! @param theSupported [in] the list of supported compressed texture formats;
+  //!                          returning image in unsupported format will result in texture upload failure
+  //! @return compressed pixmap or NULL if image is not in supported compressed format
+  Standard_EXPORT virtual Handle(Image_CompressedPixMap) GetCompressedImage (const Handle(Image_SupportedFormats)& theSupported);
+
+  //! This method will be called by graphic driver each time when texture resource should be created.
   //! Default constructors allow defining the texture source as path to texture image or directly as pixmap.
   //! If the source is defined as path, then the image will be dynamically loaded when this method is called
   //! (and no copy will be preserved in this class instance).
   //! Inheritors may dynamically generate the image.
   //! Notice, image data should be in Bottom-Up order (see Image_PixMap::IsTopDown())!
   //! @return the image for texture.
-  Standard_EXPORT virtual Handle(Image_PixMap) GetImage() const;
+  Standard_EXPORT virtual Handle(Image_PixMap) GetImage (const Handle(Image_SupportedFormats)& theSupported);
 
   //! @return low-level texture parameters
   const Handle(Graphic3d_TextureParams)& GetParams() const { return myParams; }
@@ -104,6 +113,9 @@ public:
   //! Set flag indicating color nature of values within the texture.
   void SetColorMap (Standard_Boolean theIsColor) { myIsColorMap = theIsColor; }
 
+  //! Returns whether row's memory layout is top-down.
+  Standard_Boolean IsTopDown() const { return myIsTopDown; }
+
 protected:
 
   //! Creates a texture from a file
@@ -119,6 +131,13 @@ protected:
   //! Unconditionally generate new texture id. Should be called only within constructor.
   Standard_EXPORT void generateId();
 
+  //! Try converting image to compatible format.
+  Standard_EXPORT static void convertToCompatible (const Handle(Image_SupportedFormats)& theSupported,
+                                                   const Handle(Image_PixMap)& theImage);
+
+  //! Method for supporting old API; another GetImage() method should be implemented instead.
+  virtual Handle(Image_PixMap) GetImage() const { return Handle(Image_PixMap)(); }
+
 protected:
 
   Handle(Graphic3d_TextureParams) myParams;     //!< associated texture parameters
@@ -128,6 +147,8 @@ protected:
   Standard_Size                   myRevision;   //!< image revision - for signaling changes in the texture source (e.g. file update, pixmap update)
   Graphic3d_TypeOfTexture         myType;       //!< texture type
   Standard_Boolean                myIsColorMap; //!< flag indicating color nature of values within the texture
+  Standard_Boolean                myIsTopDown;  //!< Stores rows's memory layout
+
 
 };