Updates from Philippe Houdoin.

This commit is contained in:
Brian Paul 2003-12-13 01:26:14 +00:00
parent 3b81ccd826
commit 50f20ec7f5
5 changed files with 577 additions and 46 deletions

View file

@ -5,10 +5,11 @@
* Introduction
Mesa 4.1 features a driver for the BeOS. The driver implements
a clone of the BGLView class. This class, derived from BView, allows
OpenGL rendering into a BeOS window.
The 4.1 BeOS driver is an update of Brian Paul's BeOS driver released in Mesa 3.1.
Brian Paul added in Mesa 3.1 a driver for BeOS R4.5 operating system.
This driver implements a clone of the BGLView class. This class, derived from BView, allows
OpenGL rendering into any BeOS window.
His driver was updated in Mesa 4.1 by Philippe Houdoin,
who's maintaining this driver since.
Any application which uses the BGLView should be able to use Mesa
instead of Be's OpenGL without changing any code.
@ -18,10 +19,9 @@ SGI sample implementation, it's pretty slow. You'll see that Mesa
is considerably faster.
* Source Code
The source code for the driver is in Mesa-4.1/src/BeOS/ directory.
The source code for the driver is in src/mesa/drivers/beos/ directory.
It's not 100% finished at this time but many GLUT-based demos are
working. No optimizations have been made at this time.
@ -33,22 +33,22 @@ Requirements:
- gcc version 2.95.3 for BeOS
You can find it here: http://www.bebits.com/app/2157
Move to the Mesa-4.x src sub-directory and then type "make -f Makefile.BeOS-R5".
Move to the src/mesa sub-directory and then type "make -f Makefile.BeOS".
When it finishes the Mesa based libGL.so library for
BeOS will be in the Mesa-4.x/src/obj.{x86|ppc}/ directory.
BeOS will be in the src/mesa/src/obj.{x86|ppc}/ directory.
To install it as Be's default libGL.so replacement, put it in your
/boot/home/config/lib/ directory. All your GL/GLUTapps will use
/boot/home/config/lib/ directory. All your GL/GLUT apps will use
the Mesa based then.
By default, it build a non-debug version library.
The x86 (MMX, SSE and 3DNOW) optimizations are also supported for x86 target.
Sorry, Mesa don't have ppc (Altivec) optimizations yet.
For PowerPC BeOS flavor, sorry, Mesa don't have ppc (Altivec) optimizations yet.
* Example Programs
Look in the Mesa-4.x/BeOS/ directory for one or two BGLView demo
Look in the progs/beos/ directory for one or two BGLView demo
programs. They should have been compiled along with the Mesa
library.
@ -106,9 +106,9 @@ Mesa 3.0 supported the 3Dfx/Glide library on Beos. Download Mesa 3.0
if interested. Ideally, the 3Dfx/Glide support should be updated to
work with the new Mesa 3.1 BGLView implementation.
The Glide library hasn't been updated for BeOS R4, to my knowledge, as
The Glide library hasn't been updated for BeOS R4 and newer, to my knowledge, as
of February, 1999.
----------------------------------------------------------------------
$Id: README.BEOS,v 1.7 2002/09/19 16:19:44 brianp Exp $
$Id: README.BEOS,v 1.8 2003/12/13 01:26:14 brianp Exp $

View file

@ -26,12 +26,35 @@ TYPE= SHARED
# 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.
SRCS= glut_util.cpp glutBlocker.cpp glutInit.cpp glutWindow.cpp \
glutEvent.cpp glutCallback.cpp glutOverlay.cpp glutGet.cpp glutColor.cpp \
glutCursor.cpp glutMenu.cpp glutDstr.cpp glut_bitmap.cpp glut_bwidth.cpp \
glut_8x13.cpp glut_9x15.cpp glut_hel10.cpp glut_hel12.cpp glut_hel18.cpp \
glut_tr10.cpp glut_tr24.cpp glut_mroman.cpp glut_roman.cpp glut_stroke.cpp \
glut_swidth.cpp glut_shapes.cpp glut_teapot.cpp beos_x11.cpp
SRCS= \
glut_util.cpp \
glutBlocker.cpp \
glutInit.cpp \
glutWindow.cpp \
glutEvent.cpp \
glutCallback.cpp \
glutOverlay.cpp \
glutGet.cpp \
glutColor.cpp \
glutCursor.cpp \
glutMenu.cpp \
glutDstr.cpp \
glut_bitmap.cpp \
glut_bwidth.cpp \
glut_8x13.cpp \
glut_9x15.cpp \
glut_hel10.cpp \
glut_hel12.cpp \
glut_hel18.cpp \
glut_tr10.cpp \
glut_tr24.cpp \
glut_mroman.cpp \
glut_roman.cpp \
glut_stroke.cpp \
glut_swidth.cpp \
glut_shapes.cpp \
glut_teapot.cpp \
beos_x11.cpp
# specify the resource files to use
# full path or a relative path to the resource file can be used.
@ -60,7 +83,7 @@ LIBPATHS= ../lib
# 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 /boot/develop/headers/be/opengl
SYSTEM_INCLUDE_PATHS = ../../../include /boot/develop/headers/be/opengl
# additional paths to look for local headers
# thes use the form: #include "header"

