0025372: Visualization, TKOpenGl - suppress annoying verbose messages from NVIDIA...
[occt.git] / src / OpenGl / OpenGl_Caps.hxx
1 // Created on: 2013-08-25
2 // Created by: Kirill GAVRILOV
3 // Copyright (c) 2013-2014 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
16 #ifndef _OpenGl_Caps_H__
17 #define _OpenGl_Caps_H__
18
19 #include <Standard_DefineHandle.hxx>
20 #include <Standard_Transient.hxx>
21 #include <Handle_Standard_Transient.hxx>
22
23 //! Class to define graphic driver capabilities.
24 //! Notice that these options will be ignored if particular functionality does not provided by GL driver
25 class OpenGl_Caps : public Standard_Transient
26 {
27
28 public: //! @name flags to disable particular functionality, should be used only for testing purposes!
29
30   Standard_Boolean vboDisable;        //!< flag permits VBO usage, will significantly affect performance (OFF by default)
31   Standard_Boolean pntSpritesDisable; //!< flag permits Point Sprites usage, will significantly affect performance (OFF by default)
32   Standard_Boolean keepArrayData;     //!< Disables freeing CPU memory after building VBOs (OFF by default)
33   Standard_Boolean ffpEnable;         //!< Enables FFP (fixed-function pipeline), do not use built-in GLSL programs (ON by default on desktop OpenGL and OFF on OpenGL ES)
34
35 public: //! @name context creation parameters
36
37   /**
38    * Specify that driver should not swap back/front buffers at the end of frame.
39    * Useful when OCCT Viewer is integrated into existing OpenGL rendering pipeline as part,
40    * thus swapping part is performed outside.
41    *
42    * OFF by default.
43    */
44   Standard_Boolean buffersNoSwap;
45
46   /**
47    * Request stereoscopic context (with Quad Buffer). This flag requires support in OpenGL driver.
48    *
49    * OFF by default.
50    */
51   Standard_Boolean contextStereo;
52
53   /**
54    * Request debug GL context. This flag requires support in OpenGL driver.
55    *
56    * When turned on OpenGL driver emits error and warning messages to provided callback
57    * (see OpenGl_Context - messages will be printed to standard output).
58    * Affects performance - thus should not be turned on by products in released state.
59    *
60    * OFF by default. Currently implemented only for Windows (WGL).
61    */
62   Standard_Boolean contextDebug;
63
64   /**
65    * Request debug GL context to emit messages within main thread (when contextDebug is specified!).
66    *
67    * Some implementations performs GL rendering within dedicated thread(s),
68    * in this case debug messages will be pushed from unknown thread making call stack useless,
69    * since it does not interconnected to application calls.
70    * This option asks GL driver to switch into synchronized implementation.
71    * Affects performance - thus should not be turned on by products in released state.
72    *
73    * OFF by default.
74    */
75   Standard_Boolean contextSyncDebug;
76
77   /**
78    * Disable hardware acceleration.
79    *
80    * This flag overrides default behavior, when accelerated context always preferred over software ones:
81    * - on Windows will force Microsoft software implementation;
82    * - on Mac OS X, forces Apple software implementation.
83    *
84    * Software implementations are dramatically slower - should never be used.
85    *
86    * OFF by default. Currently implemented only for Windows (WGL) and Mac OS X (Cocoa).
87    */
88   Standard_Boolean contextNoAccel;
89
90   /**
91    * Request backward-compatible GL context. This flag requires support in OpenGL driver.
92    *
93    * Backward-compatible profile includes deprecated functionality like FFP (fixed-function pipeline),
94    * and might be useful for compatibility with application OpenGL code.
95    *
96    * Most drivers support all features within backward-compatibility profile,
97    * but some limit functionality to OpenGL 2.1 (e.g. OS X) when core profile is not explicitly requested.
98    *
99    * Requires OpenGL 3.2+ drivers.
100    * Has no effect on OpenGL ES 2.0+ drivers (which do not provie FFP compatibility).
101    * Interacts with ffpEnable option, which should be disabled within core profile.
102    *
103    * ON by default.
104    */
105   Standard_Boolean contextCompatible;
106
107 public: //! @name flags to activate verbose output
108
109   //! Print GLSL program compilation/linkage warnings, if any. OFF by default.
110   Standard_Boolean glslWarnings;
111
112   //! Suppress redundant messages from debug GL context. ON by default.
113   Standard_Boolean suppressExtraMsg;
114
115 public: //! @name class methods
116
117   //! Default constructor - initialize with most optimal values.
118   Standard_EXPORT OpenGl_Caps();
119
120   //! Destructor.
121   Standard_EXPORT virtual ~OpenGl_Caps();
122
123   //! Copy maker.
124   Standard_EXPORT OpenGl_Caps& operator= (const OpenGl_Caps& theCopy);
125
126 private:
127
128   //! Not implemented
129   OpenGl_Caps (const OpenGl_Caps& );
130
131 public:
132
133   DEFINE_STANDARD_RTTI(OpenGl_Caps) // Type definition
134
135 };
136
137 DEFINE_STANDARD_HANDLE(OpenGl_Caps, Standard_Transient)
138
139 #endif // _OpenGl_Caps_H__