forked from KolibriOS/kolibrios
194 lines
4.7 KiB
C
194 lines
4.7 KiB
C
|
/*
|
||
|
* Copyright 2008-2013, Haiku, Inc. All Rights Reserved.
|
||
|
* Distributed under the terms of the MIT License.
|
||
|
*
|
||
|
* This header defines BGLView, the base class making up
|
||
|
* the Haiku GL Kit.
|
||
|
*
|
||
|
*/
|
||
|
#ifndef BGLVIEW_H
|
||
|
#define BGLVIEW_H
|
||
|
|
||
|
|
||
|
#include <GL/gl.h>
|
||
|
|
||
|
#define BGL_RGB 0
|
||
|
#define BGL_INDEX 1
|
||
|
#define BGL_SINGLE 0
|
||
|
#define BGL_DOUBLE 2
|
||
|
#define BGL_DIRECT 0
|
||
|
#define BGL_INDIRECT 4
|
||
|
#define BGL_ACCUM 8
|
||
|
#define BGL_ALPHA 16
|
||
|
#define BGL_DEPTH 32
|
||
|
#define BGL_OVERLAY 64
|
||
|
#define BGL_UNDERLAY 128
|
||
|
#define BGL_STENCIL 512
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
|
||
|
#include <AppKit.h>
|
||
|
#include <Bitmap.h>
|
||
|
#include <DirectWindow.h>
|
||
|
#include <View.h>
|
||
|
#include <Window.h>
|
||
|
#include <WindowScreen.h>
|
||
|
|
||
|
|
||
|
struct glview_direct_info;
|
||
|
class BGLRenderer;
|
||
|
class GLRendererRoster;
|
||
|
|
||
|
class BGLView : public BView {
|
||
|
public:
|
||
|
BGLView(BRect rect, const char* name,
|
||
|
ulong resizingMode, ulong mode,
|
||
|
ulong options);
|
||
|
virtual ~BGLView();
|
||
|
|
||
|
void LockGL();
|
||
|
void UnlockGL();
|
||
|
void SwapBuffers();
|
||
|
void SwapBuffers(bool vSync);
|
||
|
|
||
|
BView* EmbeddedView(); // deprecated, returns NULL
|
||
|
void* GetGLProcAddress(const char* procName);
|
||
|
|
||
|
status_t CopyPixelsOut(BPoint source, BBitmap *dest);
|
||
|
status_t CopyPixelsIn(BBitmap *source, BPoint dest);
|
||
|
|
||
|
// Mesa's GLenum is uint where Be's ones was ulong!
|
||
|
virtual void ErrorCallback(unsigned long errorCode);
|
||
|
|
||
|
virtual void Draw(BRect updateRect);
|
||
|
virtual void AttachedToWindow();
|
||
|
virtual void AllAttached();
|
||
|
virtual void DetachedFromWindow();
|
||
|
virtual void AllDetached();
|
||
|
|
||
|
virtual void FrameResized(float newWidth, float newHeight);
|
||
|
virtual status_t Perform(perform_code d, void *arg);
|
||
|
|
||
|
virtual status_t Archive(BMessage *data, bool deep = true) const;
|
||
|
|
||
|
virtual void MessageReceived(BMessage *message);
|
||
|
virtual void SetResizingMode(uint32 mode);
|
||
|
|
||
|
virtual void Show();
|
||
|
virtual void Hide();
|
||
|
|
||
|
virtual BHandler* ResolveSpecifier(BMessage *msg, int32 index,
|
||
|
BMessage *specifier, int32 form,
|
||
|
const char *property);
|
||
|
virtual status_t GetSupportedSuites(BMessage *data);
|
||
|
|
||
|
void DirectConnected(direct_buffer_info *info);
|
||
|
void EnableDirectMode(bool enabled);
|
||
|
|
||
|
void* getGC() { return fGc; } // ???
|
||
|
|
||
|
virtual void GetPreferredSize(float* width, float* height);
|
||
|
|
||
|
private:
|
||
|
|
||
|
virtual void _ReservedGLView1();
|
||
|
virtual void _ReservedGLView2();
|
||
|
virtual void _ReservedGLView3();
|
||
|
virtual void _ReservedGLView4();
|
||
|
virtual void _ReservedGLView5();
|
||
|
virtual void _ReservedGLView6();
|
||
|
virtual void _ReservedGLView7();
|
||
|
virtual void _ReservedGLView8();
|
||
|
|
||
|
BGLView(const BGLView &);
|
||
|
BGLView &operator=(const BGLView &);
|
||
|
|
||
|
void _DitherFront();
|
||
|
bool _ConfirmDither();
|
||
|
void _Draw(BRect rect);
|
||
|
void _CallDirectConnected();
|
||
|
|
||
|
void* fGc;
|
||
|
uint32 fOptions;
|
||
|
uint32 fDitherCount;
|
||
|
BLocker fDrawLock;
|
||
|
BLocker fDisplayLock;
|
||
|
glview_direct_info* fClipInfo;
|
||
|
|
||
|
BGLRenderer* fRenderer;
|
||
|
GLRendererRoster* fRoster;
|
||
|
|
||
|
BBitmap* fDitherMap;
|
||
|
BRect fBounds;
|
||
|
int16* fErrorBuffer[2];
|
||
|
uint64 _reserved[8];
|
||
|
|
||
|
void _LockDraw();
|
||
|
void _UnlockDraw();
|
||
|
|
||
|
// BeOS compatibility
|
||
|
private:
|
||
|
BGLView(BRect rect, char* name,
|
||
|
ulong resizingMode, ulong mode,
|
||
|
ulong options);
|
||
|
};
|
||
|
|
||
|
|
||
|
class BGLScreen : public BWindowScreen {
|
||
|
public:
|
||
|
BGLScreen(char* name,
|
||
|
ulong screenMode, ulong options,
|
||
|
status_t *error, bool debug=false);
|
||
|
~BGLScreen();
|
||
|
|
||
|
void LockGL();
|
||
|
void UnlockGL();
|
||
|
void SwapBuffers();
|
||
|
// Mesa's GLenum is uint where Be's ones was ulong!
|
||
|
virtual void ErrorCallback(unsigned long errorCode);
|
||
|
|
||
|
virtual void ScreenConnected(bool connected);
|
||
|
virtual void FrameResized(float width, float height);
|
||
|
virtual status_t Perform(perform_code code, void *arg);
|
||
|
|
||
|
virtual status_t Archive(BMessage *data, bool deep = true) const;
|
||
|
virtual void MessageReceived(BMessage *message);
|
||
|
|
||
|
virtual void Show();
|
||
|
virtual void Hide();
|
||
|
|
||
|
virtual BHandler* ResolveSpecifier(BMessage *message,
|
||
|
int32 index,
|
||
|
BMessage *specifier,
|
||
|
int32 form,
|
||
|
const char *property);
|
||
|
virtual status_t GetSupportedSuites(BMessage *data);
|
||
|
|
||
|
private:
|
||
|
|
||
|
virtual void _ReservedGLScreen1();
|
||
|
virtual void _ReservedGLScreen2();
|
||
|
virtual void _ReservedGLScreen3();
|
||
|
virtual void _ReservedGLScreen4();
|
||
|
virtual void _ReservedGLScreen5();
|
||
|
virtual void _ReservedGLScreen6();
|
||
|
virtual void _ReservedGLScreen7();
|
||
|
virtual void _ReservedGLScreen8();
|
||
|
|
||
|
BGLScreen(const BGLScreen &);
|
||
|
BGLScreen &operator=(const BGLScreen &);
|
||
|
|
||
|
void* fGc;
|
||
|
long fOptions;
|
||
|
BLocker fDrawLock;
|
||
|
|
||
|
int32 fColorSpace;
|
||
|
uint32 fScreenMode;
|
||
|
|
||
|
uint64 _reserved[7];
|
||
|
};
|
||
|
|
||
|
#endif // __cplusplus
|
||
|
|
||
|
#endif // BGLVIEW_H
|