X-Git-Url: http://git.dev.opencascade.org/gitweb/?p=occt.git;a=blobdiff_plain;f=src%2FOpenGl%2FOpenGl_Window.hxx;h=3e80d2169588f859c6289fc98684250631ab8ba2;hb=2166f0fad8d7bd32bed2ce4b8766e115d7be63a8;hpb=1d2b1ccb453fcdf3aac0bdb2d5baf34dfb1cc4f9 diff --git a/src/OpenGl/OpenGl_Window.hxx b/src/OpenGl/OpenGl_Window.hxx new file mode 100644 index 0000000000..3e80d21695 --- /dev/null +++ b/src/OpenGl/OpenGl_Window.hxx @@ -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 +#include + +#include +#include +#include + +#include +#include + +//! 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