303
src/mesa/Makefile.BeOS Normal file
View file

@ -0,0 +1,303 @@
# Mesa 3-D graphics library
# Version: 5.1
#
# Copyright (C) 1995-2003 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 5.1.x
#
# Copyright (C) 2002-2003 - 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.
include sources
BEOS_DRIVER_SOURCES = \
drivers/beos/GLView.cpp
MESA_DEFINES =
ASM_SOURCES =
# 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)
MESA_DEFINES += USE_X86_ASM USE_SSE_ASM USE_MMX_ASM
MESA_DEFINES += USE_3DNOW_ASM
ASM_SOURCES = $(X86_SOURCES)
else
# No assembly optimization for PowerPC...
# HAVE_ALTIVEC=1
endif
# FIXME: SI-GLU version support currently broken
# USE_SI_GLU=1
ifdef USE_SI_GLU
GLU_SOURCES = \
../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_SOURCES = \
../glu/mesa/glu.c \
../glu/mesa/mipmap.c \
../glu/mesa/project.c \
../glu/mesa/quadric.c \
../glu/mesa/tess.c \
../glu/mesa/tesselat.c \
../glu/mesa/polytest.c \
../glu/mesa/nurbs.c \
../glu/mesa/nurbscrv.c \
../glu/mesa/nurbssrf.c \
../glu/mesa/nurbsutl.c
endif
MESA_SOURCES = $(CORE_SOURCES) $(ASM_SOURCES)
SRCS = $(MESA_SOURCES) $(GLU_SOURCES) $(BEOS_DRIVER_SOURCES)
# 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 += ../glu/sgi/include
endif
# additional paths to look for local headers
# thes use the form: #include "header"
# source file directories are automatically included
LOCAL_INCLUDE_PATHS = \
. \
./main \
./glapi \
./math \
./transform \
./swrast \
./swrast_setup \
./tnl \
./tnl_dd
# 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 $<))

View file

