diff --git a/src/add-ons/opengl/mesa_software_renderer/Jamfile b/src/add-ons/opengl/mesa_software_renderer/Jamfile index 0aab44e025..855bda7c7e 100644 --- a/src/add-ons/opengl/mesa_software_renderer/Jamfile +++ b/src/add-ons/opengl/mesa_software_renderer/Jamfile @@ -21,7 +21,13 @@ if $(TARGET_PLATFORM) != haiku { defines += USE_SPARC_ASM ; } - SubDirC++Flags [ FDefines $(defines) ] ; + # For GCC2 + local flags ; + if $(HAIKU_GCC_VERSION[1]) < 3 { + flags = --no-warnings ; + } + + SubDirC++Flags [ FDefines $(defines) ] $(flags) ; } @@ -37,6 +43,11 @@ UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mesa main ] ; UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mapi ] ; UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mapi glapi ] ; +# For older versions of Mesa +UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mesa glapi ] ; +UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mesa tnl ] ; +UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mesa x86 ] ; + Addon Mesa\ Software\ Renderer : MesaSoftwareRenderer.cpp : libGL.so be $(TARGET_LIBSUPC++) diff --git a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp index 8752c562ce..f94b8f4b0f 100644 --- a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp +++ b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp @@ -30,12 +30,12 @@ extern "C" { #include "drivers/common/meta.h" #include "main/colormac.h" #include "main/buffers.h" +#include "main/formats.h" #include "main/framebuffer.h" #include "main/renderbuffer.h" #include "main/state.h" -#include "main/version.h" #include "swrast/swrast.h" -#ifdef NEW_MESA +#if __GNUC__ > 2 #include "swrast/s_renderbuffer.h" #endif #include "swrast_setup/swrast_setup.h" @@ -44,7 +44,8 @@ extern "C" { #include "tnl/t_pipeline.h" #include "vbo/vbo.h" -#define CALLED() printf("CALLED %s\n",__PRETTY_FUNCTION__) + +#define CALLED() //printf("CALLED %s\n",__PRETTY_FUNCTION__) #if defined(USE_X86_ASM) #include "x86/common_x86_asm.h" @@ -269,8 +270,12 @@ MesaSoftwareRenderer::MesaSoftwareRenderer(BGLView* view, ulong options, functions.Flush = _Flush; // create core context +#if HAIKU_MESA_VER <= 708 + fContext = _mesa_create_context(fVisual, NULL, &functions, this); +#else fContext = _mesa_create_context(API_OPENGL, fVisual, NULL, &functions, this); +#endif if (!fContext) { _mesa_destroy_visual(fVisual); @@ -311,8 +316,11 @@ MesaSoftwareRenderer::MesaSoftwareRenderer(BGLView* view, ulong options, switch(fColorSpace) { case B_RGB32: +#if HAIKU_MESA_VER >= 709 + // Only in New Mesa fFrontRenderBuffer->base.Format = MESA_FORMAT_XRGB8888; break; +#endif case B_RGBA32: fFrontRenderBuffer->base.Format = MESA_FORMAT_ARGB8888; break; @@ -362,9 +370,17 @@ MesaSoftwareRenderer::MesaSoftwareRenderer(BGLView* view, ulong options, fBackRenderBuffer->active = false; } +#if HAIKU_MESA_VER >= 709 + // New Mesa _swrast_add_soft_renderbuffers(&fFrameBuffer->base, GL_FALSE, fVisual->haveDepthBuffer, fVisual->haveStencilBuffer, fVisual->haveAccumBuffer, alphaFlag, GL_FALSE); +#else + // Old Mesa + _mesa_add_soft_renderbuffers(&fFrameBuffer->base, GL_FALSE, + fVisual->haveDepthBuffer, fVisual->haveStencilBuffer, + fVisual->haveAccumBuffer, alphaFlag, GL_FALSE); +#endif BRect bounds = view->Bounds(); fWidth = fNewWidth = (GLint)bounds.Width(); @@ -786,7 +802,9 @@ MesaSoftwareRenderer::_FrontRenderbufferStorage(gl_context* ctx, render->Data = NULL; render->Width = width; render->Height = height; +#if HAIKU_MESA_VER >= 712 render->RowStride = width; +#endif return GL_TRUE; } @@ -832,36 +850,66 @@ MesaSoftwareRenderer::_SetSpanFuncs( buffer->base.GetValues = get_values_RGBA32; buffer->base.PutRow = put_row_RGBA32; buffer->base.PutValues = put_values_RGBA32; +#if HAIKU_MESA_VER <= 711 + buffer->base.PutRowRGB = put_row_rgb_RGBA32; + buffer->base.PutMonoRow = put_mono_row_RGBA32; + buffer->base.PutMonoValues = put_values_RGBA32; +#endif break; case B_RGB32: buffer->base.GetRow = get_row_RGB32; buffer->base.GetValues = get_values_RGB32; buffer->base.PutRow = put_row_RGB32; buffer->base.PutValues = put_values_RGB32; +#if HAIKU_MESA_VER <= 711 + buffer->base.PutRowRGB = put_row_rgb_RGB32; + buffer->base.PutMonoRow = put_mono_row_RGB32; + buffer->base.PutMonoValues = put_values_RGB32; +#endif break; case B_RGB24: buffer->base.GetRow = get_row_RGB24; buffer->base.GetValues = get_values_RGB24; buffer->base.PutRow = put_row_RGB24; buffer->base.PutValues = put_values_RGB24; +#if HAIKU_MESA_VER <= 711 + buffer->base.PutRowRGB = put_row_rgb_RGB24; + buffer->base.PutMonoRow = put_mono_row_RGB24; + buffer->base.PutMonoValues = put_values_RGB24; +#endif break; case B_RGB16: buffer->base.GetRow = get_row_RGB16; buffer->base.GetValues = get_values_RGB16; buffer->base.PutRow = put_row_RGB16; buffer->base.PutValues = put_values_RGB16; +#if HAIKU_MESA_VER <= 711 + buffer->base.PutRowRGB = put_row_rgb_RGB16; + buffer->base.PutMonoRow = put_mono_row_RGB16; + buffer->base.PutMonoValues = put_values_RGB16; +#endif break; case B_RGB15: buffer->base.GetRow = get_row_RGB15; buffer->base.GetValues = get_values_RGB15; buffer->base.PutRow = put_row_RGB15; buffer->base.PutValues = put_values_RGB15; +#if HAIKU_MESA_VER <= 711 + buffer->base.PutRowRGB = put_row_rgb_RGB15; + buffer->base.PutMonoRow = put_mono_row_RGB15; + buffer->base.PutMonoValues = put_values_RGB15; +#endif break; case B_CMAP8: buffer->base.GetRow = get_row_CMAP8; buffer->base.GetValues = get_values_CMAP8; buffer->base.PutRow = put_row_CMAP8; buffer->base.PutValues = put_values_CMAP8; +#if HAIKU_MESA_VER <= 711 + buffer->base.PutRowRGB = put_row_rgb_CMAP8; + buffer->base.PutMonoRow = put_mono_row_CMAP8; + buffer->base.PutMonoValues = put_values_CMAP8; +#endif break; default: fprintf(stderr, "Unsupported screen color space %d\n", fColorSpace); diff --git a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.h b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.h index 3c883e4b6a..c49e09ed98 100644 --- a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.h +++ b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.h @@ -19,13 +19,19 @@ #include "GLRenderer.h" extern "C" { +#include "main/version.h" +#define HAIKU_MESA_VER (MESA_MAJOR * 100) + MESA_MINOR #include "context.h" + +#if HAIKU_MESA_VER >= 712 #include "swrast/s_chan.h" +#endif -#if defined(__GNUC__) && (__GNUC__ > 2) -#define NEW_MESA +#if HAIKU_MESA_VER <= 711 +#define gl_context GLcontext +#define gl_config GLvisual #endif diff --git a/src/add-ons/screen_savers/flurry/Jamfile b/src/add-ons/screen_savers/flurry/Jamfile index bb4309d897..61854d35fa 100644 --- a/src/add-ons/screen_savers/flurry/Jamfile +++ b/src/add-ons/screen_savers/flurry/Jamfile @@ -1,6 +1,12 @@ SubDir HAIKU_TOP src add-ons screen_savers flurry ; SubDirSysHdrs $(HAIKU_MESA_HEADERS) ; +# For GCC2 +if $(HAIKU_GCC_VERSION[1]) < 3 { + SubDirC++Flags --no-warnings ; +} + + AddResources Message : Flurry.rdef ; ScreenSaver Flurry : diff --git a/src/apps/glteapot/Jamfile b/src/apps/glteapot/Jamfile index 5e3745485f..575d254f29 100644 --- a/src/apps/glteapot/Jamfile +++ b/src/apps/glteapot/Jamfile @@ -3,6 +3,12 @@ SubDirSysHdrs $(HAIKU_MESA_HEADERS) ; SetSubDirSupportedPlatformsBeOSCompatible ; +# For GCC2 +if $(HAIKU_GCC_VERSION[1]) < 3 { + SubDirC++Flags --no-warnings ; +} + + Application GLTeapot : FPS.cpp GLObject.cpp diff --git a/src/kits/opengl/GLDispatcher.cpp b/src/kits/opengl/GLDispatcher.cpp index 2dfbfe0110..31a35b655a 100644 --- a/src/kits/opengl/GLDispatcher.cpp +++ b/src/kits/opengl/GLDispatcher.cpp @@ -35,8 +35,11 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. extern "C" { #include "glapi.h" +#if __GNUC__ > 2 +// New Mesa #include "glapi_priv.h" #include "glapitable.h" +#endif /* * NOTE: this file portion implements C-based dispatch of the OpenGL entrypoints @@ -64,7 +67,9 @@ extern "C" { return (dispatch->func) args +#if __GNUC__ > 2 #include "glapitemp.h" +#endif #endif /* USE_X86_ASM */ diff --git a/src/kits/opengl/Jamfile b/src/kits/opengl/Jamfile index 1db3e8df4c..42e54b4fd0 100644 --- a/src/kits/opengl/Jamfile +++ b/src/kits/opengl/Jamfile @@ -28,10 +28,18 @@ UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mesa main ] ; UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mapi ] ; UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mapi glapi ] ; +# For older versions of Mesa +UseHeaders [ FDirName $(HAIKU_MESA_DIR) src mesa glapi ] ; LINKFLAGS on libGL.so = [ on libGL.so return $(LINKFLAGS) ] -Xlinker --strip-debug -Xlinker --whole-archive -Xlinker -zmuldefs ; +# For GCC2 +if $(HAIKU_GCC_VERSION[1]) < 3 { + SubDirC++Flags --no-warnings ; +} + + SharedLibrary libGL.so : $(sources) : # Mesa libraries (from Mesa optional package): diff --git a/src/preferences/opengl/Jamfile b/src/preferences/opengl/Jamfile index 791dac8569..0bd2fc492d 100644 --- a/src/preferences/opengl/Jamfile +++ b/src/preferences/opengl/Jamfile @@ -1,6 +1,12 @@ SubDir HAIKU_TOP src preferences opengl ; SubDirSysHdrs $(HAIKU_MESA_HEADERS) ; +# For GCC2 +if $(HAIKU_GCC_VERSION[1]) < 3 { + SubDirC++Flags --no-warnings ; +} + + UsePrivateHeaders interface ; Preference OpenGL :