GLView.h revision 848b8605
1/* 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 194