0,0 → 1,196 |
/******************************************************************************* |
/ |
/ File: GLView.h |
/ |
/ Copyright 1993-98, Be Incorporated, All Rights Reserved. |
/ |
*******************************************************************************/ |
|
#ifndef BGLVIEW_H |
#define BGLVIEW_H |
|
// added by Brian Paul: |
#ifndef BGL_RGB |
#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 |
#endif |
|
|
#include <GL/gl.h> |
#include <AppKit.h> |
#include <interface/Window.h> |
#include <interface/View.h> |
#include <interface/Bitmap.h> |
#include <game/WindowScreen.h> |
#include <game/DirectWindow.h> |
|
class BGLView : public BView { |
public: |
|
BGLView(BRect rect, char *name, |
ulong resizingMode, ulong mode, |
ulong options); |
virtual ~BGLView(); |
|
void LockGL(); |
void UnlockGL(); |
void SwapBuffers(); |
|
// Added for Mesa (can't be virtual!) |
void CopySubBufferMESA(GLint x, GLint y, GLuint width, GLuint height); |
|
BView * EmbeddedView(); |
status_t CopyPixelsOut(BPoint source, BBitmap *dest); |
status_t CopyPixelsIn(BBitmap *source, BPoint dest); |
|
virtual void ErrorCallback(GLenum errorCode); |
|
virtual void Draw(BRect updateRect); |
|
virtual void AttachedToWindow(); |
virtual void AllAttached(); |
virtual void DetachedFromWindow(); |
virtual void AllDetached(); |
|
virtual void FrameResized(float width, float height); |
virtual status_t Perform(perform_code d, void *arg); |
|
/* The public methods below, for the moment, |
are just pass-throughs to BView */ |
|
virtual status_t Archive(BMessage *data, bool deep = true) const; |
|
virtual void MessageReceived(BMessage *msg); |
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); |
|
/* New public functions */ |
void DirectConnected( direct_buffer_info *info ); |
void EnableDirectMode( bool enabled ); |
|
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 dither_front(); |
bool confirm_dither(); |
void draw(BRect r); |
|
void * m_gc; |
uint32 m_options; |
uint32 m_ditherCount; |
BLocker m_drawLock; |
BLocker m_displayLock; |
#if OLD_GLVIEW |
BView * m_embeddedFront; |
BView * m_embeddedBack; |
#else |
void * m_clip_info; |
void * _reserved1; |
#endif |
BBitmap * m_ditherMap; |
BRect m_bounds; |
int16 * m_errorBuffer[2]; |
uint64 _reserved[8]; |
|
/* Direct Window stuff */ |
private: |
void drawScanline( int x1, int x2, int y, void *data ); |
static void scanlineHandler(struct rasStateRec *state, GLint x1, GLint x2); |
void lock_draw(); |
void unlock_draw(); |
bool validateView(); |
}; |
|
|
|
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(); |
virtual void ErrorCallback(GLenum errorCode); |
|
virtual void ScreenConnected(bool connected); |
virtual void FrameResized(float width, float height); |
virtual status_t Perform(perform_code d, void *arg); |
|
/* The public methods below, for the moment, |
are just pass-throughs to BWindowScreen */ |
|
virtual status_t Archive(BMessage *data, bool deep = true) const; |
virtual void MessageReceived(BMessage *msg); |
|
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); |
|
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 * m_gc; |
long m_options; |
BLocker m_drawLock; |
|
int32 m_colorSpace; |
uint32 m_screen_mode; |
|
uint64 _reserved[7]; |
}; |
|
|
#endif |
|
|
|
|
|