62e1beed |
1 | // Created on: 2015-06-10 |
2 | // Created by: Kirill Gavrilov |
3 | // Copyright (c) 2015 OPEN CASCADE SAS |
4 | // |
5 | // This file is part of Open CASCADE Technology software library. |
6 | // |
7 | // This library is free software; you can redistribute it and/or modify it under |
8 | // the terms of the GNU Lesser General Public License version 2.1 as published |
9 | // by the Free Software Foundation, with special exception defined in the file |
10 | // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT |
11 | // distribution for complete text of the license and disclaimer of any warranty. |
12 | // |
13 | // Alternatively, this file may be used under the terms of Open CASCADE |
14 | // commercial license or contractual agreement. |
15 | |
c357e426 |
16 | #ifndef _D3DHost_View_HeaderFile |
17 | #define _D3DHost_View_HeaderFile |
62e1beed |
18 | |
62e1beed |
19 | #include <D3DHost_FrameBuffer.hxx> |
c357e426 |
20 | #include <OpenGl_View.hxx> |
21 | #include <OpenGl_Workspace.hxx> |
22 | |
23 | class D3DHost_GraphicDriver; |
d2eddacc |
24 | struct IDirect3D9; |
25 | struct IDirect3DDevice9; |
26 | typedef struct _D3DPRESENT_PARAMETERS_ D3DPRESENT_PARAMETERS; |
62e1beed |
27 | |
c357e426 |
28 | //! The D3D host view implementation that overrides rendering methods. |
29 | class D3DHost_View : public OpenGl_View |
62e1beed |
30 | { |
31 | |
32 | public: |
33 | |
c357e426 |
34 | //! Constructor. |
35 | Standard_EXPORT D3DHost_View (const Handle(Graphic3d_StructureManager)& theMgr, |
36 | const Handle(D3DHost_GraphicDriver)& theDriver, |
37 | const Handle(OpenGl_Caps)& theCaps, |
c357e426 |
38 | OpenGl_StateCounter* theCounter); |
39 | |
40 | //! Default destructor. |
41 | Standard_EXPORT virtual ~D3DHost_View(); |
42 | |
43 | //! Creates and maps rendering window to the view. |
44 | //! @param theWindow [in] the window. |
45 | //! @param theContext [in] the rendering context. If NULL the context will be created internally. |
46 | //! @param theDisplayCB [in] the display callback function. If is not a NULL value, then the callback will be |
47 | //! invoked at the end of the OCC graphic traversal and just before the swap of buffers. |
48 | //! @param theClientData [in] the client data for the callback. |
7aa74f30 |
49 | Standard_EXPORT virtual void SetWindow (const Handle(Aspect_Window)& theWindow, |
50 | const Aspect_RenderingContext theContext) Standard_OVERRIDE; |
62e1beed |
51 | |
52 | //! Resizes the window. |
c357e426 |
53 | Standard_EXPORT virtual void Resized() Standard_OVERRIDE; |
62e1beed |
54 | |
55 | //! Redraw the all content. |
c357e426 |
56 | Standard_EXPORT virtual void Redraw() Standard_OVERRIDE; |
62e1beed |
57 | |
58 | //! Redraw only immediate layer. |
c357e426 |
59 | Standard_EXPORT virtual void RedrawImmediate() Standard_OVERRIDE; |
62e1beed |
60 | |
dc9f1dbf |
61 | //! Fill in the dictionary with diagnostic info. |
62 | //! Should be called within rendering thread. |
63 | Standard_EXPORT virtual void DiagnosticInformation (TColStd_IndexedDataMapOfStringString& theDict, |
64 | Graphic3d_DiagnosticInfo theFlags) const Standard_OVERRIDE; |
65 | |
62e1beed |
66 | public: |
67 | |
68 | //! @return true if IDirect3DDevice9Ex device has been created |
69 | bool isD3dEx() const { return myIsD3dEx; } |
70 | |
71 | //! Access Direct3D device instance. |
72 | IDirect3DDevice9* D3dDevice() const { return myD3dDevice; } |
73 | |
74 | //! Return D3D/WGL FBO. |
75 | const Handle(D3DHost_FrameBuffer)& D3dWglBuffer() const { return myD3dWglFbo; } |
76 | |
c357e426 |
77 | //! Return D3D surface. |
6cde53c4 |
78 | Standard_EXPORT IDirect3DSurface9* D3dColorSurface() const; |
c357e426 |
79 | |
62e1beed |
80 | protected: |
81 | |
82 | //! Auxiliary method. |
d2eddacc |
83 | Standard_EXPORT static TCollection_AsciiString d3dFormatError (const long theErrCode); |
62e1beed |
84 | |
85 | //! Initialize the D3D library. |
86 | Standard_EXPORT bool d3dInitLib(); |
87 | |
88 | //! Initialize Direct3D output device. |
c357e426 |
89 | Standard_EXPORT bool d3dInit(); |
62e1beed |
90 | |
91 | //! Reset Direct3D output settings. Could be used to switch windowed/fullscreen modes. |
92 | //! Use very carefully! Most objects should be released before and recreated after! |
c357e426 |
93 | Standard_EXPORT bool d3dReset(); |
62e1beed |
94 | |
95 | //! (Re-)create D3D surface. |
96 | Standard_EXPORT bool d3dCreateRenderTarget(); |
97 | |
98 | //! Starts the scene render. |
99 | //! Clears the backbuffer and sets the device to start rendering to it. |
100 | Standard_EXPORT void d3dBeginRender(); |
101 | |
102 | //! Ends the scene render. |
103 | Standard_EXPORT void d3dEndRender(); |
104 | |
105 | //! Presents to the screen. |
106 | Standard_EXPORT bool d3dSwap(); |
107 | |
108 | protected: |
109 | |
110 | IDirect3D9* myD3dLib; //!< Direct3D library instance |
111 | IDirect3DDevice9* myD3dDevice; //!< Direct3D device object |
d2eddacc |
112 | NCollection_Handle<D3DPRESENT_PARAMETERS> |
113 | myD3dParams; //!< parameters for created Direct3D device |
114 | unsigned int myRefreshRate; //!< refresh rate in fullscreen mode |
62e1beed |
115 | bool myIsD3dEx; //!< D3dEx flag for WDDM |
116 | Handle(D3DHost_FrameBuffer) myD3dWglFbo; //!< D3D/WGL interop FBO |
117 | |
118 | public: |
119 | |
92efcf78 |
120 | DEFINE_STANDARD_RTTIEXT(D3DHost_View,OpenGl_View) |
62e1beed |
121 | |
122 | }; |
123 | |
c357e426 |
124 | DEFINE_STANDARD_HANDLE(D3DHost_View, OpenGl_View) |
62e1beed |
125 | |
c357e426 |
126 | #endif // #ifndef _D3DHost_View_HeaderFile |