0022819: Redesign of OpenGl driver
[occt.git] / src / OpenGl / OpenGl_Window.hxx
diff --git a/src/OpenGl/OpenGl_Window.hxx b/src/OpenGl/OpenGl_Window.hxx
new file mode 100644 (file)
index 0000000..3e80d21
--- /dev/null
@@ -0,0 +1,106 @@
+// File:      OpenGl_Window.hxx
+// Created:   20 September 2011
+// Author:    Sergey ZERCHANINOV
+// Copyright: OPEN CASCADE 2011
+
+#ifndef _OpenGl_Window_Header
+#define _OpenGl_Window_Header
+
+#include <Handle_OpenGl_Window.hxx>
+#include <MMgt_TShared.hxx>
+
+#include <InterfaceGraphic.hxx>
+#include <InterfaceGraphic_Aspect.hxx>
+#include <InterfaceGraphic_telem.hxx>
+
+#include <Handle_OpenGl_Display.hxx>
+#include <Handle_OpenGl_Context.hxx>
+
+//! This class represents low-level wrapper over window with GL context.
+//! The window itself should be provided to constructor.
+class OpenGl_Window : public MMgt_TShared
+{
+public:
+
+  //! Main constructor - prepare GL context for specified window.
+  OpenGl_Window (const Handle(OpenGl_Display)& theDisplay,
+                 const CALL_DEF_WINDOW&        theCWindow,
+                 Aspect_RenderingContext       theGContext);
+
+  //! Destructor
+  virtual ~OpenGl_Window();
+
+  //! Resizes the window.
+  void Resize (const CALL_DEF_WINDOW& theCWindow);
+
+  //! Reads depth component for current scene into specified buffer.
+  void ReadDepths (const Standard_Integer theX,     const Standard_Integer theY,
+                   const Standard_Integer theWidth, const Standard_Integer theHeight,
+                   float* theDepths);
+
+  void SetBackgroundColor (const Standard_ShortReal theR,
+                           const Standard_ShortReal theG,
+                           const Standard_ShortReal theB);
+
+  void EnablePolygonOffset() const;
+  void DisablePolygonOffset() const;
+
+  Standard_Integer Width()  const { return myWidth; }
+  Standard_Integer Height() const { return myHeight; }
+  const TEL_COLOUR& BackgroundColor() const { return myBgColor; }
+  Standard_Boolean Dither()     const { return myDither; }
+  Standard_Boolean BackDither() const { return myBackDither; }
+
+  const Handle(OpenGl_Display)& GetDisplay() const { return myDisplay; }
+
+  const Handle(OpenGl_Context)& GetGlContext() const { return myGlContext; }
+
+  WINDOW    GetWindow()   const { return myWindow; }
+  GLCONTEXT GetGContext() const { return myGContext; }
+
+protected:
+
+  //! Activates GL context and setup viewport.
+  void Init();
+
+  //! Makes GL context for this window active in current thread
+  virtual Standard_Boolean Activate();
+
+  void EnableFeatures() const;
+  void DisableFeatures() const;
+
+  //! Draw directly to the FRONT buffer. Can cause artifacts on the screen.
+  void MakeFrontBufCurrent() const;
+
+  //! Draw to BACK buffer. Normal and default state.
+  void MakeBackBufCurrent() const;
+
+  //! Draw simultaneously to BACK and FRONT buffers. Abnormal usage.
+  void MakeFrontAndBackBufCurrent() const;
+
+protected:
+
+  Handle(OpenGl_Display) myDisplay;
+  WINDOW                 myWindow;      //!< native window handle, system-specific
+  Handle(OpenGl_Context) myGlContext;
+  GLCONTEXT              myGContext;    //!< native GL context bound to this window, system-specific
+  Standard_Boolean       myOwnGContext; //!< set to TRUE if GL context was not created by this class
+#if (defined(_WIN32) || defined(__WIN32__))
+  HDC                    myWindowDC;
+  BOOL                   mySysPalInUse;
+#endif
+
+  Standard_Integer       myWidth;       // WSWidth
+  Standard_Integer       myHeight;      // WSHeight
+  TEL_COLOUR             myBgColor;     // WSBackground
+  Standard_Boolean       myDither;
+  Standard_Boolean       myBackDither;
+
+public:
+
+  DEFINE_STANDARD_RTTI(OpenGl_Window) // Type definition
+  IMPLEMENT_MEMORY_OPERATORS
+
+};
+
+#endif //_OpenGl_Window_Header