renderspu.h revision a79e8ee6782877eb8d4c8363875379d49b23acd8
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync/* Copyright (c) 2001, Stanford University
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync * All rights reserved.
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync *
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync * See the file LICENSE.txt for information on redistributing this software.
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#ifndef CR_RENDERSPU_H
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#define CR_RENDERSPU_H
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#ifdef WINDOWS
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#define WIN32_LEAN_AND_MEAN
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#include <windows.h>
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#define RENDER_APIENTRY __stdcall
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#define snprintf _snprintf
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#elif defined(DARWIN)
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync# ifndef VBOX_WITH_COCOA_QT
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync# include <AGL/AGL.h>
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync# else
8f28e374e0b8ea801e7b5364bccd8a7e0a6211d3vboxsync# include "renderspu_cocoa_helper.h"
8f28e374e0b8ea801e7b5364bccd8a7e0a6211d3vboxsync# endif
8f28e374e0b8ea801e7b5364bccd8a7e0a6211d3vboxsync#define RENDER_APIENTRY
8f28e374e0b8ea801e7b5364bccd8a7e0a6211d3vboxsync#else
8f28e374e0b8ea801e7b5364bccd8a7e0a6211d3vboxsync#include <GL/glx.h>
8f28e374e0b8ea801e7b5364bccd8a7e0a6211d3vboxsync#define RENDER_APIENTRY
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#include "cr_threads.h"
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#include "cr_spu.h"
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#include "cr_hash.h"
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#include "cr_server.h"
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#include <iprt/cdefs.h>
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
ea4433aedd4105e6599e57e0c5f6cb32a68e963cvboxsync#define MAX_VISUALS 32
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#ifdef RT_OS_DARWIN
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync# ifndef VBOX_WITH_COCOA_QT
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncenum
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync{
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync /* Event classes */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync kEventClassVBox = 'vbox',
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync /* Event kinds */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync kEventVBoxShowWindow = 'swin',
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync kEventVBoxHideWindow = 'hwin',
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync kEventVBoxMoveWindow = 'mwin',
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync kEventVBoxResizeWindow = 'rwin',
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync kEventVBoxDisposeWindow = 'dwin',
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync kEventVBoxUpdateDock = 'udck',
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync kEventVBoxUpdateContext = 'uctx',
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync kEventVBoxBoundsChanged = 'bchg'
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync};
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncpascal OSStatus windowEvtHndlr(EventHandlerCallRef myHandler, EventRef event, void* userData);
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync# endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif /* RT_OS_DARWIN */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync/**
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync * Visual info
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsynctypedef struct {
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLbitfield visAttribs;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync const char *displayName;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#if defined(WINDOWS)
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync// HDC device_context;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#elif defined(DARWIN)
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync# ifndef VBOX_WITH_COCOA_QT
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync WindowRef window;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync# endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#elif defined(GLX)
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync Display *dpy;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync XVisualInfo *visual;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#ifdef GLX_VERSION_1_3
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLXFBConfig fbconfig;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif /* GLX_VERSION_1_3 */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync} VisualInfo;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync/**
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync * Window info
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsynctypedef struct {
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int x, y;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int width, height;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int id; /**< integer window ID */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync VisualInfo *visual;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLboolean mapPending;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLboolean visible;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLboolean everCurrent; /**< has this window ever been bound? */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync char *title;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#if defined(WINDOWS)
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync HDC nativeWindow; /**< for render_to_app_window */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync HWND hWnd;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync HDC device_context;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#elif defined(DARWIN)
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync# ifndef VBOX_WITH_COCOA_QT
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync WindowRef window;
ea4433aedd4105e6599e57e0c5f6cb32a68e963cvboxsync WindowRef nativeWindow; /**< for render_to_app_window */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync WindowRef appWindow;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync EventHandlerUPP event_handler;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLint bufferName;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync AGLContext dummyContext;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync RgnHandle hVisibleRegion;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync /* unsigned long context_ptr; */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync# else
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync NativeNSViewRef window;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync NativeNSViewRef nativeWindow; /**< for render_to_app_window */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync NativeNSOpenGLContextRef *currentCtx;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync# endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#elif defined(GLX)
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync Window window;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync Window nativeWindow; /**< for render_to_app_window */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync Window appWindow; /**< Same as nativeWindow but for garbage collections purposes */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int nvSwapGroup;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#ifdef USE_OSMESA
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLubyte *buffer; /**< for rendering to off screen buffer. */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int in_buffer_width;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int in_buffer_height;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync} WindowInfo;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync/**
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync * Context Info
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsynctypedef struct _ContextInfo {
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int id; /**< integer context ID */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync VisualInfo *visual;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLboolean everCurrent;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLboolean haveWindowPosARB;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync WindowInfo *currentWindow;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#if defined(WINDOWS)
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync HGLRC hRC;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#elif defined(DARWIN)
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync# ifndef VBOX_WITH_COCOA_QT
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync AGLContext context;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync# else
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync NativeNSOpenGLContextRef context;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync# endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#elif defined(GLX)
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLXContext context;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync struct _ContextInfo *shared;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync char *extensionString;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync} ContextInfo;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync/**
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync * Barrier info
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsynctypedef struct {
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync CRbarrier barrier;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLuint count;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync} Barrier;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync/**
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync * Renderspu state info
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsynctypedef struct {
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync SPUDispatchTable self;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int id;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync unsigned int window_id;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync unsigned int context_id;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync /** config options */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync /*@{*/
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync char *window_title;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int defaultX, defaultY;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync unsigned int defaultWidth, defaultHeight;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int default_visual;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int use_L2;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int fullscreen, ontop;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync char display_string[100];
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#if defined(GLX)
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int try_direct;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int force_direct;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int sync;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int render_to_app_window;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int render_to_crut_window;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int crut_drawable;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int resizable;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int use_lut8, lut8[3][256];
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int borderless;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int nvSwapGroup;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int ignore_papi;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int ignore_window_moves;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int pbufferWidth, pbufferHeight;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int use_glxchoosevisual;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int draw_bbox;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync /*@}*/
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync CRServer *server;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int gather_port;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int gather_userbuf_size;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync CRConnection **gather_conns;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLint drawCursor;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLint cursorX, cursorY;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int numVisuals;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync VisualInfo visuals[MAX_VISUALS];
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync CRHashTable *windowTable;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync CRHashTable *contextTable;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#ifndef CHROMIUM_THREADSAFE
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync ContextInfo *currentContext;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync crOpenGLInterface ws; /**< Window System interface */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync CRHashTable *barrierHash;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int is_swap_master, num_swap_clients;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int swap_mtu;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync char *swap_master_url;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync CRConnection **swap_conns;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#ifdef USE_OSMESA
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync /** Off screen rendering hooks. */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int use_osmesa;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync OSMesaContext (*OSMesaCreateContext)( GLenum format, OSMesaContext sharelist );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLboolean (* OSMesaMakeCurrent)( OSMesaContext ctx,
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLubyte *buffer,
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLenum type,
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLsizei width,
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLsizei height );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync void (*OSMesaDestroyContext)( OSMesaContext ctx );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#ifdef RT_OS_WINDOWS
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync DWORD dwWinThreadId;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync HANDLE hWinThreadReadyEvent;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#ifdef RT_OS_DARWIN
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync# ifndef VBOX_WITH_COCOA_QT
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync RgnHandle hRootVisibleRegion;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync RTSEMFASTMUTEX syncMutex;
ea4433aedd4105e6599e57e0c5f6cb32a68e963cvboxsync EventHandlerUPP hParentEventHandler;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync WindowGroupRef pParentGroup;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync WindowGroupRef pMasterGroup;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync GLint currentBufferName;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync uint64_t uiDockUpdateTS;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync bool fInit;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync# endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif /* RT_OS_DARWIN */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync int force_hidden_wdn_create;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync} RenderSPU;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#ifdef RT_OS_WINDOWS
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync/* Asks window thread to create new window.
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync msg.lParam - holds pointer to CREATESTRUCT structure
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync note that lpCreateParams is used to specify address to store handle of created window
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync msg.wParam - unused, should be NULL
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync*/
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#define WM_VBOX_RENDERSPU_CREATE_WINDOW (WM_APP+1)
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsynctypedef struct _VBOX_RENDERSPU_DESTROY_WINDOW {
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync HWND hWnd; /* handle to window to destroy */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync} VBOX_RENDERSPU_DESTROY_WINDOW;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync/* Asks window thread to destroy previously created window.
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync msg.lParam - holds pointer to RENDERSPU_VBOX_WINDOW_DESTROY structure
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync msg.wParam - unused, should be NULL
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync*/
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#define WM_VBOX_RENDERSPU_DESTROY_WINDOW (WM_APP+2)
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern RenderSPU render_spu;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync/* @todo remove this hack */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern uint64_t render_spu_parent_window_id;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#ifdef CHROMIUM_THREADSAFE
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern CRtsd _RenderTSD;
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#define GET_CONTEXT(T) ContextInfo *T = (ContextInfo *) crGetTSD(&_RenderTSD)
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#else
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#define GET_CONTEXT(T) ContextInfo *T = render_spu.currentContext
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspuSetVBoxConfiguration( RenderSPU *spu );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspuMakeVisString( GLbitfield visAttribs, char *s );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern VisualInfo *renderspuFindVisual(const char *displayName, GLbitfield visAttribs );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern GLboolean renderspu_SystemInitVisual( VisualInfo *visual );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern GLboolean renderspu_SystemCreateContext( VisualInfo *visual, ContextInfo *context, ContextInfo *sharedContext );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemDestroyContext( ContextInfo *context );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern GLboolean renderspu_SystemCreateWindow( VisualInfo *visual, GLboolean showIt, WindowInfo *window );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern GLboolean renderspu_SystemVBoxCreateWindow( VisualInfo *visual, GLboolean showIt, WindowInfo *window );
ea4433aedd4105e6599e57e0c5f6cb32a68e963cvboxsyncextern void renderspu_SystemDestroyWindow( WindowInfo *window );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemWindowSize( WindowInfo *window, GLint w, GLint h );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemGetWindowGeometry( WindowInfo *window, GLint *x, GLint *y, GLint *w, GLint *h );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemGetMaxWindowSize( WindowInfo *window, GLint *w, GLint *h );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemWindowPosition( WindowInfo *window, GLint x, GLint y );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemWindowVisibleRegion(WindowInfo *window, GLint cRects, GLint* pRects);
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemWindowApplyVisibleRegion(WindowInfo *window);
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#ifdef RT_OS_DARWIN
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemSetRootVisibleRegion(GLint cRects, GLint *pRects);
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync# ifdef VBOX_WITH_COCOA_QT
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemFlush();
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemFinish();
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemBindFramebufferEXT(GLenum target, GLuint framebuffer);
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type);
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemGetIntegerv(GLenum pname, GLint *params);
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemReadBuffer(GLenum mode);
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemDrawBuffer(GLenum mode);
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync# endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemShowWindow( WindowInfo *window, GLboolean showIt );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemMakeCurrent( WindowInfo *window, GLint windowInfor, ContextInfo *context );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemSwapBuffers( WindowInfo *window, GLint flags );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_SystemReparentWindow(WindowInfo *window);
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void renderspu_GCWindow(void);
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern int renderspuCreateFunctions( SPUNamedFunctionTable table[] );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern GLint RENDER_APIENTRY renderspuWindowCreate( const char *dpyName, GLint visBits );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncvoid RENDER_APIENTRY renderspuWindowDestroy( GLint win );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern GLint RENDER_APIENTRY renderspuCreateContext( const char *dpyname, GLint visBits, GLint shareCtx );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void RENDER_APIENTRY renderspuMakeCurrent(GLint crWindow, GLint nativeWindow, GLint ctx);
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern void RENDER_APIENTRY renderspuSwapBuffers( GLint window, GLint flags );
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#ifdef __cplusplus
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncextern "C" {
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncDECLEXPORT(void) renderspuSetWindowId(uint64_t winId);
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncDECLEXPORT(void) renderspuSetRootVisibleRegion(GLint cRects, GLint *pRects);
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsyncDECLEXPORT(void) renderspuReparentWindow(GLint window);
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#ifdef __cplusplus
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync}
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync#endif /* CR_RENDERSPU_H */
65c72795ab90d3daefa759b716fbb5c6352c7a56vboxsync