17d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston/* 27d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * GLX implementation that uses Apple's OpenGL.framework 37d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * 47d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * Copyright (c) 2007-2011 Apple Inc. 57d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * Copyright (c) 2004 Torrey T. Lyons. All Rights Reserved. 67d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * Copyright (c) 2002 Greg Parker. All Rights Reserved. 77d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * 87d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * Portions of this file are copied from Mesa's xf86glx.c, 97d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * which contains the following copyright: 107d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * 117d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. 127d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * All Rights Reserved. 137d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * 147d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * Permission is hereby granted, free of charge, to any person obtaining a 157d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * copy of this software and associated documentation files (the "Software"), 167d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * to deal in the Software without restriction, including without limitation 177d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * the rights to use, copy, modify, merge, publish, distribute, sublicense, 187d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * and/or sell copies of the Software, and to permit persons to whom the 197d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * Software is furnished to do so, subject to the following conditions: 207d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * 217d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * The above copyright notice and this permission notice shall be included in 227d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * all copies or substantial portions of the Software. 237d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * 247d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 257d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 267d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 277d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 287d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 297d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 307d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston * DEALINGS IN THE SOFTWARE. 317d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston */ 327d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston 337d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston#include <assert.h> 347d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston#include <dlfcn.h> 357d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston#include <stdlib.h> 367d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston#include <string.h> 377d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston#include <stdio.h> 387d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston 397d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston#include <GL/gl.h> 407d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston 417d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston#include "glapi.h" 427d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston#include "glapitable.h" 434bb748b609288205ddea750550185d7642025bffChia-I Wu#include "main/dispatch.h" 447d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston 457d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston#include "apple_glx.h" 467d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston#include "apple_xgl_api.h" 47cb5a5f055b6a9f05aed927d28a242bde81dd5bfcJeremy Huddleston#include "apple_cgl.h" 487d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston 497d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddlestonstruct _glapi_table * __ogl_framework_api = NULL; 507d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddlestonstruct _glapi_table * __applegl_api = NULL; 517d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston 529f2abbee6215d89e48b7fe042f8a905997f5c232Jeremy Huddlestonstatic void _apple_glapi_create_table(void) { 539f2abbee6215d89e48b7fe042f8a905997f5c232Jeremy Huddleston if (__applegl_api) 547d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston return; 557d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston 56cb5a5f055b6a9f05aed927d28a242bde81dd5bfcJeremy Huddleston __ogl_framework_api = _glapi_create_table_from_handle(apple_cgl_get_dl_handle(), "gl"); 577d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston assert(__ogl_framework_api); 587d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston 597d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston __applegl_api = malloc(sizeof(struct _glapi_table)); 607d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston assert(__applegl_api); 617d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston memcpy(__applegl_api, __ogl_framework_api, sizeof(struct _glapi_table)); 627d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston 637d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston SET_ReadPixels(__applegl_api, __applegl_glReadPixels); 647d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston SET_CopyPixels(__applegl_api, __applegl_glCopyPixels); 657d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston SET_CopyColorTable(__applegl_api, __applegl_glCopyColorTable); 667d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston SET_DrawBuffer(__applegl_api, __applegl_glDrawBuffer); 677d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston SET_DrawBuffersARB(__applegl_api, __applegl_glDrawBuffersARB); 687d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston SET_Viewport(__applegl_api, __applegl_glViewport); 699f2abbee6215d89e48b7fe042f8a905997f5c232Jeremy Huddleston} 707d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston 719f2abbee6215d89e48b7fe042f8a905997f5c232Jeremy Huddlestonvoid apple_glapi_set_dispatch(void) { 729f2abbee6215d89e48b7fe042f8a905997f5c232Jeremy Huddleston _apple_glapi_create_table(); 737d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston _glapi_set_dispatch(__applegl_api); 747d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston} 759f2abbee6215d89e48b7fe042f8a905997f5c232Jeremy Huddleston 769f2abbee6215d89e48b7fe042f8a905997f5c232Jeremy Huddlestonvoid apple_glapi_oglfw_viewport_scissor(GLint x, GLint y, GLsizei width, GLsizei height) { 779f2abbee6215d89e48b7fe042f8a905997f5c232Jeremy Huddleston _apple_glapi_create_table(); 789f2abbee6215d89e48b7fe042f8a905997f5c232Jeremy Huddleston __ogl_framework_api->Viewport(x, y, width, height); 799f2abbee6215d89e48b7fe042f8a905997f5c232Jeremy Huddleston __ogl_framework_api->Scissor(x, y, width, height); 809f2abbee6215d89e48b7fe042f8a905997f5c232Jeremy Huddleston} 81