diff options
Diffstat (limited to 'hw/xquartz/GL/indirect.c')
-rw-r--r-- | hw/xquartz/GL/indirect.c | 311 |
1 files changed, 90 insertions, 221 deletions
diff --git a/hw/xquartz/GL/indirect.c b/hw/xquartz/GL/indirect.c index 10a5b2c23..176282532 100644 --- a/hw/xquartz/GL/indirect.c +++ b/hw/xquartz/GL/indirect.c @@ -44,6 +44,87 @@ #include <OpenGL/OpenGL.h> #include <OpenGL/CGLContext.h> +/* These next few GL_EXT pre-processing blocks are to explicitly define + * these symbols to 0 if they are not set by OpenGL.framework. This + * prevents the X11 glext.h from setting them to 1. + */ + +#ifndef GL_EXT_fragment_shader +#define GL_EXT_fragment_shader 0 +#endif + +#ifndef GL_EXT_blend_equation_separate +#define GL_EXT_blend_equation_separate 0 +#endif + +#ifndef GL_EXT_blend_func_separate +#define GL_EXT_blend_func_separate 0 +#endif + +#ifndef GL_EXT_depth_bounds_test +#define GL_EXT_depth_bounds_test 0 +#endif + +#ifndef GL_EXT_compiled_vertex_array +#define GL_EXT_compiled_vertex_array 0 +#endif + +#ifndef GL_EXT_cull_vertex +#define GL_EXT_cull_vertex 0 +#endif + +#ifndef GL_EXT_fog_coord +#define GL_EXT_fog_coord 0 +#endif + +#ifndef GL_EXT_framebuffer_blit +#define GL_EXT_framebuffer_blit 0 +#endif + +#ifndef GL_EXT_framebuffer_object +#define GL_EXT_framebuffer_object 0 +#endif + +#ifndef GL_EXT_gpu_program_parameters +#define GL_EXT_gpu_program_parameters 0 +#endif + +#ifndef GL_EXT_multi_draw_arrays +#define GL_EXT_multi_draw_arrays 0 +#endif + +#ifndef GL_EXT_point_parameters +#define GL_EXT_point_parameters 0 +#endif + +#ifndef GL_EXT_polygon_offset +#define GL_EXT_polygon_offset 0 +#endif + +#ifndef GL_EXT_secondary_color +#define GL_EXT_secondary_color 0 +#endif + +#ifndef GL_EXT_stencil_two_side +#define GL_EXT_stencil_two_side 0 +#endif + +#ifndef GL_EXT_timer_query +#define GL_EXT_timer_query 0 +#endif + +#ifndef GL_EXT_vertex_array +#define GL_EXT_vertex_array 0 +#endif + +/* Tiger PPC doesn't have the associated symbols, but glext.h says it does. Liars! + * http://trac.macports.org/ticket/20638 + */ +#if defined(__ppc__) && MAC_OS_X_VERSION_MIN_REQUIRED == 1040 +#undef GL_EXT_gpu_program_parameters +#define GL_EXT_gpu_program_parameters 0 +#endif + #include <GL/glxproto.h> #include <windowstr.h> #include <resource.h> @@ -61,7 +142,8 @@ #include "x-hash.h" #include "x-list.h" -#include "capabilities.h" +//#include "capabilities.h" +#include "visualConfigs.h" typedef unsigned long long GLuint64EXT; typedef long long GLint64EXT; @@ -101,13 +183,6 @@ __GLXprovider __glXDRISWRastProvider = { NULL }; -__GLXprovider * -GlxGetDRISWRastProvider (void) -{ - GLAQUA_DEBUG_MSG("GlxGetDRISWRastProvider\n"); - return &__glXDRISWRastProvider; -} - typedef struct __GLXAquaScreen __GLXAquaScreen; typedef struct __GLXAquaContext __GLXAquaContext; typedef struct __GLXAquaDrawable __GLXAquaDrawable; @@ -396,7 +471,6 @@ static int __glXAquaContextForceCurrent(__GLXcontext *baseContext) } /* Drawing surface notification callbacks */ - static GLboolean __glXAquaDrawableSwapBuffers(__GLXdrawable *base) { CGLError err; __GLXAquaDrawable *drawable; @@ -493,206 +567,6 @@ static void __glXAquaScreenDestroy(__GLXscreen *screen) { xfree(screen); } -static __GLXconfig *CreateConfigs(int *numConfigsPtr, int screenNumber) { - __GLXconfig *c, *result; - struct glCapabilities cap; - struct glCapabilitiesConfig *conf = NULL; - int numConfigs = 0; - int i; - - if(getGlCapabilities(&cap)) - FatalError("error from getGlCapabilities() in %s\n", __func__); - - assert(NULL != cap.configurations); - - for(conf = cap.configurations; conf; conf = conf->next) { - if(conf->total_color_buffers <= 0) - continue; - - numConfigs += (conf->stereo ? 2 : 1) - * (conf->aux_buffers ? 2 : 1) - * conf->buffers - * ((conf->total_stencil_bit_depths > 0) ? - conf->total_stencil_bit_depths : 1) - * conf->total_color_buffers - * ((conf->total_accum_buffers > 0) ? conf->total_accum_buffers : 1) - * conf->total_depth_buffer_depths - * (conf->multisample_buffers + 1); - } - - *numConfigsPtr = numConfigs; - - c = xalloc(sizeof(*c) * numConfigs); - - if(NULL == c) - return NULL; - - - - result = c; - - memset(result, 0, sizeof(*c) * numConfigs); - - i = 0; - - for(conf = cap.configurations; conf; conf = conf->next) { - int stereo, aux, buffers, stencil, color, accum, depth, msample; - - for(stereo = 0; stereo < (conf->stereo ? 2 : 1); ++stereo) { - for(aux = 0; aux < (conf->aux_buffers ? 2 : 1); ++aux) { - for(buffers = 0; buffers < conf->buffers; ++buffers) { - for(stencil = 0; stencil < ((conf->total_stencil_bit_depths > 0) ? - conf->total_stencil_bit_depths : 1); ++stencil) { - for(color = 0; color < conf->total_color_buffers; ++color) { - for(accum = 0; accum < ((conf->total_accum_buffers > 0) ? - conf->total_accum_buffers : 1); ++accum) { - for(depth = 0; depth < conf->total_depth_buffer_depths; ++depth) { - for(msample = 0; msample < (conf->multisample_buffers + 1); ++msample) { - if((i + 1) < numConfigs) { - c->next = c + 1; - } else { - c->next = NULL; - } - - c->doubleBufferMode = buffers ? GL_TRUE : GL_FALSE; - c->stereoMode = stereo ? GL_TRUE : GL_FALSE; - - c->redBits = conf->color_buffers[color].r; - c->greenBits = conf->color_buffers[color].g; - c->blueBits = conf->color_buffers[color].b; - c->alphaBits = 0; - - if(GLCAPS_COLOR_BUF_INVALID_VALUE != conf->color_buffers[color].a) { - c->alphaBits = conf->color_buffers[color].a; - } - - c->redMask = -1; - c->greenMask = -1; - c->blueMask = -1; - c->alphaMask = -1; - - c->rgbBits = c->redBits + c->greenBits + c->blueBits + c->alphaBits; - c->indexBits = 0; - - c->accumRedBits = 0; - c->accumGreenBits = 0; - c->accumBlueBits = 0; - c->accumAlphaBits = 0; - - if(conf->total_accum_buffers > 0) { - c->accumRedBits = conf->accum_buffers[accum].r; - c->accumGreenBits = conf->accum_buffers[accum].g; - c->accumBlueBits = conf->accum_buffers[accum].b; - if(GLCAPS_COLOR_BUF_INVALID_VALUE != conf->accum_buffers[accum].a) { - c->accumAlphaBits = conf->accum_buffers[accum].a; - } - } - - c->depthBits = conf->depth_buffers[depth]; - - c->stencilBits = 0; - - if(conf->total_stencil_bit_depths > 0) { - c->stencilBits = conf->stencil_bit_depths[stencil]; - } - - - c->numAuxBuffers = aux ? conf->aux_buffers : 0; - - c->level = 0; - /*TODO what should this be? */ - c->pixmapMode = 0; - - c->visualID = -1; - c->visualType = GLX_TRUE_COLOR; - - if(conf->accelerated) { - c->visualRating = GLX_NONE; - } else { - c->visualRating = GLX_SLOW_VISUAL_EXT; - } - - c->transparentPixel = GLX_NONE; - c->transparentRed = GLX_NONE; - c->transparentGreen = GLX_NONE; - c->transparentAlpha = GLX_NONE; - c->transparentIndex = GLX_NONE; - - c->sampleBuffers = 0; - c->samples = 0; - - if(msample > 0) { - c->sampleBuffers = conf->multisample_buffers; - c->samples = conf->multisample_samples; - } - - /* - * The Apple libGL supports GLXPixmaps and - * GLXPbuffers in direct mode. - */ - /* SGIX_fbconfig / GLX 1.3 */ - c->drawableType = GLX_WINDOW_BIT | GLX_PIXMAP_BIT - | GLX_PBUFFER_BIT; - c->renderType = GLX_RGBA_BIT; - c->xRenderable = GL_TRUE; - c->fbconfigID = -1; - - /* SGIX_pbuffer / GLX 1.3 */ - - /* - * The CGL layer provides a way of retrieving - * the maximum pbuffer width/height, but only - * if we create a context and call glGetIntegerv. - * - * The following values are from a test program - * that does so. - */ - c->maxPbufferWidth = 8192; - c->maxPbufferHeight = 8192; - c->maxPbufferPixels = /*Do we need this?*/ 0; - /* - * There is no introspection for this sort of thing - * with CGL. What should we do realistically? - */ - c->optimalPbufferWidth = 0; - c->optimalPbufferHeight = 0; - - c->visualSelectGroup = 0; - - c->swapMethod = GLX_SWAP_UNDEFINED_OML; - - c->screen = screenNumber; - - /* EXT_texture_from_pixmap */ - c->bindToTextureRgb = 0; - c->bindToTextureRgba = 0; - c->bindToMipmapTexture = 0; - c->bindToTextureTargets = 0; - c->yInverted = 0; - - if(c->next) - c = c->next; - - ++i; - } - } - } - } - } - } - } - } - } - - if(i != numConfigs) - FatalError("The number of __GLXconfig generated does not match the initial calculation!\n"); - - - freeGlCapabilities(&cap); - - return result; -} - /* This is called by __glXInitScreens(). */ static __GLXscreen * __glXAquaScreenProbe(ScreenPtr pScreen) { __GLXAquaScreen *screen; @@ -715,13 +589,7 @@ static __GLXscreen * __glXAquaScreenProbe(ScreenPtr pScreen) { screen->base.swapBarrierFuncs = NULL; screen->base.pScreen = pScreen; - screen->base.fbconfigs = CreateConfigs(&screen->base.numFBConfigs, - pScreen->myNum); - - /* This is set by __glXScreenInit: */ - screen->base.visuals = NULL; - /* This is to be initialized prior to the call to __glXScreenInit: */ - screen->base.numVisuals = 0; + screen->base.fbconfigs = __glXAquaCreateVisualConfigs(&screen->base.numFBConfigs, pScreen->myNum); __glXScreenInit(&screen->base, pScreen); @@ -737,11 +605,12 @@ static __GLXscreen * __glXAquaScreenProbe(ScreenPtr pScreen) { return &screen->base; } +#if 0 // unused static void __glXAquaDrawableCopySubBuffer (__GLXdrawable *drawable, int x, int y, int w, int h) { /*TODO finish me*/ } - +#endif static void __glXAquaDrawableDestroy(__GLXdrawable *base) { /* gstaplin: base is the head of the structure, so it's at the same @@ -1178,9 +1047,9 @@ static void setup_dispatch_table(void) { * <rdar://problem/6953344> gl.h contains incorrect prototypes for glTexImage[123]D */ - SET_TexImage1D(disp, glTexImage1D); - SET_TexImage2D(disp, glTexImage2D); - SET_TexImage3D(disp, glTexImage3D); + SET_TexImage1D(disp, (void *)glTexImage1D); + SET_TexImage2D(disp, (void *)glTexImage2D); + SET_TexImage3D(disp, (void *)glTexImage3D); SET_TexParameterf(disp, glTexParameterf); SET_TexParameterfv(disp, glTexParameterfv); SET_TexParameteri(disp, glTexParameteri); @@ -1565,7 +1434,7 @@ static void setup_dispatch_table(void) { * * void ( * MultiDrawArraysEXT)(GLenum mode, GLint * first, GLsizei * count, GLsizei primcount); */ - SET_MultiDrawArraysEXT(disp, glMultiDrawArraysEXT); + SET_MultiDrawArraysEXT(disp, (void *)glMultiDrawArraysEXT); SET_MultiDrawElementsEXT(disp, glMultiDrawElementsEXT); #endif |