@ -1,4 +1,4 @@
/* $Id: GLView.cpp,v 1.9 2003/03/30 15:49:01 brianp Exp $ */
/* $Id: GLView.cpp,v 1.10 2003/12/13 01:26:14 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -25,22 +25,24 @@
*/
#include "glheader.h"
#include <assert.h>
#include <stdio.h>
extern "C" {
#include "glheader.h"
#include "buffers.h"
#include "bufferobj.h"
#include "context.h"
#include "colormac.h"
#include "depth.h"
#include "extensions.h"
#include "macros.h"
#include "matrix.h"
#include "mmath.h"
#include "mtypes.h"
#include "texformat.h"
#include "texobj.h"
#include "teximage.h"
#include "texstore.h"
#include "array_cache/acache.h"
#include "swrast/swrast.h"
@ -56,7 +58,7 @@ extern "C" {
} // extern "C"
#include <GLView.h>
#include "GLView.h"
// BeOS component ordering for B_RGBA32 bitmap format
#define BE_RCOMP 2
@ -277,6 +279,17 @@ BGLView::BGLView(BRect rect, char *name,
// create core context
GLcontext * ctx = _mesa_create_context(visual, NULL, md, GL_FALSE);
ctx->Driver.NewTextureObject = _mesa_new_texture_object;
ctx->Driver.DeleteTexture = _mesa_delete_texture_object;
_mesa_initialize_context(ctx, visual, NULL, md, GL_FALSE);
_mesa_enable_sw_extensions(ctx);
_mesa_enable_1_3_extensions(ctx);
_mesa_enable_1_4_extensions(ctx);
_mesa_enable_1_5_extensions(ctx);
// create core framebuffer
GLframebuffer * buffer = _mesa_create_framebuffer(visual,
@ -286,10 +299,6 @@ BGLView::BGLView(BRect rect, char *name,
alphaFlag
);
_mesa_enable_sw_extensions(ctx);
_mesa_enable_1_3_extensions(ctx);
_mesa_enable_1_4_extensions(ctx);
/* Initialize the software rasterizer and helper modules.
*/
_swrast_CreateContext(ctx);
@ -578,19 +587,23 @@ void MesaDriver::Init(BGLView * bglview, GLcontext * ctx, GLvisual * visual, GLf
assert(md->m_glcontext == ctx );
// Use default TCL pipeline
tnl->Driver.RunPipeline = _tnl_run_pipeline;
ctx->Driver.GetString = MesaDriver::GetString;
ctx->Driver.UpdateState = MesaDriver::UpdateState;
ctx->Driver.GetBufferSize = MesaDriver::GetBufferSize;
ctx->Driver.ResizeBuffers = _swrast_alloc_buffers;
ctx->Driver.GetBufferSize = MesaDriver::GetBufferSize;
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.ClearIndex = MesaDriver::ClearIndex;
// ctx->Driver.ClearColor = MesaDriver::ClearColor;
ctx->Driver.CopyPixels = _swrast_CopyPixels;
ctx->Driver.DrawPixels = _swrast_DrawPixels;
ctx->Driver.ReadPixels = _swrast_ReadPixels;
ctx->Driver.DrawBuffer = _swrast_DrawBuffer;
ctx->Driver.ChooseTextureFormat = _mesa_choose_tex_format;
ctx->Driver.TexImage1D = _mesa_store_teximage1d;
@ -601,7 +614,14 @@ void MesaDriver::Init(BGLView * bglview, GLcontext * ctx, GLvisual * visual, GLf
ctx->Driver.TexSubImage3D = _mesa_store_texsubimage3d;
ctx->Driver.TestProxyTexImage = _mesa_test_proxy_teximage;
ctx->Driver.CopyTexImage1D = _swrast_copy_teximage1d;
ctx->Driver.CompressedTexImage1D = _mesa_store_compressed_teximage1d;
ctx->Driver.CompressedTexImage2D = _mesa_store_compressed_teximage2d;
ctx->Driver.CompressedTexImage3D = _mesa_store_compressed_teximage3d;
ctx->Driver.CompressedTexSubImage1D = _mesa_store_compressed_texsubimage1d;
ctx->Driver.CompressedTexSubImage2D = _mesa_store_compressed_texsubimage2d;
ctx->Driver.CompressedTexSubImage3D = _mesa_store_compressed_texsubimage3d;
ctx->Driver.CopyTexImage1D = _swrast_copy_teximage1d;
ctx->Driver.CopyTexImage2D = _swrast_copy_teximage2d;
ctx->Driver.CopyTexSubImage1D = _swrast_copy_texsubimage1d;
ctx->Driver.CopyTexSubImage2D = _swrast_copy_texsubimage2d;
@ -610,19 +630,8 @@ void MesaDriver::Init(BGLView * bglview, GLcontext * ctx, GLvisual * visual, GLf
ctx->Driver.CopyColorSubTable = _swrast_CopyColorSubTable;
ctx->Driver.CopyConvolutionFilter1D = _swrast_CopyConvolutionFilter1D;
ctx->Driver.CopyConvolutionFilter2D = _swrast_CopyConvolutionFilter2D;
ctx->Driver.CompressedTexImage1D = _mesa_store_compressed_teximage1d;
ctx->Driver.CompressedTexImage2D = _mesa_store_compressed_teximage2d;
ctx->Driver.CompressedTexImage3D = _mesa_store_compressed_teximage3d;
ctx->Driver.CompressedTexSubImage1D = _mesa_store_compressed_texsubimage1d;
ctx->Driver.CompressedTexSubImage2D = _mesa_store_compressed_texsubimage2d;
ctx->Driver.CompressedTexSubImage3D = _mesa_store_compressed_texsubimage3d;
swdd->SetBuffer = MesaDriver::SetBuffer;
tnl->Driver.RunPipeline = _tnl_run_pipeline;
_swsetup_Wakeup(ctx);
}
@ -898,7 +907,7 @@ const GLubyte *MesaDriver::GetString(GLcontext *ctx, GLenum name)
// Plot a pixel. (0,0) is upper-left corner
// This is only used when drawing to the front buffer.
static void Plot(BGLView *bglview, int x, int y)
inline void Plot(BGLView *bglview, int x, int y)
{
// XXX There's got to be a better way!
BPoint p(x, y), q(x+1, y);

View file

@ -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(unsigned long errorCode); // 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