blob: 595000bb56cb4669d5d41673d404d60a4c530fdc [file] [log] [blame]
Brian Paul50f20ec2003-12-13 01:26:14 +00001/*******************************************************************************
2/
3/ File: GLView.h
4/
5/ Copyright 1993-98, Be Incorporated, All Rights Reserved.
6/
7*******************************************************************************/
8
9#ifndef BGLVIEW_H
10#define BGLVIEW_H
11
12// added by Brian Paul:
13#ifndef BGL_RGB
14#define BGL_RGB 0
15#define BGL_INDEX 1
16#define BGL_SINGLE 0
17#define BGL_DOUBLE 2
18#define BGL_DIRECT 0
19#define BGL_INDIRECT 4
20#define BGL_ACCUM 8
21#define BGL_ALPHA 16
22#define BGL_DEPTH 32
23#define BGL_OVERLAY 64
24#define BGL_UNDERLAY 128
25#define BGL_STENCIL 512
26#endif
27
28
29#include <GL/gl.h>
30#include <AppKit.h>
31#include <interface/Window.h>
32#include <interface/View.h>
33#include <interface/Bitmap.h>
34#include <game/WindowScreen.h>
35#include <game/DirectWindow.h>
36
37class BGLView : public BView {
38public:
39
40 BGLView(BRect rect, char *name,
41 ulong resizingMode, ulong mode,
42 ulong options);
43 virtual ~BGLView();
44
45 void LockGL();
46 void UnlockGL();
47 void SwapBuffers();
48
49 // Added for Mesa (can't be virtual!)
50 void CopySubBufferMESA(GLint x, GLint y, GLuint width, GLuint height);
51
52 BView * EmbeddedView();
53 status_t CopyPixelsOut(BPoint source, BBitmap *dest);
54 status_t CopyPixelsIn(BBitmap *source, BPoint dest);
55
56 virtual void ErrorCallback(unsigned long errorCode); // GLenum errorCode);
57
58 virtual void Draw(BRect updateRect);
59
60 virtual void AttachedToWindow();
61 virtual void AllAttached();
62 virtual void DetachedFromWindow();
63 virtual void AllDetached();
64
65 virtual void FrameResized(float width, float height);
66 virtual status_t Perform(perform_code d, void *arg);
67
68 /* The public methods below, for the moment,
69 are just pass-throughs to BView */
70
71 virtual status_t Archive(BMessage *data, bool deep = true) const;
72
73 virtual void MessageReceived(BMessage *msg);
74 virtual void SetResizingMode(uint32 mode);
75
76 virtual void Show();
77 virtual void Hide();
78
79 virtual BHandler *ResolveSpecifier(BMessage *msg, int32 index,
80 BMessage *specifier, int32 form,
81 const char *property);
82 virtual status_t GetSupportedSuites(BMessage *data);
83
84 /* New public functions */
85 void DirectConnected( direct_buffer_info *info );
86 void EnableDirectMode( bool enabled );
87
88private:
89
90 virtual void _ReservedGLView1();
91 virtual void _ReservedGLView2();
92 virtual void _ReservedGLView3();
93 virtual void _ReservedGLView4();
94 virtual void _ReservedGLView5();
95 virtual void _ReservedGLView6();
96 virtual void _ReservedGLView7();
97 virtual void _ReservedGLView8();
98
99 BGLView(const BGLView &);
100 BGLView &operator=(const BGLView &);
101
102 void dither_front();
103 bool confirm_dither();
104 void draw(BRect r);
105
106 void * m_gc;
107 uint32 m_options;
108 uint32 m_ditherCount;
109 BLocker m_drawLock;
110 BLocker m_displayLock;
111#if OLD_GLVIEW
112 BView * m_embeddedFront;
113 BView * m_embeddedBack;
114#else
115 void * m_clip_info;
116 void * _reserved1;
117#endif
118 BBitmap * m_ditherMap;
119 BRect m_bounds;
120 int16 * m_errorBuffer[2];
121 uint64 _reserved[8];
122
123 /* Direct Window stuff */
124private:
125 void drawScanline( int x1, int x2, int y, void *data );
126 static void scanlineHandler(struct rasStateRec *state, GLint x1, GLint x2);
127 void lock_draw();
128 void unlock_draw();
129 bool validateView();
130};
131
132
133
134class BGLScreen : public BWindowScreen {
135public:
136 BGLScreen(char *name,
137 ulong screenMode, ulong options,
138 status_t *error, bool debug=false);
139 ~BGLScreen();
140
141 void LockGL();
142 void UnlockGL();
143 void SwapBuffers();
144 virtual void ErrorCallback(GLenum errorCode);
145
146 virtual void ScreenConnected(bool connected);
147 virtual void FrameResized(float width, float height);
148 virtual status_t Perform(perform_code d, void *arg);
149
150 /* The public methods below, for the moment,
151 are just pass-throughs to BWindowScreen */
152
153 virtual status_t Archive(BMessage *data, bool deep = true) const;
154 virtual void MessageReceived(BMessage *msg);
155
156 virtual void Show();
157 virtual void Hide();
158
159 virtual BHandler *ResolveSpecifier(BMessage *msg,
160 int32 index,
161 BMessage *specifier,
162 int32 form,
163 const char *property);
164 virtual status_t GetSupportedSuites(BMessage *data);
165
166private:
167
168 virtual void _ReservedGLScreen1();
169 virtual void _ReservedGLScreen2();
170 virtual void _ReservedGLScreen3();
171 virtual void _ReservedGLScreen4();
172 virtual void _ReservedGLScreen5();
173 virtual void _ReservedGLScreen6();
174 virtual void _ReservedGLScreen7();
175 virtual void _ReservedGLScreen8();
176
177 BGLScreen(const BGLScreen &);
178 BGLScreen &operator=(const BGLScreen &);
179
180 void * m_gc;
181 long m_options;
182 BLocker m_drawLock;
183
184 int32 m_colorSpace;
185 uint32 m_screen_mode;
186
187 uint64 _reserved[7];
188};
189
190
191#endif
192
193
194
195
196