blob: b848578f67af7d71bab7c6292d4d02f3447876bf [file] [log] [blame]
Alexander von Gluck IV56d920a2013-12-14 11:46:05 -06001/*
2 * Copyright 2008-2013, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * This header defines BGLView, the base class making up
6 * the Haiku GL Kit.
7 *
8 */
9#ifndef BGLVIEW_H
10#define BGLVIEW_H
11
12
13#include <GL/gl.h>
14
15#define BGL_RGB 0
16#define BGL_INDEX 1
17#define BGL_SINGLE 0
18#define BGL_DOUBLE 2
19#define BGL_DIRECT 0
20#define BGL_INDIRECT 4
21#define BGL_ACCUM 8
22#define BGL_ALPHA 16
23#define BGL_DEPTH 32
24#define BGL_OVERLAY 64
25#define BGL_UNDERLAY 128
26#define BGL_STENCIL 512
27
28#ifdef __cplusplus
29
30#include <AppKit.h>
31#include <Bitmap.h>
32#include <DirectWindow.h>
33#include <View.h>
34#include <Window.h>
35#include <WindowScreen.h>
36
37
38struct glview_direct_info;
39class BGLRenderer;
40class GLRendererRoster;
41
42class BGLView : public BView {
43public:
44 BGLView(BRect rect, const char* name,
45 ulong resizingMode, ulong mode,
46 ulong options);
47 virtual ~BGLView();
48
49 void LockGL();
50 void UnlockGL();
51 void SwapBuffers();
52 void SwapBuffers(bool vSync);
53
54 BView* EmbeddedView(); // deprecated, returns NULL
55 void* GetGLProcAddress(const char* procName);
56
57 status_t CopyPixelsOut(BPoint source, BBitmap *dest);
58 status_t CopyPixelsIn(BBitmap *source, BPoint dest);
59
60 // Mesa's GLenum is uint where Be's ones was ulong!
61 virtual void ErrorCallback(unsigned long errorCode);
62
63 virtual void Draw(BRect updateRect);
64 virtual void AttachedToWindow();
65 virtual void AllAttached();
66 virtual void DetachedFromWindow();
67 virtual void AllDetached();
68
69 virtual void FrameResized(float newWidth, float newHeight);
70 virtual status_t Perform(perform_code d, void *arg);
71
72 virtual status_t Archive(BMessage *data, bool deep = true) const;
73
74 virtual void MessageReceived(BMessage *message);
75 virtual void SetResizingMode(uint32 mode);
76
77 virtual void Show();
78 virtual void Hide();
79
80 virtual BHandler* ResolveSpecifier(BMessage *msg, int32 index,
81 BMessage *specifier, int32 form,
82 const char *property);
83 virtual status_t GetSupportedSuites(BMessage *data);
84
85 void DirectConnected(direct_buffer_info *info);
86 void EnableDirectMode(bool enabled);
87
88 void* getGC() { return fGc; } // ???
89
90 virtual void GetPreferredSize(float* width, float* height);
91
92private:
93
94 virtual void _ReservedGLView1();
95 virtual void _ReservedGLView2();
96 virtual void _ReservedGLView3();
97 virtual void _ReservedGLView4();
98 virtual void _ReservedGLView5();
99 virtual void _ReservedGLView6();
100 virtual void _ReservedGLView7();
101 virtual void _ReservedGLView8();
102
103 BGLView(const BGLView &);
104 BGLView &operator=(const BGLView &);
105
106 void _DitherFront();
107 bool _ConfirmDither();
108 void _Draw(BRect rect);
109 void _CallDirectConnected();
110
111 void* fGc;
112 uint32 fOptions;
113 uint32 fDitherCount;
114 BLocker fDrawLock;
115 BLocker fDisplayLock;
116 glview_direct_info* fClipInfo;
117
118 BGLRenderer* fRenderer;
119 GLRendererRoster* fRoster;
120
121 BBitmap* fDitherMap;
122 BRect fBounds;
123 int16* fErrorBuffer[2];
124 uint64 _reserved[8];
125
126 void _LockDraw();
127 void _UnlockDraw();
128
129// BeOS compatibility
130private:
131 BGLView(BRect rect, char* name,
132 ulong resizingMode, ulong mode,
133 ulong options);
134};
135
136
137class BGLScreen : public BWindowScreen {
138public:
139 BGLScreen(char* name,
140 ulong screenMode, ulong options,
141 status_t *error, bool debug=false);
142 ~BGLScreen();
143
144 void LockGL();
145 void UnlockGL();
146 void SwapBuffers();
147 // Mesa's GLenum is uint where Be's ones was ulong!
148 virtual void ErrorCallback(unsigned long errorCode);
149
150 virtual void ScreenConnected(bool connected);
151 virtual void FrameResized(float width, float height);
152 virtual status_t Perform(perform_code code, void *arg);
153
154 virtual status_t Archive(BMessage *data, bool deep = true) const;
155 virtual void MessageReceived(BMessage *message);
156
157 virtual void Show();
158 virtual void Hide();
159
160 virtual BHandler* ResolveSpecifier(BMessage *message,
161 int32 index,
162 BMessage *specifier,
163 int32 form,
164 const char *property);
165 virtual status_t GetSupportedSuites(BMessage *data);
166
167private:
168
169 virtual void _ReservedGLScreen1();
170 virtual void _ReservedGLScreen2();
171 virtual void _ReservedGLScreen3();
172 virtual void _ReservedGLScreen4();
173 virtual void _ReservedGLScreen5();
174 virtual void _ReservedGLScreen6();
175 virtual void _ReservedGLScreen7();
176 virtual void _ReservedGLScreen8();
177
178 BGLScreen(const BGLScreen &);
179 BGLScreen &operator=(const BGLScreen &);
180
181 void* fGc;
182 long fOptions;
183 BLocker fDrawLock;
184
185 int32 fColorSpace;
186 uint32 fScreenMode;
187
188 uint64 _reserved[7];
189};
190
191#endif // __cplusplus
192
193#endif // BGLVIEW_H