| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 | /*******************************************************************************
/
/	File:		GLView.h
/
/	Copyright 1993-98, Be Incorporated, All Rights Reserved.
/
*******************************************************************************/
#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 <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();
		void		SwapBuffers( bool vSync );
		BView *     EmbeddedView();
		status_t    CopyPixelsOut(BPoint source, BBitmap *dest);
		status_t    CopyPixelsIn(BBitmap *source, BPoint dest);
virtual	void        ErrorCallback(unsigned long errorCode); 	// Mesa's GLenum is uint where Be's ones was ulong!
		
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 );
		void *		getGC()	{ return m_gc; }
		
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;
		void *		m_clip_info;
		void *     	_Unused1;
		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	// __cplusplus
#endif	// BGLVIEW_H
 |