diff options
Diffstat (limited to 'src/mesa')
| -rw-r--r-- | src/mesa/drivers/beos/GLView.cpp | 1503 | ||||
| -rw-r--r-- | src/mesa/main/Makefile.BeOS-R5 | 452 | ||||
| -rw-r--r-- | src/mesa/x86/gen_matypes.c | 12 | 
3 files changed, 1310 insertions, 657 deletions
| diff --git a/src/mesa/drivers/beos/GLView.cpp b/src/mesa/drivers/beos/GLView.cpp index 56c1b7773b..b96b4e8289 100644 --- a/src/mesa/drivers/beos/GLView.cpp +++ b/src/mesa/drivers/beos/GLView.cpp @@ -1,4 +1,4 @@ -/* $Id: GLView.cpp,v 1.5 2000/11/17 21:01:26 brianp Exp $ */ +/* $Id: GLView.cpp,v 1.6 2002/09/19 16:19:45 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -27,6 +27,9 @@  /*   * $Log: GLView.cpp,v $ + * Revision 1.6  2002/09/19 16:19:45  brianp + * Updated BeOS support (Philippe Houdoin) + *   * Revision 1.5  2000/11/17 21:01:26  brianp   * Minor header file changes to silence warnings.   * Added _mesa_enable_sw_extensions(), called by software-only drivers @@ -70,14 +73,39 @@   * Initial revision   */ - +#include "glheader.h"  #include <assert.h>  #include <stdio.h> -#include <GLView.h> -#include "../src/context.h" + +extern "C" { + +#include "context.h" +#include "colormac.h" +#include "depth.h"  #include "extensions.h" +#include "macros.h" +#include "matrix.h" +#include "mem.h" +#include "mmath.h" +#include "mtypes.h" +#include "texformat.h" +#include "texstore.h" +#include "array_cache/acache.h" +#include "swrast/swrast.h" +#include "swrast_setup/swrast_setup.h" +#include "swrast/s_context.h" +#include "swrast/s_depth.h" +#include "swrast/s_lines.h" +#include "swrast/s_triangle.h" +#include "swrast/s_trispan.h" +#include "tnl/tnl.h" +#include "tnl/t_context.h" +#include "tnl/t_pipeline.h" +}	// extern "C" + +#include <GLView.h>  // BeOS component ordering for B_RGBA32 bitmap format  #define BE_RCOMP 2 @@ -85,6 +113,13 @@  #define BE_BCOMP 0  #define BE_ACOMP 3 +#define PACK_B_RGBA32(color) (color[BCOMP] | (color[GCOMP] << 8) | \ +							(color[RCOMP] << 16) | (color[ACOMP] << 24)) + +#define PACK_B_RGB32(color) (color[BCOMP] | (color[GCOMP] << 8) | \ +							(color[RCOMP] << 16) | 0xFF000000) + +#define FLIP(coord) (LIBGGI_MODE(ggi_ctx->ggi_visual)->visible.y-(coord) - 1)   //  // This object hangs off of the BGLView object.  We have to use @@ -92,317 +127,705 @@  // can't add new members to it).  Instead we just put all our data  // in this class and use BGLVIew::m_gc to point to it.  // -class AuxInfo +class MesaDriver  {  public: -   AuxInfo(); -   ~AuxInfo(); -   void Init(BGLView *bglView, GLcontext *c, GLvisual *v, GLframebuffer *b); +	MesaDriver(); +	~MesaDriver(); +	void Init(BGLView * bglview, GLcontext * c, GLvisual * v, GLframebuffer * b); -   void MakeCurrent(); -   void SwapBuffers() const; -   void CopySubBuffer(GLint x, GLint y, GLuint width, GLuint height) const; +	void LockGL(); +	void UnlockGL(); +	void SwapBuffers() const; +	void CopySubBuffer(GLint x, GLint y, GLuint width, GLuint height) const; +	void Draw(BRect updateRect) const;  private: -   AuxInfo(const AuxInfo &rhs);  // copy constructor illegal -   AuxInfo &operator=(const AuxInfo &rhs);  // assignment oper. illegal +	MesaDriver(const MesaDriver &rhs);  // copy constructor illegal +	MesaDriver &operator=(const MesaDriver &rhs);  // assignment oper. illegal -   GLcontext *mContext; -   GLvisual *mVisual; -   GLframebuffer *mBuffer; +	GLcontext * 	m_glcontext; +	GLvisual * 		m_glvisual; +	GLframebuffer *	m_glframebuffer; -   BGLView *mBGLView; -   BBitmap *mBitmap; +	BGLView *		m_bglview; +	BBitmap *		m_bitmap; -   GLubyte mClearColor[4];  // buffer clear color -   GLuint mClearIndex;      // buffer clear color index -   GLint mBottom;           // used for flipping Y coords -   GLint mWidth, mHeight;   // size of buffer - -   // Mesa device driver functions -   static void UpdateState(GLcontext *ctx); -   static void ClearIndex(GLcontext *ctx, GLuint index); -   static void ClearColor(GLcontext *ctx, GLubyte r, GLubyte g, -                          GLubyte b, GLubyte a); -   static GLbitfield Clear(GLcontext *ctx, GLbitfield mask, +	GLubyte 		m_clear_color[4];  // buffer clear color +	GLuint 			m_clear_index;      // buffer clear color index +	GLint 			m_bottom;           // used for flipping Y coords +	GLuint 			m_width; +	GLuint			m_height; +	 +   // Mesa Device Driver functions +   static void 		UpdateState(GLcontext *ctx, GLuint new_state); +   static void 		ClearIndex(GLcontext *ctx, GLuint index); +   static void 		ClearColor(GLcontext *ctx, const GLchan color[4]); +   static void 		Clear(GLcontext *ctx, GLbitfield mask,                                  GLboolean all, GLint x, GLint y,                                  GLint width, GLint height); -   static void ClearFront(GLcontext *ctx, GLboolean all, GLint x, GLint y, +   static void 		ClearFront(GLcontext *ctx, GLboolean all, GLint x, GLint y,                            GLint width, GLint height); -   static void ClearBack(GLcontext *ctx, GLboolean all, GLint x, GLint y, +   static void 		ClearBack(GLcontext *ctx, GLboolean all, GLint x, GLint y,                           GLint width, GLint height); -   static void Index(GLcontext *ctx, GLuint index); -   static void Color(GLcontext *ctx, GLubyte r, GLubyte g, +   static void 		Index(GLcontext *ctx, GLuint index); +   static void 		Color(GLcontext *ctx, GLubyte r, GLubyte g,                       GLubyte b, GLubyte a); -   static GLboolean SetDrawBuffer(GLcontext *ctx, GLenum mode); -   static void SetReadBuffer(GLcontext *ctx, GLframebuffer *colorBuffer, +   static void 		SetBuffer(GLcontext *ctx, GLframebuffer *colorBuffer,                               GLenum mode); -   static void GetBufferSize(GLcontext *ctgx, GLuint *width, +   static void 		GetBufferSize(GLframebuffer * framebuffer, GLuint *width,                               GLuint *height); -   static const GLubyte *GetString(GLcontext *ctx, GLenum name); +   static const GLubyte *	GetString(GLcontext *ctx, GLenum name);     // Front-buffer functions -   static void WriteRGBASpanFront(const GLcontext *ctx, GLuint n, +   static void 		WriteRGBASpanFront(const GLcontext *ctx, GLuint n,                                    GLint x, GLint y,                                    CONST GLubyte rgba[][4],                                    const GLubyte mask[]); -   static void WriteRGBSpanFront(const GLcontext *ctx, GLuint n, +   static void 		WriteRGBSpanFront(const GLcontext *ctx, GLuint n,                                   GLint x, GLint y,                                   CONST GLubyte rgba[][3],                                   const GLubyte mask[]); -   static void WriteMonoRGBASpanFront(const GLcontext *ctx, GLuint n, +   static void 		WriteMonoRGBASpanFront(const GLcontext *ctx, GLuint n,                                        GLint x, GLint y,                                        const GLchan color[4],                                        const GLubyte mask[]); -   static void WriteRGBAPixelsFront(const GLcontext *ctx, GLuint n, +   static void 		WriteRGBAPixelsFront(const GLcontext *ctx, GLuint n,                                      const GLint x[], const GLint y[],                                      CONST GLubyte rgba[][4],                                      const GLubyte mask[]); -   static void WriteMonoRGBAPixelsFront(const GLcontext *ctx, GLuint n, +   static void 		WriteMonoRGBAPixelsFront(const GLcontext *ctx, GLuint n,                                          const GLint x[], const GLint y[],                                          const GLchan color[4],                                          const GLubyte mask[]); -   static void WriteCI32SpanFront(const GLcontext *ctx, GLuint n, +   static void 		WriteCI32SpanFront(const GLcontext *ctx, GLuint n,                                    GLint x, GLint y,                                    const GLuint index[], const GLubyte mask[]); -   static void WriteCI8SpanFront(const GLcontext *ctx, GLuint n, +   static void 		WriteCI8SpanFront(const GLcontext *ctx, GLuint n,                                   GLint x, GLint y,                                   const GLubyte index[], const GLubyte mask[]); -   static void WriteMonoCISpanFront(const GLcontext *ctx, GLuint n, +   static void 		WriteMonoCISpanFront(const GLcontext *ctx, GLuint n,                                      GLint x, GLint y,                                      GLuint colorIndex, const GLubyte mask[]); -   static void WriteCI32PixelsFront(const GLcontext *ctx, +   static void 		WriteCI32PixelsFront(const GLcontext *ctx,                                      GLuint n, const GLint x[], const GLint y[],                                      const GLuint index[], const GLubyte mask[]); -   static void WriteMonoCIPixelsFront(const GLcontext *ctx, GLuint n, +   static void 		WriteMonoCIPixelsFront(const GLcontext *ctx, GLuint n,                                        const GLint x[], const GLint y[],                                        GLuint colorIndex, const GLubyte mask[]); -   static void ReadCI32SpanFront(const GLcontext *ctx, +   static void 		ReadCI32SpanFront(const GLcontext *ctx,                                   GLuint n, GLint x, GLint y, GLuint index[]); -   static void ReadRGBASpanFront(const GLcontext *ctx, GLuint n, +   static void 		ReadRGBASpanFront(const GLcontext *ctx, GLuint n,                                   GLint x, GLint y,                                   GLubyte rgba[][4]); -   static void ReadCI32PixelsFront(const GLcontext *ctx, +   static void 		ReadCI32PixelsFront(const GLcontext *ctx,                                     GLuint n, const GLint x[], const GLint y[],                                     GLuint indx[], const GLubyte mask[]); -   static void ReadRGBAPixelsFront(const GLcontext *ctx, +   static void 		ReadRGBAPixelsFront(const GLcontext *ctx,                                     GLuint n, const GLint x[], const GLint y[],                                     GLubyte rgba[][4], const GLubyte mask[]);     // Back buffer functions -   static void WriteRGBASpanBack(const GLcontext *ctx, GLuint n, +   static void 		WriteRGBASpanBack(const GLcontext *ctx, GLuint n,                                    GLint x, GLint y,                                    CONST GLubyte rgba[][4],                                    const GLubyte mask[]); -   static void WriteRGBSpanBack(const GLcontext *ctx, GLuint n, +   static void 		WriteRGBSpanBack(const GLcontext *ctx, GLuint n,                                   GLint x, GLint y,                                   CONST GLubyte rgba[][3],                                   const GLubyte mask[]); -   static void WriteMonoRGBASpanBack(const GLcontext *ctx, GLuint n, +   static void 		WriteMonoRGBASpanBack(const GLcontext *ctx, GLuint n,                                       GLint x, GLint y,                                       const GLchan color[4],                                       const GLubyte mask[]); -   static void WriteRGBAPixelsBack(const GLcontext *ctx, GLuint n, +   static void 		WriteRGBAPixelsBack(const GLcontext *ctx, GLuint n,                                     const GLint x[], const GLint y[],                                     CONST GLubyte rgba[][4],                                     const GLubyte mask[]); -   static void WriteMonoRGBAPixelsBack(const GLcontext *ctx, GLuint n, +   static void 		WriteMonoRGBAPixelsBack(const GLcontext *ctx, GLuint n,                                         const GLint x[], const GLint y[],                                         const GLchan color[4],                                         const GLubyte mask[]); -   static void WriteCI32SpanBack(const GLcontext *ctx, GLuint n, +   static void 		WriteCI32SpanBack(const GLcontext *ctx, GLuint n,                                   GLint x, GLint y,                                   const GLuint index[], const GLubyte mask[]); -   static void WriteCI8SpanBack(const GLcontext *ctx, GLuint n, GLint x, GLint y, +   static void 		WriteCI8SpanBack(const GLcontext *ctx, GLuint n, GLint x, GLint y,                                  const GLubyte index[], const GLubyte mask[]); -   static void WriteMonoCISpanBack(const GLcontext *ctx, GLuint n, +   static void 		WriteMonoCISpanBack(const GLcontext *ctx, GLuint n,                                     GLint x, GLint y, GLuint colorIndex,                                     const GLubyte mask[]); -   static void WriteCI32PixelsBack(const GLcontext *ctx, +   static void 		WriteCI32PixelsBack(const GLcontext *ctx,                                     GLuint n, const GLint x[], const GLint y[],                                     const GLuint index[], const GLubyte mask[]); -   static void WriteMonoCIPixelsBack(const GLcontext *ctx, +   static void 		WriteMonoCIPixelsBack(const GLcontext *ctx,                                       GLuint n, const GLint x[], const GLint y[],                                       GLuint colorIndex, const GLubyte mask[]); -   static void ReadCI32SpanBack(const GLcontext *ctx, +   static void 		ReadCI32SpanBack(const GLcontext *ctx,                                  GLuint n, GLint x, GLint y, GLuint index[]); -   static void ReadRGBASpanBack(const GLcontext *ctx, GLuint n, +   static void 		ReadRGBASpanBack(const GLcontext *ctx, GLuint n,                                  GLint x, GLint y,                                  GLubyte rgba[][4]); -   static void ReadCI32PixelsBack(const GLcontext *ctx, +   static void 		ReadCI32PixelsBack(const GLcontext *ctx,                                    GLuint n, const GLint x[], const GLint y[],                                    GLuint indx[], const GLubyte mask[]); -   static void ReadRGBAPixelsBack(const GLcontext *ctx, +   static void 		ReadRGBAPixelsBack(const GLcontext *ctx,                                    GLuint n, const GLint x[], const GLint y[],                                    GLubyte rgba[][4], const GLubyte mask[]);  }; +//------------------------------------------------------------------ +// Public interface methods +//------------------------------------------------------------------ -AuxInfo::AuxInfo() +// +// Input:  rect - initial rectangle +//         name - window name +//         resizingMode - example: B_FOLLOW_NONE +//         mode - usually 0 ? +//         options - Bitwise-OR of BGL_* tokens +// +BGLView::BGLView(BRect rect, char *name, +                 ulong resizingMode, ulong mode, +                 ulong options) +   :BView(rect, name, resizingMode, mode | B_WILL_DRAW | B_FRAME_EVENTS) //  | B_FULL_UPDATE_ON_RESIZE)  { -   mContext = NULL; -   mVisual = NULL; -   mBuffer = NULL; -   mBGLView = NULL; -   mBitmap = NULL; -   mClearColor[BE_RCOMP] = 0; -   mClearColor[BE_GCOMP] = 0; -   mClearColor[BE_BCOMP] = 0; -   mClearColor[BE_ACOMP] = 0; -   mClearIndex = 0; +   const GLboolean rgbFlag = (options & BGL_RGB) == BGL_RGB; +   const GLboolean alphaFlag = (options & BGL_ALPHA) == BGL_ALPHA; +   const GLboolean dblFlag = (options & BGL_DOUBLE) == BGL_DOUBLE; +   const GLboolean stereoFlag = false; +   const GLint depth = (options & BGL_DEPTH) ? 16 : 0; +   const GLint stencil = (options & BGL_STENCIL) ? 8 : 0; +   const GLint accum = (options & BGL_ACCUM) ? 16 : 0; +   const GLint index = (options & BGL_INDEX) ? 32 : 0; +   const GLint red = (options & BGL_RGB) ? 8 : 0; +   const GLint green = (options & BGL_RGB) ? 8 : 0; +   const GLint blue = (options & BGL_RGB) ? 8 : 0; +   const GLint alpha = (options & BGL_RGB) ? 8 : 0; + +   if (!rgbFlag) { +      fprintf(stderr, "Mesa Warning: color index mode not supported\n"); +   } + +   // Allocate auxiliary data object +   MesaDriver * md = new MesaDriver; + +   // examine option flags and create gl_context struct +   GLvisual * visual = _mesa_create_visual( rgbFlag, +                                            dblFlag, +                                            stereoFlag, +                                            red, green, blue, alpha, +                                            index, +                                            depth, +                                            stencil, +                                            accum, accum, accum, accum, +                                            1 +                                            ); + +	// create core context +	__GLimports imports; +	_mesa_init_default_imports(&imports, md); +	GLcontext * ctx = _mesa_create_context( visual, NULL, &imports); + + +   // create core framebuffer +   GLframebuffer * buffer = _mesa_create_framebuffer(visual, +                                              depth > 0 ? GL_TRUE : GL_FALSE, +                                              stencil > 0 ? GL_TRUE: GL_FALSE, +                                              accum > 0 ? GL_TRUE : GL_FALSE, +                                              alphaFlag +                                              ); + +   _mesa_enable_sw_extensions(ctx); +   _mesa_enable_1_3_extensions(ctx); + +   /* Initialize the software rasterizer and helper modules. +       */ + +	_swrast_CreateContext(ctx); +	_ac_CreateContext(ctx); +	_tnl_CreateContext(ctx); +	_swsetup_CreateContext(ctx); +	 +	_swsetup_Wakeup(ctx); + +   md->Init(this, ctx, visual, buffer ); + +   // Hook aux data into BGLView object +   m_gc = md;  } -AuxInfo::~AuxInfo() +BGLView::~BGLView()  { +   printf("BGLView destructor\n"); +   MesaDriver * md = (MesaDriver *) m_gc; +   assert(md); +   delete md; +} -   _mesa_destroy_visual(mVisual); -   _mesa_destroy_framebuffer(mBuffer); -   _mesa_destroy_context(mContext); +void BGLView::LockGL() +{ +   MesaDriver * md = (MesaDriver *) m_gc; +   assert(md); +   md->LockGL();  } +void BGLView::UnlockGL() +{ +   MesaDriver * md = (MesaDriver *) m_gc; +   assert(md); +   md->UnlockGL(); +} -void AuxInfo::Init(BGLView *bglView, GLcontext *c, GLvisual *v, GLframebuffer *b) +void BGLView::SwapBuffers()  { -   mBGLView = bglView; -   mContext = c; -   mVisual = v; -   mBuffer = b; +   MesaDriver * md = (MesaDriver *) m_gc; +   assert(md); +   md->SwapBuffers();  } -void AuxInfo::MakeCurrent() +void BGLView::CopySubBufferMESA(GLint x, GLint y, GLuint width, GLuint height)  { -   UpdateState(mContext); -   _mesa_make_current(mContext, mBuffer); +   MesaDriver * md = (MesaDriver *) m_gc; +   assert(md); +   md->CopySubBuffer(x, y, width, height);  } -void AuxInfo::SwapBuffers() const +BView *	BGLView::EmbeddedView()  { -   if (mBitmap) { -      mBGLView->DrawBitmap(mBitmap, BPoint(0, 0)); -   } +   // XXX to do +	return NULL; +} + +status_t BGLView::CopyPixelsOut(BPoint source, BBitmap *dest) +{ +   // XXX to do +	printf("BGLView::CopyPixelsOut() not implemented yet!\n"); +	return B_UNSUPPORTED; +} + + +status_t BGLView::CopyPixelsIn(BBitmap *source, BPoint dest) +{ +   // XXX to do +	printf("BGLView::CopyPixelsIn() not implemented yet!\n"); +	return B_UNSUPPORTED; +} + +void BGLView::ErrorCallback(unsigned long errorCode) // GLenum errorCode) +{ +   // XXX to do +	printf("BGLView::ErrorCallback() not implemented yet!\n"); +	return; +} + +void BGLView::Draw(BRect updateRect) +{ +   // printf("BGLView::Draw()\n"); +   MesaDriver * md = (MesaDriver *) m_gc; +   assert(md); +   md->Draw(updateRect); +} + +void BGLView::AttachedToWindow() +{ +   BView::AttachedToWindow(); + +   // don't paint window background white when resized +   SetViewColor(B_TRANSPARENT_32_BIT); +} + +void BGLView::AllAttached() +{ +   BView::AllAttached(); +//   printf("BGLView AllAttached\n"); +} + +void BGLView::DetachedFromWindow() +{ +   BView::DetachedFromWindow(); +} + +void BGLView::AllDetached() +{ +   BView::AllDetached(); +//   printf("BGLView AllDetached"); +} + +void BGLView::FrameResized(float width, float height) +{ +   return BView::FrameResized(width, height); +} + +status_t BGLView::Perform(perform_code d, void *arg) +{ +   return BView::Perform(d, arg); +} + + +status_t BGLView::Archive(BMessage *data, bool deep) const +{ +   return BView::Archive(data, deep); +} + +void BGLView::MessageReceived(BMessage *msg) +{ +   BView::MessageReceived(msg); +} + +void BGLView::SetResizingMode(uint32 mode) +{ +   BView::SetResizingMode(mode); +} + +void BGLView::Show() +{ +//   printf("BGLView Show\n"); +   BView::Show(); +} + +void BGLView::Hide() +{ +//   printf("BGLView Hide\n"); +   BView::Hide(); +} + +BHandler *BGLView::ResolveSpecifier(BMessage *msg, int32 index, +                                    BMessage *specifier, int32 form, +                                    const char *property) +{ +   return BView::ResolveSpecifier(msg, index, specifier, form, property); +} + +status_t BGLView::GetSupportedSuites(BMessage *data) +{ +   return BView::GetSupportedSuites(data); +} + +void BGLView::DirectConnected( direct_buffer_info *info ) +{ +   // XXX to do +} + +void BGLView::EnableDirectMode( bool enabled ) +{ +   // XXX to do +} + + + +//---- private methods ---------- + +void BGLView::_ReservedGLView1() {} +void BGLView::_ReservedGLView2() {} +void BGLView::_ReservedGLView3() {} +void BGLView::_ReservedGLView4() {} +void BGLView::_ReservedGLView5() {} +void BGLView::_ReservedGLView6() {} +void BGLView::_ReservedGLView7() {} +void BGLView::_ReservedGLView8() {} + +#if 0 +BGLView::BGLView(const BGLView &v) +	: BView(v) +{ +   // XXX not sure how this should work +   printf("Warning BGLView::copy constructor not implemented\n");  } +#endif -void AuxInfo::CopySubBuffer(GLint x, GLint y, GLuint width, GLuint height) const +BGLView &BGLView::operator=(const BGLView &v) +{ +   printf("Warning BGLView::operator= not implemented\n"); +	return *this; +} + +void BGLView::dither_front() +{ +   // no-op +} + +bool BGLView::confirm_dither() +{ +   // no-op +   return false; +} + +void BGLView::draw(BRect r) +{ +   // XXX no-op ??? +} + +/* Direct Window stuff */ +void BGLView::drawScanline( int x1, int x2, int y, void *data ) +{ +   // no-op +} + +void BGLView::scanlineHandler(struct rasStateRec *state, +                              GLint x1, GLint x2) +{ +   // no-op +} + +void BGLView::lock_draw() +{ +   // no-op +} + +void BGLView::unlock_draw()  { -   if (mBitmap) { +   // no-op +} + +bool BGLView::validateView() +{ +   // no-op +   return true; +} + +// #pragma mark - + +MesaDriver::MesaDriver() +{ +   m_glcontext 		= NULL; +   m_glvisual		= NULL; +   m_glframebuffer 	= NULL; +   m_bglview 		= NULL; +   m_bitmap 		= NULL; + +   m_clear_color[BE_RCOMP] = 0; +   m_clear_color[BE_GCOMP] = 0; +   m_clear_color[BE_BCOMP] = 0; +   m_clear_color[BE_ACOMP] = 0; + +   m_clear_index = 0; +} + + +MesaDriver::~MesaDriver() +{ +   _mesa_destroy_visual(m_glvisual); +   _mesa_destroy_framebuffer(m_glframebuffer); +   _mesa_destroy_context(m_glcontext); + +} + + +void MesaDriver::Init(BGLView * bglview, GLcontext * ctx, GLvisual * visual, GLframebuffer * framebuffer) +{ +	m_bglview 		= bglview; +	m_glcontext 	= ctx; +	m_glvisual 		= visual; +	m_glframebuffer = framebuffer; + +	MesaDriver * md = (MesaDriver *) ctx->DriverCtx; +	struct swrast_device_driver * swdd = _swrast_GetDeviceDriverReference( ctx ); +	TNLcontext * tnl = TNL_CONTEXT(ctx); + +	assert(md->m_glcontext == ctx ); + +	ctx->Driver.GetString = MesaDriver::GetString; +	ctx->Driver.UpdateState = MesaDriver::UpdateState; +	ctx->Driver.GetBufferSize = MesaDriver::GetBufferSize; +	ctx->Driver.ResizeBuffers = _swrast_alloc_buffers; + +	ctx->Driver.Accum = _swrast_Accum; +	ctx->Driver.Bitmap = _swrast_Bitmap; +	ctx->Driver.ClearIndex = MesaDriver::ClearIndex; +	ctx->Driver.ClearColor = MesaDriver::ClearColor; +	ctx->Driver.Clear = MesaDriver::Clear; +	ctx->Driver.CopyPixels = _swrast_CopyPixels; +   	ctx->Driver.DrawPixels = _swrast_DrawPixels; +   	ctx->Driver.ReadPixels = _swrast_ReadPixels; + +   	ctx->Driver.ChooseTextureFormat = _mesa_choose_tex_format; +   	ctx->Driver.TexImage1D = _mesa_store_teximage1d; +   	ctx->Driver.TexImage2D = _mesa_store_teximage2d; +   	ctx->Driver.TexImage3D = _mesa_store_teximage3d; +   	ctx->Driver.TexSubImage1D = _mesa_store_texsubimage1d; +   	ctx->Driver.TexSubImage2D = _mesa_store_texsubimage2d; +   	ctx->Driver.TexSubImage3D = _mesa_store_texsubimage3d; +   	ctx->Driver.TestProxyTexImage = _mesa_test_proxy_teximage; + +   	ctx->Driver.CopyTexImage1D = _swrast_copy_teximage1d; +   	ctx->Driver.CopyTexImage2D = _swrast_copy_teximage2d; +   	ctx->Driver.CopyTexSubImage1D = _swrast_copy_texsubimage1d; +   	ctx->Driver.CopyTexSubImage2D = _swrast_copy_texsubimage2d; +   	ctx->Driver.CopyTexSubImage3D = _swrast_copy_texsubimage3d; +   	ctx->Driver.CopyColorTable = _swrast_CopyColorTable; +   	ctx->Driver.CopyColorSubTable = _swrast_CopyColorSubTable; +   	ctx->Driver.CopyConvolutionFilter1D = _swrast_CopyConvolutionFilter1D; +   	ctx->Driver.CopyConvolutionFilter2D = _swrast_CopyConvolutionFilter2D; + +   	ctx->Driver.BaseCompressedTexFormat = _mesa_base_compressed_texformat; +   	ctx->Driver.CompressedTextureSize = _mesa_compressed_texture_size; +   	ctx->Driver.GetCompressedTexImage = _mesa_get_compressed_teximage; + +	swdd->SetBuffer = MesaDriver::SetBuffer; + +	tnl->Driver.RunPipeline = _tnl_run_pipeline; + +	_swsetup_Wakeup(ctx); +} + + +void MesaDriver::LockGL() +{ +	m_bglview->LockLooper(); + +   UpdateState(m_glcontext, 0); +   _mesa_make_current(m_glcontext, m_glframebuffer); +} + + +void MesaDriver::UnlockGL() +{ +	m_bglview->UnlockLooper(); +   // Could call _mesa_make_current(NULL, NULL) but it would just +   // hinder performance +} + + +void MesaDriver::SwapBuffers() const +{ +	// _mesa_swap_buffers(); + +	if (m_bitmap) { +		m_bglview->LockLooper(); +		m_bglview->DrawBitmap(m_bitmap, BPoint(0, 0)); +		m_bglview->UnlockLooper(); +	}; +} + + +void MesaDriver::CopySubBuffer(GLint x, GLint y, GLuint width, GLuint height) const +{ +   if (m_bitmap) {        // Source bitmap and view's bitmap are same size.        // Source and dest rectangle are the same.        // Note (x,y) = (0,0) is the lower-left corner, have to flip Y        BRect srcAndDest;        srcAndDest.left = x;        srcAndDest.right = x + width - 1; -      srcAndDest.bottom = mBottom - y; +      srcAndDest.bottom = m_bottom - y;        srcAndDest.top = srcAndDest.bottom - height + 1; -      mBGLView->DrawBitmap(mBitmap, srcAndDest, srcAndDest); +      m_bglview->DrawBitmap(m_bitmap, srcAndDest, srcAndDest);     }  } -void AuxInfo::UpdateState( GLcontext *ctx ) +void MesaDriver::Draw(BRect updateRect) const  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; +   if (m_bitmap) +      m_bglview->DrawBitmap(m_bitmap, updateRect, updateRect); +} -   assert(aux->mContext == ctx ); -   ctx->Driver.UpdateState = AuxInfo::UpdateState; -   ctx->Driver.SetDrawBuffer = AuxInfo::SetDrawBuffer; -   ctx->Driver.SetReadBuffer = AuxInfo::SetReadBuffer; -   ctx->Driver.ClearIndex = AuxInfo::ClearIndex; -   ctx->Driver.ClearColor = AuxInfo::ClearColor; -   ctx->Driver.GetBufferSize = AuxInfo::GetBufferSize; -   ctx->Driver.GetString = AuxInfo::GetString; -   ctx->Driver.Clear = AuxInfo::Clear; +void MesaDriver::UpdateState( GLcontext *ctx, GLuint new_state ) +{ +	struct swrast_device_driver *	swdd = _swrast_GetDeviceDriverReference( ctx ); -   if (ctx->Color.DrawBuffer == GL_FRONT) { +	_swrast_InvalidateState( ctx, new_state ); +	_swsetup_InvalidateState( ctx, new_state ); +	_ac_InvalidateState( ctx, new_state ); +	_tnl_InvalidateState( ctx, new_state ); + +	if (ctx->Color.DrawBuffer == GL_FRONT) {        /* read/write front buffer */ -      ctx->Driver.WriteRGBASpan = AuxInfo::WriteRGBASpanFront; -      ctx->Driver.WriteRGBSpan = AuxInfo::WriteRGBSpanFront; -      ctx->Driver.WriteRGBAPixels = AuxInfo::WriteRGBAPixelsFront; -      ctx->Driver.WriteMonoRGBASpan = AuxInfo::WriteMonoRGBASpanFront; -      ctx->Driver.WriteMonoRGBAPixels = AuxInfo::WriteMonoRGBAPixelsFront; -      ctx->Driver.WriteCI32Span = AuxInfo::WriteCI32SpanFront; -      ctx->Driver.WriteCI8Span = AuxInfo::WriteCI8SpanFront; -      ctx->Driver.WriteMonoCISpan = AuxInfo::WriteMonoCISpanFront; -      ctx->Driver.WriteCI32Pixels = AuxInfo::WriteCI32PixelsFront; -      ctx->Driver.WriteMonoCIPixels = AuxInfo::WriteMonoCIPixelsFront; -      ctx->Driver.ReadRGBASpan = AuxInfo::ReadRGBASpanFront; -      ctx->Driver.ReadRGBAPixels = AuxInfo::ReadRGBAPixelsFront; -      ctx->Driver.ReadCI32Span = AuxInfo::ReadCI32SpanFront; -      ctx->Driver.ReadCI32Pixels = AuxInfo::ReadCI32PixelsFront; +      swdd->WriteRGBASpan = MesaDriver::WriteRGBASpanFront; +      swdd->WriteRGBSpan = MesaDriver::WriteRGBSpanFront; +      swdd->WriteRGBAPixels = MesaDriver::WriteRGBAPixelsFront; +      swdd->WriteMonoRGBASpan = MesaDriver::WriteMonoRGBASpanFront; +      swdd->WriteMonoRGBAPixels = MesaDriver::WriteMonoRGBAPixelsFront; +      swdd->WriteCI32Span = MesaDriver::WriteCI32SpanFront; +      swdd->WriteCI8Span = MesaDriver::WriteCI8SpanFront; +      swdd->WriteMonoCISpan = MesaDriver::WriteMonoCISpanFront; +      swdd->WriteCI32Pixels = MesaDriver::WriteCI32PixelsFront; +      swdd->WriteMonoCIPixels = MesaDriver::WriteMonoCIPixelsFront; +      swdd->ReadRGBASpan = MesaDriver::ReadRGBASpanFront; +      swdd->ReadRGBAPixels = MesaDriver::ReadRGBAPixelsFront; +      swdd->ReadCI32Span = MesaDriver::ReadCI32SpanFront; +      swdd->ReadCI32Pixels = MesaDriver::ReadCI32PixelsFront;     }     else {        /* read/write back buffer */ -      ctx->Driver.WriteRGBASpan = AuxInfo::WriteRGBASpanBack; -      ctx->Driver.WriteRGBSpan = AuxInfo::WriteRGBSpanBack; -      ctx->Driver.WriteRGBAPixels = AuxInfo::WriteRGBAPixelsBack; -      ctx->Driver.WriteMonoRGBASpan = AuxInfo::WriteMonoRGBASpanBack; -      ctx->Driver.WriteMonoRGBAPixels = AuxInfo::WriteMonoRGBAPixelsBack; -      ctx->Driver.WriteCI32Span = AuxInfo::WriteCI32SpanBack; -      ctx->Driver.WriteCI8Span = AuxInfo::WriteCI8SpanBack; -      ctx->Driver.WriteMonoCISpan = AuxInfo::WriteMonoCISpanBack; -      ctx->Driver.WriteCI32Pixels = AuxInfo::WriteCI32PixelsBack; -      ctx->Driver.WriteMonoCIPixels = AuxInfo::WriteMonoCIPixelsBack; -      ctx->Driver.ReadRGBASpan = AuxInfo::ReadRGBASpanBack; -      ctx->Driver.ReadRGBAPixels = AuxInfo::ReadRGBAPixelsBack; -      ctx->Driver.ReadCI32Span = AuxInfo::ReadCI32SpanBack; -      ctx->Driver.ReadCI32Pixels = AuxInfo::ReadCI32PixelsBack; +      swdd->WriteRGBASpan = MesaDriver::WriteRGBASpanBack; +      swdd->WriteRGBSpan = MesaDriver::WriteRGBSpanBack; +      swdd->WriteRGBAPixels = MesaDriver::WriteRGBAPixelsBack; +      swdd->WriteMonoRGBASpan = MesaDriver::WriteMonoRGBASpanBack; +      swdd->WriteMonoRGBAPixels = MesaDriver::WriteMonoRGBAPixelsBack; +      swdd->WriteCI32Span = MesaDriver::WriteCI32SpanBack; +      swdd->WriteCI8Span = MesaDriver::WriteCI8SpanBack; +      swdd->WriteMonoCISpan = MesaDriver::WriteMonoCISpanBack; +      swdd->WriteCI32Pixels = MesaDriver::WriteCI32PixelsBack; +      swdd->WriteMonoCIPixels = MesaDriver::WriteMonoCIPixelsBack; +      swdd->ReadRGBASpan = MesaDriver::ReadRGBASpanBack; +      swdd->ReadRGBAPixels = MesaDriver::ReadRGBAPixelsBack; +      swdd->ReadCI32Span = MesaDriver::ReadCI32SpanBack; +      swdd->ReadCI32Pixels = MesaDriver::ReadCI32PixelsBack;      }  } -void AuxInfo::ClearIndex(GLcontext *ctx, GLuint index) +void MesaDriver::ClearIndex(GLcontext *ctx, GLuint index)  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; -   aux->mClearIndex = index; +   MesaDriver *md = (MesaDriver *) ctx->DriverCtx; +   md->m_clear_index = index;  } -void AuxInfo::ClearColor(GLcontext *ctx, GLubyte r, GLubyte g, -                         GLubyte b, GLubyte a) +void MesaDriver::ClearColor(GLcontext *ctx, const GLchan color[4]) +						// GLubyte r, GLubyte g, +                        // GLubyte b, GLubyte a)  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; -   aux->mClearColor[BE_RCOMP] = r; -   aux->mClearColor[BE_GCOMP] = g; -   aux->mClearColor[BE_BCOMP] = b; -   aux->mClearColor[BE_ACOMP] = a; -   assert(aux->mBGLView); +   MesaDriver *md = (MesaDriver *) ctx->DriverCtx; +   md->m_clear_color[BE_RCOMP] = color[0]; +   md->m_clear_color[BE_GCOMP] = color[1]; +   md->m_clear_color[BE_BCOMP] = color[2]; +   md->m_clear_color[BE_ACOMP] = color[3]; +   assert(md->m_bglview);  } -GLbitfield AuxInfo::Clear(GLcontext *ctx, GLbitfield mask, +void MesaDriver::Clear(GLcontext *ctx, GLbitfield mask,                                 GLboolean all, GLint x, GLint y,                                 GLint width, GLint height)  {     if (mask & DD_FRONT_LEFT_BIT) -      ClearFront(ctx, all, x, y, width, height); +		ClearFront(ctx, all, x, y, width, height);     if (mask & DD_BACK_LEFT_BIT) -      ClearBack(ctx, all, x, y, width, height); -   return mask & ~(DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT); +		ClearBack(ctx, all, x, y, width, height); + +	mask &= ~(DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT); +	if (mask) +		_swrast_Clear( ctx, mask, all, x, y, width, height ); + +   return;  } -void AuxInfo::ClearFront(GLcontext *ctx, +void MesaDriver::ClearFront(GLcontext *ctx,                           GLboolean all, GLint x, GLint y,                           GLint width, GLint height)  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; -   BGLView *bglview = aux->mBGLView; +   MesaDriver *md = (MesaDriver *) ctx->DriverCtx; +   BGLView *bglview = md->m_bglview;     assert(bglview); -   bglview->SetHighColor(aux->mClearColor[BE_RCOMP], -                         aux->mClearColor[BE_GCOMP], -                         aux->mClearColor[BE_BCOMP], -                         aux->mClearColor[BE_ACOMP]); -   bglview->SetLowColor(aux->mClearColor[BE_RCOMP], -                        aux->mClearColor[BE_GCOMP], -                        aux->mClearColor[BE_BCOMP], -                        aux->mClearColor[BE_ACOMP]); +   bglview->SetHighColor(md->m_clear_color[BE_RCOMP], +                         md->m_clear_color[BE_GCOMP], +                         md->m_clear_color[BE_BCOMP], +                         md->m_clear_color[BE_ACOMP]); +   bglview->SetLowColor(md->m_clear_color[BE_RCOMP], +                        md->m_clear_color[BE_GCOMP], +                        md->m_clear_color[BE_BCOMP], +                        md->m_clear_color[BE_ACOMP]);     if (all) {        BRect b = bglview->Bounds();        bglview->FillRect(b); @@ -412,40 +835,40 @@ void AuxInfo::ClearFront(GLcontext *ctx,        BRect b;        b.left = x;        b.right = x + width; -      b.bottom = aux->mHeight - y - 1; +      b.bottom = md->m_height - y - 1;        b.top = b.bottom - height;        bglview->FillRect(b);     }     // restore drawing color  #if 0 -   bglview->SetHighColor(aux->mColor[BE_RCOMP], -                         aux->mColor[BE_GCOMP], -                         aux->mColor[BE_BCOMP], -                         aux->mColor[BE_ACOMP]); -   bglview->SetLowColor(aux->mColor[BE_RCOMP], -                        aux->mColor[BE_GCOMP], -                        aux->mColor[BE_BCOMP], -                        aux->mColor[BE_ACOMP]); +   bglview->SetHighColor(md->mColor[BE_RCOMP], +                         md->mColor[BE_GCOMP], +                         md->mColor[BE_BCOMP], +                         md->mColor[BE_ACOMP]); +   bglview->SetLowColor(md->mColor[BE_RCOMP], +                        md->mColor[BE_GCOMP], +                        md->mColor[BE_BCOMP], +                        md->mColor[BE_ACOMP]);  #endif  } -void AuxInfo::ClearBack(GLcontext *ctx, +void MesaDriver::ClearBack(GLcontext *ctx,                          GLboolean all, GLint x, GLint y,                          GLint width, GLint height)  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; -   BGLView *bglview = aux->mBGLView; +   MesaDriver *md = (MesaDriver *) ctx->DriverCtx; +   BGLView *bglview = md->m_bglview;     assert(bglview); -   BBitmap *bitmap = aux->mBitmap; +   BBitmap *bitmap = md->m_bitmap;     assert(bitmap);     GLuint *start = (GLuint *) bitmap->Bits(); -   const GLuint *clearPixelPtr = (const GLuint *) aux->mClearColor; +   const GLuint *clearPixelPtr = (const GLuint *) md->m_clear_color;     const GLuint clearPixel = *clearPixelPtr;     if (all) { -      const int numPixels = aux->mWidth * aux->mHeight; +      const int numPixels = md->m_width * md->m_height;        if (clearPixel == 0) {           memset(start, 0, numPixels * 4);        } @@ -457,68 +880,66 @@ void AuxInfo::ClearBack(GLcontext *ctx,     }     else {        // XXX untested -      start += y * aux->mWidth + x; +      start += y * md->m_width + x;        for (int i = 0; i < height; i++) {           for (int j = 0; j < width; j++) {              start[j] = clearPixel;           } -         start += aux->mWidth; +         start += md->m_width;        }     }  } -GLboolean AuxInfo::SetDrawBuffer(GLcontext *ctx, GLenum buffer) -{ -   if (buffer == GL_FRONT_LEFT) -      return GL_TRUE; -   else if (buffer == GL_BACK_LEFT) -      return GL_TRUE; -   else -      return GL_FALSE; -} - -void AuxInfo::SetReadBuffer(GLcontext *ctx, GLframebuffer *colorBuffer, -                            GLenum buffer) +void MesaDriver::SetBuffer(GLcontext *ctx, GLframebuffer *buffer, +                            GLenum mode)  { -   /* XXX to do */ +   /* TODO */ +	(void) ctx; +	(void) buffer; +	(void) mode;  } -void AuxInfo::GetBufferSize(GLcontext *ctx, GLuint *width, +void MesaDriver::GetBufferSize(GLframebuffer * framebuffer, GLuint *width,                              GLuint *height)  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; -   BGLView *bglview = aux->mBGLView; +   GET_CURRENT_CONTEXT(ctx); +   if (!ctx) +		return; + +   MesaDriver * md = (MesaDriver *) ctx->DriverCtx; +   BGLView *bglview = md->m_bglview;     assert(bglview); +     BRect b = bglview->Bounds(); -   *width = (GLuint) (b.right - b.left + 1); -   *height = (GLuint) (b.bottom - b.top + 1); -   aux->mBottom = (GLint) b.bottom; +   *width = (GLuint) b.IntegerWidth() + 1; // (b.right - b.left + 1); +   *height = (GLuint) b.IntegerHeight() + 1; // (b.bottom - b.top + 1); +   md->m_bottom = (GLint) b.bottom; -   if (ctx->Visual->DBflag) { -      if (*width != aux->mWidth || *height != aux->mHeight) { +   if (ctx->Visual.doubleBufferMode) { +      if (*width != md->m_width || *height != md->m_height) {           // allocate new size of back buffer bitmap -         if (aux->mBitmap) -            delete aux->mBitmap; +         if (md->m_bitmap) +            delete md->m_bitmap;           BRect rect(0.0, 0.0, *width - 1, *height - 1); -         aux->mBitmap = new BBitmap(rect, B_RGBA32); +         md->m_bitmap = new BBitmap(rect, B_RGBA32);        }     }     else     { -      aux->mBitmap = NULL; +      md->m_bitmap = NULL;     } -   aux->mWidth = *width; -   aux->mHeight = *height; +   md->m_width = *width; +   md->m_height = *height;  } -const GLubyte *AuxInfo::GetString(GLcontext *ctx, GLenum name) +const GLubyte *MesaDriver::GetString(GLcontext *ctx, GLenum name)  {     switch (name) {        case GL_RENDERER: -         return (const GLubyte *) "Mesa BeOS"; +         return (const GLubyte *) "Mesa BGLView (software)";        default:           // Let core library handle all other cases           return NULL; @@ -536,15 +957,15 @@ static void Plot(BGLView *bglview, int x, int y)  } -void AuxInfo::WriteRGBASpanFront(const GLcontext *ctx, GLuint n, +void MesaDriver::WriteRGBASpanFront(const GLcontext *ctx, GLuint n,                                   GLint x, GLint y,                                   CONST GLubyte rgba[][4],                                   const GLubyte mask[])  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; -   BGLView *bglview = aux->mBGLView; +   MesaDriver *md = (MesaDriver *) ctx->DriverCtx; +   BGLView *bglview = md->m_bglview;     assert(bglview); -   int flippedY = aux->mBottom - y; +   int flippedY = md->m_bottom - y;     if (mask) {        for (GLuint i = 0; i < n; i++) {           if (mask[i]) { @@ -561,15 +982,15 @@ void AuxInfo::WriteRGBASpanFront(const GLcontext *ctx, GLuint n,     }  } -void AuxInfo::WriteRGBSpanFront(const GLcontext *ctx, GLuint n, +void MesaDriver::WriteRGBSpanFront(const GLcontext *ctx, GLuint n,                                  GLint x, GLint y,                                  CONST GLubyte rgba[][3],                                  const GLubyte mask[])  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; -   BGLView *bglview = aux->mBGLView; +   MesaDriver *md = (MesaDriver *) ctx->DriverCtx; +   BGLView *bglview = md->m_bglview;     assert(bglview); -   int flippedY = aux->mBottom - y; +   int flippedY = md->m_bottom - y;     if (mask) {        for (GLuint i = 0; i < n; i++) {           if (mask[i]) { @@ -586,15 +1007,15 @@ void AuxInfo::WriteRGBSpanFront(const GLcontext *ctx, GLuint n,     }  } -void AuxInfo::WriteMonoRGBASpanFront(const GLcontext *ctx, GLuint n, +void MesaDriver::WriteMonoRGBASpanFront(const GLcontext *ctx, GLuint n,                                       GLint x, GLint y,                                       const GLchan color[4],                                       const GLubyte mask[])  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; -   BGLView *bglview = aux->mBGLView; +   MesaDriver *md = (MesaDriver *) ctx->DriverCtx; +   BGLView *bglview = md->m_bglview;     assert(bglview); -   int flippedY = aux->mBottom - y; +   int flippedY = md->m_bottom - y;     bglview->SetHighColor(color[RCOMP], color[GCOMP], color[BCOMP]);     if (mask) {        for (GLuint i = 0; i < n; i++) { @@ -610,69 +1031,69 @@ void AuxInfo::WriteMonoRGBASpanFront(const GLcontext *ctx, GLuint n,     }  } -void AuxInfo::WriteRGBAPixelsFront(const GLcontext *ctx, +void MesaDriver::WriteRGBAPixelsFront(const GLcontext *ctx,                                     GLuint n, const GLint x[], const GLint y[],                                     CONST GLubyte rgba[][4],                                     const GLubyte mask[] )  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; -   BGLView *bglview = aux->mBGLView; +   MesaDriver *md = (MesaDriver *) ctx->DriverCtx; +   BGLView *bglview = md->m_bglview;     assert(bglview);     if (mask) {        for (GLuint i = 0; i < n; i++) {           if (mask[i]) {              bglview->SetHighColor(rgba[i][0], rgba[i][1], rgba[i][2]); -            Plot(bglview, x[i], aux->mBottom - y[i]); +            Plot(bglview, x[i], md->m_bottom - y[i]);           }        }     }     else {        for (GLuint i = 0; i < n; i++) {           bglview->SetHighColor(rgba[i][0], rgba[i][1], rgba[i][2]); -         Plot(bglview, x[i], aux->mBottom - y[i]); +         Plot(bglview, x[i], md->m_bottom - y[i]);        }     }  } -void AuxInfo::WriteMonoRGBAPixelsFront(const GLcontext *ctx, GLuint n, +void MesaDriver::WriteMonoRGBAPixelsFront(const GLcontext *ctx, GLuint n,                                         const GLint x[], const GLint y[],                                         const GLchan color[4],                                         const GLubyte mask[])  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; -   BGLView *bglview = aux->mBGLView; +   MesaDriver *md = (MesaDriver *) ctx->DriverCtx; +   BGLView *bglview = md->m_bglview;     assert(bglview);     // plot points using current color     bglview->SetHighColor(color[RCOMP], color[GCOMP], color[BCOMP]);     if (mask) {        for (GLuint i = 0; i < n; i++) {           if (mask[i]) { -            Plot(bglview, x[i], aux->mBottom - y[i]); +            Plot(bglview, x[i], md->m_bottom - y[i]);           }        }     }     else {        for (GLuint i = 0; i < n; i++) { -         Plot(bglview, x[i], aux->mBottom - y[i]); +         Plot(bglview, x[i], md->m_bottom - y[i]);        }     }  } -void AuxInfo::WriteCI32SpanFront( const GLcontext *ctx, GLuint n, GLint x, GLint y, +void MesaDriver::WriteCI32SpanFront( const GLcontext *ctx, GLuint n, GLint x, GLint y,                               const GLuint index[], const GLubyte mask[] )  {     // XXX to do  } -void AuxInfo::WriteCI8SpanFront( const GLcontext *ctx, GLuint n, GLint x, GLint y, +void MesaDriver::WriteCI8SpanFront( const GLcontext *ctx, GLuint n, GLint x, GLint y,                              const GLubyte index[], const GLubyte mask[] )  {     // XXX to do  } -void AuxInfo::WriteMonoCISpanFront( const GLcontext *ctx, GLuint n, +void MesaDriver::WriteMonoCISpanFront( const GLcontext *ctx, GLuint n,                                      GLint x, GLint y,                                      GLuint colorIndex, const GLubyte mask[] )  { @@ -680,14 +1101,14 @@ void AuxInfo::WriteMonoCISpanFront( const GLcontext *ctx, GLuint n,  } -void AuxInfo::WriteCI32PixelsFront( const GLcontext *ctx, GLuint n, +void MesaDriver::WriteCI32PixelsFront( const GLcontext *ctx, GLuint n,                                      const GLint x[], const GLint y[],                                      const GLuint index[], const GLubyte mask[] )  {     // XXX to do  } -void AuxInfo::WriteMonoCIPixelsFront( const GLcontext *ctx, GLuint n, +void MesaDriver::WriteMonoCIPixelsFront( const GLcontext *ctx, GLuint n,                                        const GLint x[], const GLint y[],                                        GLuint colorIndex, const GLubyte mask[] )  { @@ -695,147 +1116,182 @@ void AuxInfo::WriteMonoCIPixelsFront( const GLcontext *ctx, GLuint n,  } -void AuxInfo::ReadCI32SpanFront( const GLcontext *ctx, +void MesaDriver::ReadCI32SpanFront( const GLcontext *ctx,                                   GLuint n, GLint x, GLint y, GLuint index[] )  { -   // XXX to do + 	printf("ReadCI32SpanFront() not implemented yet!\n"); +  // XXX to do  } -void AuxInfo::ReadRGBASpanFront( const GLcontext *ctx, GLuint n, +void MesaDriver::ReadRGBASpanFront( const GLcontext *ctx, GLuint n,                                   GLint x, GLint y, GLubyte rgba[][4] )  { + 	printf("ReadRGBASpanFront() not implemented yet!\n");     // XXX to do  } -void AuxInfo::ReadCI32PixelsFront( const GLcontext *ctx, +void MesaDriver::ReadCI32PixelsFront( const GLcontext *ctx,                                     GLuint n, const GLint x[], const GLint y[],                                     GLuint indx[], const GLubyte mask[] )  { + 	printf("ReadCI32PixelsFront() not implemented yet!\n");     // XXX to do  } -void AuxInfo::ReadRGBAPixelsFront( const GLcontext *ctx, +void MesaDriver::ReadRGBAPixelsFront( const GLcontext *ctx,                                     GLuint n, const GLint x[], const GLint y[],                                     GLubyte rgba[][4], const GLubyte mask[] )  { + 	printf("ReadRGBAPixelsFront() not implemented yet!\n");     // XXX to do  } -void AuxInfo::WriteRGBASpanBack(const GLcontext *ctx, GLuint n, +void MesaDriver::WriteRGBASpanBack(const GLcontext *ctx, GLuint n,                                   GLint x, GLint y,                                   CONST GLubyte rgba[][4],                                   const GLubyte mask[])  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; -   BBitmap *bitmap = aux->mBitmap; -   assert(bitmap); -   int row = aux->mBottom - y; -   GLubyte *pixel = (GLubyte *) bitmap->Bits() + (row * aux->mWidth + x) * 4; -   if (mask) { -      for (GLuint i = 0; i < n; i++) { -         if (mask[i]) { -            pixel[BE_RCOMP] = rgba[i][RCOMP]; -            pixel[BE_GCOMP] = rgba[i][GCOMP]; -            pixel[BE_BCOMP] = rgba[i][BCOMP]; -            pixel[BE_ACOMP] = rgba[i][ACOMP]; -         } -         pixel += 4; -      } -   } -   else { -      for (GLuint i = 0; i < n; i++) { -         pixel[BE_RCOMP] = rgba[i][RCOMP]; -         pixel[BE_GCOMP] = rgba[i][GCOMP]; -         pixel[BE_BCOMP] = rgba[i][BCOMP]; -         pixel[BE_ACOMP] = rgba[i][ACOMP]; -         pixel += 4; -      } -   } -} +	MesaDriver *md = (MesaDriver *) ctx->DriverCtx; +	BBitmap *bitmap = md->m_bitmap; + +	static bool already_called = false; +	if (! already_called) { +		printf("WriteRGBASpanBack() called.\n"); +		already_called = true; +	} + +	assert(bitmap); + +	int row = md->m_bottom - y; +	uint8 * ptr = (uint8 *) bitmap->Bits() + (row * bitmap->BytesPerRow()) + x * 4; + 	uint32 * pixel = (uint32 *) ptr; +	 +	if (mask) { +		while(n--) { +			if (*mask++) +				*pixel = PACK_B_RGBA32(rgba[0]); +			pixel++; +			rgba++; +		}; +	} else { +		while(n--) { +			*pixel++ = PACK_B_RGBA32(rgba[0]); +			rgba++; +		}; +	}; + } -void AuxInfo::WriteRGBSpanBack(const GLcontext *ctx, GLuint n, +void MesaDriver::WriteRGBSpanBack(const GLcontext *ctx, GLuint n,                                  GLint x, GLint y,                                  CONST GLubyte rgb[][3],                                  const GLubyte mask[])  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; -   BBitmap *bitmap = aux->mBitmap; -   assert(bitmap); -   int row = aux->mBottom - y; -   GLubyte *pixel = (GLubyte *) bitmap->Bits() + (row * aux->mWidth + x) * 4; -   if (mask) { -      for (GLuint i = 0; i < n; i++) { -         if (mask[i]) { -            pixel[BE_RCOMP] = rgb[i][RCOMP]; -            pixel[BE_GCOMP] = rgb[i][GCOMP]; -            pixel[BE_BCOMP] = rgb[i][BCOMP]; -            pixel[BE_ACOMP] = 255; -         } -         pixel += 4; -      } -   } -   else { -      for (GLuint i = 0; i < n; i++) { -         pixel[BE_RCOMP] = rgb[i][RCOMP]; -         pixel[BE_GCOMP] = rgb[i][GCOMP]; -         pixel[BE_BCOMP] = rgb[i][BCOMP]; -         pixel[BE_ACOMP] = 255; -         pixel += 4; -      } -   } +	MesaDriver *md = (MesaDriver *) ctx->DriverCtx; +	BBitmap *bitmap = md->m_bitmap; + +	static bool already_called = false; +	if (! already_called) { +		printf("WriteRGBSpanBack() called.\n"); +		already_called = true; +	} + +	assert(bitmap); + +	int row = md->m_bottom - y; +	uint8 * ptr = (uint8 *) bitmap->Bits() + (row * bitmap->BytesPerRow()) + x * 4; + 	uint32 * pixel = (uint32 *) ptr; +	 +	if (mask) { +		while(n--) { +			if (*mask++) +				*pixel = PACK_B_RGB32(rgb[0]); +			pixel++; +			rgb++; +		}; +	} else { +		while(n--) { +			*pixel++ = PACK_B_RGB32(rgb[0]); +			rgb++; +		}; +	};  } -void AuxInfo::WriteMonoRGBASpanBack(const GLcontext *ctx, GLuint n, + + +void MesaDriver::WriteMonoRGBASpanBack(const GLcontext *ctx, GLuint n,                                      GLint x, GLint y,                                      const GLchan color[4], const GLubyte mask[])  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; -   BBitmap *bitmap = aux->mBitmap; -   assert(bitmap); -   int row = aux->mBottom - y; -   GLuint *pixelPtr = (GLuint *) bitmap->Bits() + row * aux->mWidth + x; -   GLuint pixel; -   GLubyte *mColor= (GLubyte *) &pixel; -   mColor[BE_RCOMP] = color[RCOMP]; -   mColor[BE_GCOMP] = color[GCOMP]; -   mColor[BE_BCOMP] = color[BCOMP]; -   mColor[BE_ACOMP] = color[ACOMP]; -   if (mask) { -      for (GLuint i = 0; i < n; i++) { -         if (mask[i]) -            *pixelPtr = pixel; -         pixelPtr++; -      } -   } -   else { -      for (GLuint i = 0; i < n; i++) { -         *pixelPtr++ = pixel; -      } -   } +	MesaDriver *md = (MesaDriver *) ctx->DriverCtx; +	BBitmap *bitmap = md->m_bitmap; + +	static bool already_called = false; +	if (! already_called) { +		printf("WriteMonoRGBASpanBack() called.\n"); +		already_called = true; +	} + +	assert(bitmap); + +	int row = md->m_bottom - y; +	uint8 * ptr = (uint8 *) bitmap->Bits() + (row * bitmap->BytesPerRow()) + x * 4; + 	uint32 * pixel = (uint32 *) ptr; +	uint32 pixel_color = PACK_B_RGBA32(color); +	 +	if (mask) { +		while(n--) { +			if (*mask++) +				*pixel = pixel_color; +			pixel++; +		}; +	} else { +		while(n--) { +			*pixel++ = pixel_color; +		}; +	};  } -void AuxInfo::WriteRGBAPixelsBack(const GLcontext *ctx, +void MesaDriver::WriteRGBAPixelsBack(const GLcontext *ctx,                                     GLuint n, const GLint x[], const GLint y[],                                     CONST GLubyte rgba[][4],                                     const GLubyte mask[] )  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; -   BBitmap *bitmap = aux->mBitmap; -   assert(bitmap); +   MesaDriver *md = (MesaDriver *) ctx->DriverCtx; +   BBitmap *bitmap = md->m_bitmap; + +	static bool already_called = false; +	if (! already_called) { +		printf("WriteRGBAPixelsBack() called.\n"); +		already_called = true; +	} + +	assert(bitmap); +#if 0 +	while(n--) { +		if (*mask++) { +			int row = md->m_bottom - *y; +			uint8 * pixel = (uint8 *) bitmap->Bits() + (row * bitmap->BytesPerRow()) + *x * 4; +			*((uint32 *) pixel) = PACK_B_RGBA32(rgba[0]); +		}; +		x++; +		y++; +		rgba++; +	}; +#else     if (mask) {        for (GLuint i = 0; i < n; i++) {           if (mask[i]) {              GLubyte *pixel = (GLubyte *) bitmap->Bits() -            + (aux->mBottom - y[i]) * bitmap->BytesPerRow() + x[i] * 4; +            + ((md->m_bottom - y[i]) * bitmap->BytesPerRow()) + x[i] * 4;              pixel[BE_RCOMP] = rgba[i][RCOMP];              pixel[BE_GCOMP] = rgba[i][GCOMP];              pixel[BE_BCOMP] = rgba[i][BCOMP]; @@ -846,64 +1302,81 @@ void AuxInfo::WriteRGBAPixelsBack(const GLcontext *ctx,     else {        for (GLuint i = 0; i < n; i++) {           GLubyte *pixel = (GLubyte *) bitmap->Bits() -            + (aux->mBottom - y[i]) * bitmap->BytesPerRow() + x[i] * 4; +            + ((md->m_bottom - y[i]) * bitmap->BytesPerRow()) + x[i] * 4;           pixel[BE_RCOMP] = rgba[i][RCOMP];           pixel[BE_GCOMP] = rgba[i][GCOMP];           pixel[BE_BCOMP] = rgba[i][BCOMP];           pixel[BE_ACOMP] = rgba[i][ACOMP];        }     } +#endif  } -void AuxInfo::WriteMonoRGBAPixelsBack(const GLcontext *ctx, GLuint n, +void MesaDriver::WriteMonoRGBAPixelsBack(const GLcontext *ctx, GLuint n,                                        const GLint x[], const GLint y[],                                        const GLchan color[4],                                        const GLubyte mask[])  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; -   BBitmap *bitmap = aux->mBitmap; -   GLuint pixel; -   GLubyte *mColor= (GLubyte *) &pixel; -   mColor[BE_RCOMP] = color[RCOMP]; -   mColor[BE_GCOMP] = color[GCOMP]; -   mColor[BE_BCOMP] = color[BCOMP]; -   mColor[BE_ACOMP] = color[ACOMP]; -   assert(bitmap); +	MesaDriver *md = (MesaDriver *) ctx->DriverCtx; +	BBitmap *bitmap = md->m_bitmap; + +	static bool already_called = false; +	if (! already_called) { +		printf("WriteMonoRGBAPixelsBack() called.\n"); +		already_called = true; +	} + +	assert(bitmap); + +	uint32 pixel_color = PACK_B_RGBA32(color); +#if 0	 +	while(n--) { +		if (*mask++) { +			int row = md->m_bottom - *y; +			uint8 * pixel = (uint8 *) bitmap->Bits() + (row * bitmap->BytesPerRow()) + *x * 4; + +			*((uint32 *) pixel) = pixel_color; +		}; +		x++; +		y++; +	}; +#else     if (mask) {        for (GLuint i = 0; i < n; i++) {           if (mask[i]) { -            GLuint *pixelPtr = (GLuint *) bitmap->Bits() -                    + (aux->mBottom - y[i]) * aux->mWidth + x[i]; -            *pixelPtr = pixel; +         	GLubyte * ptr = (GLubyte *) bitmap->Bits() +            	+ ((md->m_bottom - y[i]) * bitmap->BytesPerRow()) + x[i] * 4; +            *((uint32 *) ptr) = pixel_color;           }        }     }     else { -      for (GLuint i = 0; i < n; i++) { -         GLuint *pixelPtr = (GLuint *) bitmap->Bits() -                 + (aux->mBottom - y[i]) * aux->mWidth + x[i]; -         *pixelPtr = pixel; +	  for (GLuint i = 0; i < n; i++) { +       	GLubyte * ptr = (GLubyte *) bitmap->Bits() +	           	+ ((md->m_bottom - y[i]) * bitmap->BytesPerRow()) + x[i] * 4; +       *((uint32 *) ptr) = pixel_color;        }     } +#endif  } -void AuxInfo::WriteCI32SpanBack( const GLcontext *ctx, GLuint n, +void MesaDriver::WriteCI32SpanBack( const GLcontext *ctx, GLuint n,                                   GLint x, GLint y,                                   const GLuint index[], const GLubyte mask[] )  {     // XXX to do  } -void AuxInfo::WriteCI8SpanBack( const GLcontext *ctx, GLuint n, +void MesaDriver::WriteCI8SpanBack( const GLcontext *ctx, GLuint n,                                  GLint x, GLint y,                                  const GLubyte index[], const GLubyte mask[] )  {     // XXX to do  } -void AuxInfo::WriteMonoCISpanBack( const GLcontext *ctx, GLuint n, +void MesaDriver::WriteMonoCISpanBack( const GLcontext *ctx, GLuint n,                                     GLint x, GLint y,                                     GLuint colorIndex, const GLubyte mask[] )  { @@ -911,14 +1384,14 @@ void AuxInfo::WriteMonoCISpanBack( const GLcontext *ctx, GLuint n,  } -void AuxInfo::WriteCI32PixelsBack( const GLcontext *ctx, GLuint n, +void MesaDriver::WriteCI32PixelsBack( const GLcontext *ctx, GLuint n,                                     const GLint x[], const GLint y[],                                     const GLuint index[], const GLubyte mask[] )  {     // XXX to do  } -void AuxInfo::WriteMonoCIPixelsBack( const GLcontext *ctx, GLuint n, +void MesaDriver::WriteMonoCIPixelsBack( const GLcontext *ctx, GLuint n,                                       const GLint x[], const GLint y[],                                       GLuint colorIndex, const GLubyte mask[] )  { @@ -926,22 +1399,23 @@ void AuxInfo::WriteMonoCIPixelsBack( const GLcontext *ctx, GLuint n,  } -void AuxInfo::ReadCI32SpanBack( const GLcontext *ctx, +void MesaDriver::ReadCI32SpanBack( const GLcontext *ctx,                                  GLuint n, GLint x, GLint y, GLuint index[] )  {     // XXX to do  } -void AuxInfo::ReadRGBASpanBack( const GLcontext *ctx, GLuint n, +void MesaDriver::ReadRGBASpanBack( const GLcontext *ctx, GLuint n,                                  GLint x, GLint y, GLubyte rgba[][4] )  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; -   const BBitmap *bitmap = aux->mBitmap; +   MesaDriver *md = (MesaDriver *) ctx->DriverCtx; +   const BBitmap *bitmap = md->m_bitmap;     assert(bitmap); -   int row = aux->mBottom - y; +   int row = md->m_bottom - y;     const GLubyte *pixel = (GLubyte *) bitmap->Bits() -                        + row * bitmap->BytesPerRow() + x * 4; +                        + (row * bitmap->BytesPerRow()) + x * 4; +     for (GLuint i = 0; i < n; i++) {        rgba[i][RCOMP] = pixel[BE_RCOMP];        rgba[i][GCOMP] = pixel[BE_GCOMP]; @@ -952,7 +1426,7 @@ void AuxInfo::ReadRGBASpanBack( const GLcontext *ctx, GLuint n,  } -void AuxInfo::ReadCI32PixelsBack( const GLcontext *ctx, +void MesaDriver::ReadCI32PixelsBack( const GLcontext *ctx,                                     GLuint n, const GLint x[], const GLint y[],                                     GLuint indx[], const GLubyte mask[] )  { @@ -960,319 +1434,36 @@ void AuxInfo::ReadCI32PixelsBack( const GLcontext *ctx,  } -void AuxInfo::ReadRGBAPixelsBack( const GLcontext *ctx, +void MesaDriver::ReadRGBAPixelsBack( const GLcontext *ctx,                                    GLuint n, const GLint x[], const GLint y[],                                    GLubyte rgba[][4], const GLubyte mask[] )  { -   AuxInfo *aux = (AuxInfo *) ctx->DriverCtx; -   const BBitmap *bitmap = aux->mBitmap; +   MesaDriver *md = (MesaDriver *) ctx->DriverCtx; +   const BBitmap *bitmap = md->m_bitmap;     assert(bitmap); -   for (GLuint i = 0; i < n; i++) { -      if (y[i] < aux->mHeight) { -         const GLubyte *pixel = (const GLubyte *) bitmap->Bits() -            + ((aux->mBottom - y[i]) * aux->mWidth + x[i]) * 4; + +   if (mask) { +      for (GLuint i = 0; i < n; i++) { +         if (mask[i]) { +            GLubyte *pixel = (GLubyte *) bitmap->Bits() +            + ((md->m_bottom - y[i]) * bitmap->BytesPerRow()) + x[i] * 4; +	         rgba[i][RCOMP] = pixel[BE_RCOMP]; +    	     rgba[i][GCOMP] = pixel[BE_GCOMP]; +        	 rgba[i][BCOMP] = pixel[BE_BCOMP]; +        	 rgba[i][ACOMP] = pixel[BE_ACOMP]; +         }; +      }; +   } else { +      for (GLuint i = 0; i < n; i++) { +         GLubyte *pixel = (GLubyte *) bitmap->Bits() +            + ((md->m_bottom - y[i]) * bitmap->BytesPerRow()) + x[i] * 4;           rgba[i][RCOMP] = pixel[BE_RCOMP];           rgba[i][GCOMP] = pixel[BE_GCOMP];           rgba[i][BCOMP] = pixel[BE_BCOMP];           rgba[i][ACOMP] = pixel[BE_ACOMP]; -      } -   } -} - - - - -//------------------------------------------------------------------ -// Public interface methods -//------------------------------------------------------------------ - - -// -// Input:  rect - initial rectangle -//         name - window name -//         resizingMode - example: B_FOLLOW_NONE -//         mode - usually 0 ? -//         options - Bitwise-OR of BGL_* tokens -// -BGLView::BGLView(BRect rect, char *name, -                 ulong resizingMode, ulong mode, -                 ulong options) -   :BView(rect, name, resizingMode, mode) -{ -   const GLboolean rgbFlag = (options & BGL_RGB) == BGL_RGB; -   const GLboolean alphaFlag = (options & BGL_ALPHA) == BGL_ALPHA; -   const GLboolean dblFlag = (options & BGL_DOUBLE) == BGL_DOUBLE; -   const GLboolean stereoFlag = false; -   const GLint depth = (options & BGL_DEPTH) ? 16 : 0; -   const GLint stencil = (options & BGL_STENCIL) ? 8 : 0; -   const GLint accum = (options & BGL_ACCUM) ? 16 : 0; -   const GLint index = (options & BGL_INDEX) ? 32 : 0; -   const GLint red = (options & BGL_RGB) ? 8 : 0; -   const GLint green = (options & BGL_RGB) ? 8 : 0; -   const GLint blue = (options & BGL_RGB) ? 8 : 0; -   const GLint alpha = (options & BGL_RGB) ? 8 : 0; - -   if (!rgbFlag) { -      fprintf(stderr, "Mesa Warning: color index mode not supported\n"); -   } - -   // Allocate auxiliary data object -   AuxInfo *aux = new AuxInfo; - -   // examine option flags and create gl_context struct -   GLvisual *visual = _mesa__create_visual( rgbFlag, -                                            dblFlag, -                                            stereoFlag, -                                            red, green, blue, alpha, -                                            index, -                                            depth, -                                            stencil, -                                            accum, accum, accum, accum, -                                            1 -                                            ); - -   // create core framebuffer -   GLframebuffer *buffer = _mesa_create_framebuffer(visual, -                                              depth > 0 ? GL_TRUE : GL_FALSE, -                                              stencil > 0 ? GL_TRUE: GL_FALSE, -                                              accum > 0 ? GL_TRUE : GL_FALSE, -                                              alphaFlag -                                              ); - -   // create core context -   const GLboolean direct = GL_TRUE; -   GLcontext *ctx = _mesa_create_context( visual, NULL, aux, direct ); - -   _mesa_enable_sw_extensions(ctx); - -   aux->Init(this, ctx, visual, buffer ); - -   // Hook aux data into BGLView object -   m_gc = aux; -} - - -BGLView::~BGLView() -{ -   printf("BGLView destructor\n"); -   AuxInfo *aux = (AuxInfo *) m_gc; -   assert(aux); -   delete aux; -} - -void BGLView::LockGL() -{ -   AuxInfo *aux = (AuxInfo *) m_gc; -   assert(aux); -   aux->MakeCurrent(); -} - -void BGLView::UnlockGL() -{ -   AuxInfo *aux = (AuxInfo *) m_gc; -   assert(aux); -   // Could call _mesa_make_current(NULL, NULL) but it would just -   // hinder performance -} - -void BGLView::SwapBuffers() -{ -   AuxInfo *aux = (AuxInfo *) m_gc; -   assert(aux); -   aux->SwapBuffers(); -} - - -void BGLView::CopySubBufferMESA(GLint x, GLint y, GLuint width, GLuint height) -{ -   AuxInfo *aux = (AuxInfo *) m_gc; -   assert(aux); -   aux->CopySubBuffer(x, y, width, height); -} - - -BView *BGLView::EmbeddedView() -{ -   // XXX to do - -} - -status_t BGLView::CopyPixelsOut(BPoint source, BBitmap *dest) -{ -   // XXX to do -} - - -status_t BGLView::CopyPixelsIn(BBitmap *source, BPoint dest) -{ -   // XXX to do -} - -void BGLView::ErrorCallback(GLenum errorCode) -{ -   // XXX to do -} - -void BGLView::Draw(BRect updateRect) -{ -//   printf("BGLView draw\n"); -   // XXX to do -} - -void BGLView::AttachedToWindow() -{ -   BView::AttachedToWindow(); - -   // don't paint window background white when resized -   SetViewColor(B_TRANSPARENT_32_BIT); -} - -void BGLView::AllAttached() -{ -   BView::AllAttached(); -//   printf("BGLView AllAttached\n"); -} - -void BGLView::DetachedFromWindow() -{ -   BView::DetachedFromWindow(); -} - -void BGLView::AllDetached() -{ -   BView::AllDetached(); -//   printf("BGLView AllDetached"); -} - -void BGLView::FrameResized(float width, float height) -{ -   return BView::FrameResized(width, height); -} - -status_t BGLView::Perform(perform_code d, void *arg) -{ -   return BView::Perform(d, arg); +      }; +   };  } -status_t BGLView::Archive(BMessage *data, bool deep) const -{ -   return BView::Archive(data, deep); -} - -void BGLView::MessageReceived(BMessage *msg) -{ -   BView::MessageReceived(msg); -} - -void BGLView::SetResizingMode(uint32 mode) -{ -   BView::SetResizingMode(mode); -} - -void BGLView::Show() -{ -//   printf("BGLView Show\n"); -   BView::Show(); -} - -void BGLView::Hide() -{ -//   printf("BGLView Hide\n"); -   BView::Hide(); -} - -BHandler *BGLView::ResolveSpecifier(BMessage *msg, int32 index, -                                    BMessage *specifier, int32 form, -                                    const char *property) -{ -   return BView::ResolveSpecifier(msg, index, specifier, form, property); -} - -status_t BGLView::GetSupportedSuites(BMessage *data) -{ -   return BView::GetSupportedSuites(data); -} - -void BGLView::DirectConnected( direct_buffer_info *info ) -{ -   // XXX to do -} - -void BGLView::EnableDirectMode( bool enabled ) -{ -   // XXX to do -} - - - -//---- private methods ---------- - -void BGLView::_ReservedGLView1() {} -void BGLView::_ReservedGLView2() {} -void BGLView::_ReservedGLView3() {} -void BGLView::_ReservedGLView4() {} -void BGLView::_ReservedGLView5() {} -void BGLView::_ReservedGLView6() {} -void BGLView::_ReservedGLView7() {} -void BGLView::_ReservedGLView8() {} - -#if 0 -BGLView::BGLView(const BGLView &v) -	: BView(v) -{ -   // XXX not sure how this should work -   printf("Warning BGLView::copy constructor not implemented\n"); -} -#endif - - -BGLView &BGLView::operator=(const BGLView &v) -{ -   printf("Warning BGLView::operator= not implemented\n"); -} - -void BGLView::dither_front() -{ -   // no-op -} - -bool BGLView::confirm_dither() -{ -   // no-op -   return false; -} - -void BGLView::draw(BRect r) -{ -   // XXX no-op ??? -} - -/* Direct Window stuff */ -void BGLView::drawScanline( int x1, int x2, int y, void *data ) -{ -   // no-op -} - -void BGLView::scanlineHandler(struct rasStateRec *state, -                              GLint x1, GLint x2) -{ -   // no-op -} - -void BGLView::lock_draw() -{ -   // no-op -} - -void BGLView::unlock_draw() -{ -   // no-op -} - -bool BGLView::validateView() -{ -   // no-op -   return true; -} diff --git a/src/mesa/main/Makefile.BeOS-R5 b/src/mesa/main/Makefile.BeOS-R5 new file mode 100644 index 0000000000..65303863a2 --- /dev/null +++ b/src/mesa/main/Makefile.BeOS-R5 @@ -0,0 +1,452 @@ +# Mesa 3-D graphics library +# Version:  4.1 +#  +# Copyright (C) 1995-2002  Brian Paul   All Rights Reserved. +#  +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +#  +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +#  +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL +# BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# BeOS driver makefile v1.0 for Mesa 4.1 +# +#  Copyright (C) 2002 - Philippe Houdoin +#  Email : philippe.houdoin@free.fr +#  Web   : http://philippe.houdoin.free.fr/phil/beos/index-en.html +# +# ------------------------------------------------------------------- + +## BeOS Generic Makefile v2.0 ## + +## Fill in this file to specify the project being created, and the referenced +## makefile-engine will do all of the hard work for you.  This handles both +## Intel and PowerPC builds of the BeOS. + +## Application Specific Settings --------------------------------------------- + +# specify the name of the binary +NAME= libGL.so + +# specify the type of binary +#	APP:	Application +#	SHARED:	Shared library or add-on +#	STATIC:	Static library archive +#	DRIVER: Kernel Driver +TYPE= SHARED + +#	specify the source files to use +#	full paths or paths relative to the makefile can be included +# 	all files, regardless of directory, will have their object +#	files created in the common object directory. +#	Note that this means this makefile will not work correctly +#	if two source files with the same name (source.c or source.cpp) +#	are included from different directories.  Also note that spaces +#	in folder names do not work well with this makefile. + +MESA_CORE_SRCS = \ +	api_arrayelt.c \ +	api_loopback.c \ +	api_noop.c \ +	api_validate.c \ +	accum.c \ +	attrib.c \ +	blend.c \ +	buffers.c \ +	clip.c \ +	colortab.c \ +	context.c \ +	convolve.c \ +	debug.c \ +	depth.c \ +	dispatch.c \ +	dlist.c \ +	drawpix.c \ +	enable.c \ +	enums.c \ +	eval.c \ +	extensions.c \ +	feedback.c \ +	fog.c \ +	get.c \ +	glapi.c \ +	glthread.c \ +	hash.c \ +	hint.c \ +	histogram.c \ +	image.c \ +	imports.c \ +	light.c \ +	lines.c \ +	matrix.c \ +	mem.c \ +	mmath.c \ +	pixel.c \ +	points.c \ +	polygon.c \ +	rastpos.c \ +	state.c \ +	stencil.c \ +	texformat.c \ +	teximage.c \ +	texobj.c \ +	texstate.c \ +	texstore.c \ +	texutil.c \ +	varray.c \ +	vpexec.c \ +	vpparse.c \ +	vpstate.c \ +	vtxfmt.c \ +	math/m_debug_clip.c \ +	math/m_debug_norm.c \ +	math/m_debug_xform.c \ +	math/m_eval.c \ +	math/m_matrix.c \ +	math/m_translate.c \ +	math/m_vector.c \ +	math/m_xform.c \ +	array_cache/ac_context.c \ +	array_cache/ac_import.c \ +	swrast/s_aaline.c \ +	swrast/s_aatriangle.c \ +	swrast/s_accum.c \ +	swrast/s_alpha.c \ +	swrast/s_alphabuf.c \ +	swrast/s_bitmap.c \ +	swrast/s_blend.c \ +	swrast/s_buffers.c \ +	swrast/s_copypix.c \ +	swrast/s_context.c \ +	swrast/s_depth.c \ +	swrast/s_drawpix.c \ +	swrast/s_feedback.c \ +	swrast/s_fog.c \ +	swrast/s_histogram.c \ +	swrast/s_imaging.c \ +	swrast/s_lines.c \ +	swrast/s_logic.c \ +	swrast/s_masking.c \ +	swrast/s_pixeltex.c \ +	swrast/s_points.c \ +	swrast/s_readpix.c \ +	swrast/s_span.c \ +	swrast/s_stencil.c \ +	swrast/s_texture.c \ +	swrast/s_texstore.c \ +	swrast/s_triangle.c \ +	swrast/s_zoom.c \ +	swrast_setup/ss_context.c \ +	swrast_setup/ss_triangle.c \ +	swrast_setup/ss_vb.c \ +	tnl/t_array_api.c \ +	tnl/t_array_import.c \ +	tnl/t_context.c \ +	tnl/t_eval_api.c \ +	tnl/t_imm_alloc.c \ +	tnl/t_imm_api.c \ +	tnl/t_imm_debug.c \ +	tnl/t_imm_dlist.c \ +	tnl/t_imm_elt.c \ +	tnl/t_imm_eval.c \ +	tnl/t_imm_exec.c \ +	tnl/t_imm_fixup.c \ +	tnl/t_pipeline.c \ +	tnl/t_vb_fog.c \ +	tnl/t_vb_light.c \ +	tnl/t_vb_normals.c \ +	tnl/t_vb_points.c \ +	tnl/t_vb_program.c \ +	tnl/t_vb_render.c \ +	tnl/t_vb_texgen.c \ +	tnl/t_vb_texmat.c \ +	tnl/t_vb_vertex.c +	 +MESA_BEOS_DRIVER_SRCS = \ +	BeOS/GLView.cpp +	 +MESA_X86_SRCS = \ +	X86/x86.c \ +	X86/glapi_x86.S \ +	X86/common_x86.c \ +	X86/common_x86_asm.S \ +	X86/x86_xform2.S \ +	X86/x86_xform3.S \ +	X86/x86_xform4.S \ +	X86/x86_cliptest.S + +MESA_MMX_SRCS = \ +	X86/mmx_blend.S + +MESA_SSE_SRCS = \ +	X86/sse.c \ +	X86/sse_xform2.S \ +	X86/sse_xform3.S \ +	X86/sse_xform4.S \ +	X86/sse_normal.S + +MESA_3DNOW_SRCS = \ +	X86/3dnow.c \ +	X86/3dnow_normal.S \ +	X86/3dnow_xform1.S \ +	X86/3dnow_xform2.S \ +	X86/3dnow_xform3.S \ +	X86/3dnow_xform4.S + +MESA_DEFINES = +# To use GAS assembler, uncomment this line instead: +MESA_DEFINES += GNU_ASSEMBLER +# To use NASM assembler, uncomment this line instead: +# MESA_DEFINES += NASM_ASSEMBLER +# To build a DEBUG version of Mesa, uncomment this line instead: +# MESA_DEFINES += DEBUG + +# x86-optimized code +MACHINE=$(shell uname -m) +ifeq ($(MACHINE), BePC) +	HAVE_MMX = 1 +	HAVE_SSE = 1 +	HAVE_3DNOW = 1 +else +	# No assembly optimization for PowerPC... +	# HAVE_ALTIVEC=1 +endif + +ifdef HAVE_MMX +	MESA_X86_SRCS += $(MESA_MMX_SRCS) +	MESA_DEFINES += USE_MMX_ASM +	HAVE_X86 = 1 +endif +ifdef HAVE_SSE +	MESA_X86_SRCS += $(MESA_SSE_SRCS) +	MESA_DEFINES += USE_SSE_ASM +	HAVE_X86 = 1 +endif +ifdef HAVE_3DNOW +	MESA_X86_SRCS += $(MESA_3DNOW_SRCS) +	MESA_DEFINES += USE_3DNOW_ASM +	HAVE_X86 = 1 +endif +ifdef HAVE_X86 +	MESA_DEFINES += USE_X86_ASM +else +	MESA_X86_SRCS = +endif + +# FIXME: SI-GLU version support currently broken +# USE_SI_GLU=1 +ifdef USE_SI_GLU +	GLU_SRCS = \ +	../si-glu/libutil/error.c		\ +	../si-glu/libutil/glue.c		\ +	../si-glu/libutil/mipmap.c	\ +	../si-glu/libutil/project.c	\ +	../si-glu/libutil/quad.c		\ +	../si-glu/libutil/registry.c	\ +	../si-glu/libtess/dict.c		\ +	../si-glu/libtess/geom.c		\ +	../si-glu/libtess/memalloc.c	\ +	../si-glu/libtess/mesh.c		\ +	../si-glu/libtess/normal.c	\ +	../si-glu/libtess/priorityq.c	\ +	../si-glu/libtess/render.c	\ +	../si-glu/libtess/sweep.c		\ +	../si-glu/libtess/tess.c		\ +	../si-glu/libtess/tessmono.c	\ +	../si-glu/libnurbs/interface/bezierEval.cc		\ +	../si-glu/libnurbs/interface/bezierPatch.cc		\ +	../si-glu/libnurbs/interface/bezierPatchMesh.cc		\ +	../si-glu/libnurbs/interface/glcurveval.cc		\ +	../si-glu/libnurbs/interface/glinterface.cc		\ +	../si-glu/libnurbs/interface/glrenderer.cc		\ +	../si-glu/libnurbs/interface/glsurfeval.cc		\ +	../si-glu/libnurbs/interface/incurveeval.cc		\ +	../si-glu/libnurbs/interface/insurfeval.cc		\ +	../si-glu/libnurbs/internals/arc.cc			\ +	../si-glu/libnurbs/internals/arcsorter.cc			\ +	../si-glu/libnurbs/internals/arctess.cc			\ +	../si-glu/libnurbs/internals/backend.cc			\ +	../si-glu/libnurbs/internals/basiccrveval.cc		\ +	../si-glu/libnurbs/internals/basicsurfeval.cc		\ +	../si-glu/libnurbs/internals/bin.cc			\ +	../si-glu/libnurbs/internals/bufpool.cc			\ +	../si-glu/libnurbs/internals/cachingeval.cc		\ +	../si-glu/libnurbs/internals/ccw.cc			\ +	../si-glu/libnurbs/internals/coveandtiler.cc		\ +	../si-glu/libnurbs/internals/curve.cc			\ +	../si-glu/libnurbs/internals/curvelist.cc			\ +	../si-glu/libnurbs/internals/curvesub.cc			\ +	../si-glu/libnurbs/internals/dataTransform.cc		\ +	../si-glu/libnurbs/internals/displaylist.cc		\ +	../si-glu/libnurbs/internals/flist.cc			\ +	../si-glu/libnurbs/internals/flistsorter.cc		\ +	../si-glu/libnurbs/internals/hull.cc			\ +	../si-glu/libnurbs/internals/intersect.cc			\ +	../si-glu/libnurbs/internals/knotvector.cc		\ +	../si-glu/libnurbs/internals/mapdesc.cc			\ +	../si-glu/libnurbs/internals/mapdescv.cc			\ +	../si-glu/libnurbs/internals/maplist.cc			\ +	../si-glu/libnurbs/internals/mesher.cc			\ +	../si-glu/libnurbs/internals/monoTriangulationBackend.cc	\ +	../si-glu/libnurbs/internals/monotonizer.cc		\ +	../si-glu/libnurbs/internals/mycode.cc			\ +	../si-glu/libnurbs/internals/nurbsinterfac.cc		\ +	../si-glu/libnurbs/internals/nurbstess.cc			\ +	../si-glu/libnurbs/internals/patch.cc			\ +	../si-glu/libnurbs/internals/patchlist.cc			\ +	../si-glu/libnurbs/internals/quilt.cc			\ +	../si-glu/libnurbs/internals/reader.cc			\ +	../si-glu/libnurbs/internals/renderhints.cc		\ +	../si-glu/libnurbs/internals/slicer.cc			\ +	../si-glu/libnurbs/internals/sorter.cc			\ +	../si-glu/libnurbs/internals/splitarcs.cc			\ +	../si-glu/libnurbs/internals/subdivider.cc		\ +	../si-glu/libnurbs/internals/tobezier.cc			\ +	../si-glu/libnurbs/internals/trimline.cc			\ +	../si-glu/libnurbs/internals/trimregion.cc		\ +	../si-glu/libnurbs/internals/trimvertpool.cc		\ +	../si-glu/libnurbs/internals/uarray.cc			\ +	../si-glu/libnurbs/internals/varray.cc			\ +	../si-glu/libnurbs/nurbtess/directedLine.cc		\ +	../si-glu/libnurbs/nurbtess/gridWrap.cc			\ +	../si-glu/libnurbs/nurbtess/monoChain.cc			\ +	../si-glu/libnurbs/nurbtess/monoPolyPart.cc		\ +	../si-glu/libnurbs/nurbtess/monoTriangulation.cc		\ +	../si-glu/libnurbs/nurbtess/partitionX.cc			\ +	../si-glu/libnurbs/nurbtess/partitionY.cc			\ +	../si-glu/libnurbs/nurbtess/polyDBG.cc			\ +	../si-glu/libnurbs/nurbtess/polyUtil.cc			\ +	../si-glu/libnurbs/nurbtess/primitiveStream.cc		\ +	../si-glu/libnurbs/nurbtess/quicksort.cc			\ +	../si-glu/libnurbs/nurbtess/rectBlock.cc			\ +	../si-glu/libnurbs/nurbtess/sampleComp.cc			\ +	../si-glu/libnurbs/nurbtess/sampleCompBot.cc		\ +	../si-glu/libnurbs/nurbtess/sampleCompRight.cc		\ +	../si-glu/libnurbs/nurbtess/sampleCompTop.cc		\ +	../si-glu/libnurbs/nurbtess/sampleMonoPoly.cc		\ +	../si-glu/libnurbs/nurbtess/sampledLine.cc		\ +	../si-glu/libnurbs/nurbtess/searchTree.cc +else +	GLU_SRCS = \ +		../src-glu/glu.c \ +		../src-glu/mipmap.c \ +		../src-glu/project.c \ +		../src-glu/quadric.c \ +		../src-glu/tess.c \ +		../src-glu/tesselat.c \ +		../src-glu/polytest.c \ +		../src-glu/nurbs.c \ +		../src-glu/nurbscrv.c \ +		../src-glu/nurbssrf.c \ +		../src-glu/nurbsutl.c +endif + +SRCS =  $(MESA_CORE_SRCS) $(MESA_X86_SRCS) $(GLU_SRCS) $(MESA_BEOS_DRIVER_SRCS)  +		 +#	specify the resource files to use +#	full path or a relative path to the resource file can be used. +RSRCS =  + +#	specify additional libraries to link against +#	there are two acceptable forms of library specifications +#	-	if your library follows the naming pattern of: +#		libXXX.so or libXXX.a you can simply specify XXX +#		library: libbe.so entry: be +#		 +#	- 	if your library does not follow the standard library +#		naming scheme you need to specify the path to the library +#		and it's name +#		library: my_lib.a entry: my_lib.a or path/my_lib.a +LIBS = be +		 +#	specify additional paths to directories following the standard +#	libXXX.so or libXXX.a naming scheme.  You can specify full paths +#	or paths relative to the makefile.  The paths included may not +#	be recursive, so include all of the paths where libraries can +#	be found.  Directories where source files are found are +#	automatically included. +LIBPATHS = + +#	additional paths to look for system headers +#	thes use the form: #include <header> +#	source file directories are NOT auto-included here +SYSTEM_INCLUDE_PATHS = ../include +ifdef USE_SI_GLU +	SYSTEM_INCLUDE_PATHS += ../si-glu/include +endif + +#	additional paths to look for local headers +#	thes use the form: #include "header" +#	source file directories are automatically included +LOCAL_INCLUDE_PATHS =  + +#	specify the level of optimization that you desire +#	NONE, SOME, FULL +OPTIMIZE = FULL + +#	specify any preprocessor symbols to be defined.  The symbols +#	will be set to a value of 1.  For example specify DEBUG if you want +#	DEBUG=1 to be set when compiling. +DEFINES = $(MESA_DEFINES) + +#	specify special warning levels +#	if unspecified default warnings will be used +#	NONE = suppress all warnings +#	ALL = enable all warnings +WARNINGS = ALL + +#	specify whether image symbols will be created +#	so that stack crawls in the debugger are meaningful +#	if TRUE symbols will be created +SYMBOLS = TRUE  + +#	specify debug settings +#	if TRUE will allow application to be run from +#	a source-level debugger +# DEBUGGER = TRUE +DEBUGGER = FALSE + +#	specify additional compiler flags for all files +COMPILER_FLAGS =  + +#	specify additional linker flags +LINKER_FLAGS = + + + +## include the makefile-engine +include /boot/develop/etc/makefile-engine + + + +# X86/matypes.h include file is *generated*! +# Rules to (re)generate it as needed: + +X86/common_x86_asm.S : X86/matypes.h + +X86/matypes.h : X86/gen_matypes.c +	@echo "(Re-)Generating $@ ..." +	$(CC) $< $(INCLUDES) $(CFLAGS)  -o X86/gen_matypes +	X86/gen_matypes > $@ +	rm -f X86/gen_matypes + +## Add NASM support for assembly code compilation... +# $(OBJ_DIR)/%.o : %.nasm +#	nasm -f elf $(MESA_DEFINES) -o $@ $< + +$(OBJ_DIR)/%.o : %.S +	gcc -c $< $(INCLUDES) $(CFLAGS) -o $@ +#	gcc $(INCLUDES) $(CFLAGS) -E $< | grep -v '^$$' > $(addsuffix .nasm, $(basename $<)) +#	nasm -f elf $(MESA_DEFINES) -o $@ $(addsuffix .nasm, $(basename $<)) + diff --git a/src/mesa/x86/gen_matypes.c b/src/mesa/x86/gen_matypes.c index 8a86d69694..b97a70528c 100644 --- a/src/mesa/x86/gen_matypes.c +++ b/src/mesa/x86/gen_matypes.c @@ -1,4 +1,4 @@ -/* $Id: gen_matypes.c,v 1.7 2002/02/15 16:32:36 brianp Exp $ */ +/* $Id: gen_matypes.c,v 1.8 2002/09/19 16:19:45 brianp Exp $ */  /*   * Mesa 3-D graphics library @@ -66,11 +66,21 @@ do {									\     printf( "\n" );							\  } while (0) +#if defined(__BEOS__) +#define OFFSET( s, t, m )						\ +   printf( "#define %s\t%ld\n", s, offsetof( t, m ) ); +#else  #define OFFSET( s, t, m )						\     printf( "#define %s\t%d\n", s, offsetof( t, m ) ); +#endif +#if defined(__BEOS__) +#define SIZEOF( s, t )							\ +   printf( "#define %s\t%ld\n", s, sizeof(t) ); +#else  #define SIZEOF( s, t )							\     printf( "#define %s\t%d\n", s, sizeof(t) ); +#endif  #define DEFINE( s, d )							\     printf( "#define %s\t0x%x\n", s, d ); | 
