1ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* 27d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston Copyright (c) 2009-2011 Apple Inc. 3ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 4ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston Permission is hereby granted, free of charge, to any person 5ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston obtaining a copy of this software and associated documentation files 6ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston (the "Software"), to deal in the Software without restriction, 7ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston including without limitation the rights to use, copy, modify, merge, 8ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston publish, distribute, sublicense, and/or sell copies of the Software, 9ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston and to permit persons to whom the Software is furnished to do so, 10ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston subject to the following conditions: 11ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 12ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston The above copyright notice and this permission notice shall be 13ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston included in all copies or substantial portions of the Software. 14ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 15ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston NONINFRINGEMENT. IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT 19ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston DEALINGS IN THE SOFTWARE. 23ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 24ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston Except as contained in this notice, the name(s) of the above 25ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston copyright holders shall not be used in advertising or otherwise to 26ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston promote the sale, use or other dealings in this Software without 27ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston prior written authorization. 28ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston*/ 29ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 30a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston/* This should be removed once stereo hardware bugs are fixed 31a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston * <rdar://problem/6729006> 32a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston */ 33a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston 34ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include <stdbool.h> 35a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston 36a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston#define GL_GLEXT_PROTOTYPES 37a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston#include <GL/gl.h> 38a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston#include <GL/glext.h> 39a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston 40a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston#include "glxclient.h" 41ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include "apple_glx_context.h" 42a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston#include "apple_xgl_api.h" 437d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston#include "glapitable.h" 447d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston 457d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddlestonextern struct _glapi_table * __ogl_framework_api; 46ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 47ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* 48ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston * These are special functions for stereoscopic support 49ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston * differences in MacOS X. 50ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston */ 51ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonvoid 527d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston__applegl_glDrawBuffer(GLenum mode) 53ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{ 5422613d1670e3aafcfd3b95191b908a0adabe3eb9Jeremy Huddleston struct glx_context * gc = __glXGetCurrentContext(); 55ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 5680b280db883edc9550484dba03bd5c124b6a9bf9Jeremy Huddleston if (gc && apple_glx_context_uses_stereo(gc->driContext)) { 57ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston GLenum buf[2]; 58ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston GLsizei n = 0; 59ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 60ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston switch (mode) { 61ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston case GL_BACK: 62ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston buf[0] = GL_BACK_LEFT; 63ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston buf[1] = GL_BACK_RIGHT; 64ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston n = 2; 65ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston break; 66ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston case GL_FRONT: 67ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston buf[0] = GL_FRONT_LEFT; 68ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston buf[1] = GL_FRONT_RIGHT; 69ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston n = 2; 70ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston break; 71ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 72ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston default: 73ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston buf[0] = mode; 74ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston n = 1; 75ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston break; 76ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston } 77ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 787d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston __ogl_framework_api->DrawBuffersARB(n, buf); 79ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston } 80ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston else { 817d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston __ogl_framework_api->DrawBuffer(mode); 82ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston } 83ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston} 84ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 85ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 86ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonvoid 877d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston__applegl_glDrawBuffersARB(GLsizei n, const GLenum * bufs) 88ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{ 8922613d1670e3aafcfd3b95191b908a0adabe3eb9Jeremy Huddleston struct glx_context * gc = __glXGetCurrentContext(); 90ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 9180b280db883edc9550484dba03bd5c124b6a9bf9Jeremy Huddleston if (gc && apple_glx_context_uses_stereo(gc->driContext)) { 92ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston GLenum newbuf[n + 2]; 93ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston GLsizei i, outi = 0; 94ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston bool have_back = false; 95ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston bool have_front = false; 96ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 97ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston for (i = 0; i < n; ++i) { 98ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston if (GL_BACK == bufs[i]) { 99ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston have_back = true; 100ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston } 101ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston else if (GL_FRONT == bufs[i]) { 102ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston have_back = true; 103ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston } 104ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston else { 105ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston newbuf[outi++] = bufs[i]; 106ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston } 107ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston } 108ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 109ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston if (have_back) { 110ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston newbuf[outi++] = GL_BACK_LEFT; 111ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston newbuf[outi++] = GL_BACK_RIGHT; 112ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston } 113ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 114ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston if (have_front) { 115ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston newbuf[outi++] = GL_FRONT_LEFT; 116ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston newbuf[outi++] = GL_FRONT_RIGHT; 117ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston } 118ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 1197d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston __ogl_framework_api->DrawBuffersARB(outi, newbuf); 120ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston } 121ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston else { 1227d215e7c4d0ca8a18d91d4f30f79b97835a6d6c4Jeremy Huddleston __ogl_framework_api->DrawBuffersARB(n, bufs); 123ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston } 124ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston} 125