File: FXGLVisual.h

package info (click to toggle)
gogglesmm 1.2.5-6
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 16,812 kB
  • sloc: cpp: 231,960; ansic: 893; xml: 222; makefile: 33
file content (162 lines) | stat: -rw-r--r-- 6,441 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/********************************************************************************
*                                                                               *
*                            V i s u a l   C l a s s                            *
*                                                                               *
*********************************************************************************
* Copyright (C) 1999,2022 by Jeroen van der Zijp.   All Rights Reserved.        *
*********************************************************************************
* This library is free software; you can redistribute it and/or modify          *
* it under the terms of the GNU Lesser General Public License as published by   *
* the Free Software Foundation; either version 3 of the License, or             *
* (at your option) any later version.                                           *
*                                                                               *
* This library is distributed in the hope that it will be useful,               *
* but WITHOUT ANY WARRANTY; without even the implied warranty of                *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                 *
* GNU Lesser General Public License for more details.                           *
*                                                                               *
* You should have received a copy of the GNU Lesser General Public License      *
* along with this program.  If not, see <http://www.gnu.org/licenses/>          *
********************************************************************************/
#ifndef FXGLVISUAL_H
#define FXGLVISUAL_H

#ifndef FXVISUAL_H
#include "FXVisual.h"
#endif

namespace FX {


class FXFont;
class FXWindow;
class FXImage;
class FXIcon;
class FXBitmap;
class FXDCWindow;


/// Visual describes pixel format of a drawable
class FXAPI FXGLVisual : public FXVisual {
  FXDECLARE(FXGLVisual)
  friend class FXWindow;
  friend class FXImage;
  friend class FXIcon;
  friend class FXBitmap;
  friend class FXDCWindow;
protected:
  struct FXGLSpecs;
protected:
  FXuchar redSize;              // Red bits
  FXuchar greenSize;            // Green depth
  FXuchar blueSize;             // Blue bits
  FXuchar alphaSize;            // Alpha bits
  FXuchar depthSize;            // Depth bits
  FXuchar stencilSize;          // Stencil bits
  FXuchar multiSamples;         // Multi-sampling
  FXuchar accumRedSize;         // Red accu buffer bits
  FXuchar accumGreenSize;       // Green accu buffer bits
  FXuchar accumBlueSize;        // Blue accu buffer bits
  FXuchar accumAlphaSize;       // Alpha accu buffer bits
  FXuchar actualRedSize;        // Actual Red bits
  FXuchar actualGreenSize;      // Actual Green depth
  FXuchar actualBlueSize;       // Actual Blue bits
  FXuchar actualAlphaSize;      // Actual Alpha bits
  FXuchar actualDepthSize;      // Actual Depth bits
  FXuchar actualStencilSize;    // Actual Stencil bits
  FXuchar actualMultiSamples;   // Actual multi-sampling
  FXuchar actualAccumRedSize;   // Actual Red accu buffer bits
  FXuchar actualAccumGreenSize; // Actual Green accu buffer bits
  FXuchar actualAccumBlueSize;  // Actual Blue accu buffer bits
  FXuchar actualAccumAlphaSize; // Actual Alpha accu buffer bits
  FXbool  doubleBuffer;
  FXbool  stereoBuffer;
  FXbool  accelerated;
  FXbool  copying;
protected:
  FXGLVisual();
private:
  FXGLVisual(const FXGLVisual&);
  FXGLVisual &operator=(const FXGLVisual&);
  FXint matchSpecs(const FXGLSpecs& s);
public:

  /// Construct default visual
  FXGLVisual(FXApp* a,FXuint flgs=VISUAL_DOUBLE_BUFFER);

  /// Create visual
  virtual void create();

  /// Detach visual
  virtual void detach();

  /// Destroy visual
  virtual void destroy();

  /// Get sizes for bit-planes
  FXint getRedSize() const { return redSize; }
  FXint getGreenSize() const { return greenSize; }
  FXint getBlueSize() const { return blueSize; }
  FXint getAlphaSize() const { return alphaSize; }
  FXint getDepthSize() const { return depthSize; }
  FXint getStencilSize() const { return stencilSize; }
  FXint getMultiSamples() const { return multiSamples; }
  FXint getAccumRedSize() const { return accumRedSize; }
  FXint getAccumGreenSize() const { return accumGreenSize; }
  FXint getAccumBlueSize() const { return accumBlueSize; }
  FXint getAccumAlphaSize() const { return accumAlphaSize; }

  /// Set sizes for bit-planes
  void setRedSize(FXint rs){ redSize=rs; }
  void setGreenSize(FXint gs){ greenSize=gs; }
  void setBlueSize(FXint bs){ blueSize=bs; }
  void setAlphaSize(FXint as){ alphaSize=as; }
  void setDepthSize(FXint ds){ depthSize=ds; }
  void setStencilSize(FXint ss){ stencilSize=ss; }
  void setMultiSamples(FXint ms){ multiSamples=ms; }
  void setAccumRedSize(FXint rs){ accumRedSize=rs; }
  void setAccumGreenSize(FXint gs){ accumGreenSize=gs; }
  void setAccumBlueSize(FXint bs){ accumBlueSize=bs; }
  void setAccumAlphaSize(FXint as){ accumAlphaSize=as; }

  /// Get ACTUAL sizes for bit-planes
  FXint getActualRedSize() const { return actualRedSize; }
  FXint getActualGreenSize() const { return actualGreenSize; }
  FXint getActualBlueSize() const { return actualBlueSize; }
  FXint getActualAlphaSize() const { return actualAlphaSize; }
  FXint getActualDepthSize() const { return actualDepthSize; }
  FXint getActualStencilSize() const { return actualStencilSize; }
  FXint getActualMultiSamples() const { return actualMultiSamples; }
  FXint getActualAccumRedSize() const { return actualAccumRedSize; }
  FXint getActualAccumGreenSize() const { return actualAccumGreenSize; }
  FXint getActualAccumBlueSize() const { return actualAccumBlueSize; }
  FXint getActualAccumAlphaSize() const { return actualAccumAlphaSize; }

  /// Is it double buffered?
  FXbool isDoubleBuffer() const { return doubleBuffer; }

  /// Is it stereo?
  FXbool isStereo() const { return stereoBuffer; }

  /// Is it hardware-accelerated?
  FXbool isAccelerated() const { return accelerated; }

  /// Does it swap by copying instead of flipping buffers
  FXbool isBufferSwapCopy() const { return copying; }

  /// Test if if OpenGL is supported.
  static FXbool hasOpenGL(FXApp* application);

  /// Save visual info to a stream
  virtual void save(FXStream& store) const;

  /// Load visual info to a stream
  virtual void load(FXStream& store);

  /// Destructor
  virtual ~FXGLVisual();
  };

}

#endif