VirtualBox

source: vbox/trunk/src/VBox/HostServices/SharedOpenGL/render/renderspu.h@ 17450

最後變更 在這個檔案從17450是 15532,由 vboxsync 提交於 16 年 前

crOpenGL: export to OSE

  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:keywords 設為 Id
檔案大小: 7.2 KB
 
1/* Copyright (c) 2001, Stanford University
2 * All rights reserved.
3 *
4 * See the file LICENSE.txt for information on redistributing this software.
5 */
6
7#ifndef CR_RENDERSPU_H
8#define CR_RENDERSPU_H
9
10#ifdef WINDOWS
11#define WIN32_LEAN_AND_MEAN
12#include <windows.h>
13#define RENDER_APIENTRY __stdcall
14#elif defined(DARWIN)
15#include <AGL/AGL.h>
16#define RENDER_APIENTRY
17#else
18#include <GL/glx.h>
19#define RENDER_APIENTRY
20#endif
21#include "cr_threads.h"
22#include "cr_spu.h"
23#include "cr_hash.h"
24#include "cr_server.h"
25
26#include <iprt/cdefs.h>
27
28#define MAX_VISUALS 32
29
30/**
31 * Visual info
32 */
33typedef struct {
34 GLbitfield visAttribs;
35 const char *displayName;
36#if defined(WINDOWS)
37 HDC device_context;
38#elif defined(DARWIN)
39 WindowRef window;
40#elif defined(GLX)
41 Display *dpy;
42 XVisualInfo *visual;
43#ifdef GLX_VERSION_1_3
44 GLXFBConfig fbconfig;
45#endif /* GLX_VERSION_1_3 */
46#endif
47} VisualInfo;
48
49/**
50 * Window info
51 */
52typedef struct {
53 int x, y;
54 int width, height;
55 int id; /**< integer window ID */
56 VisualInfo *visual;
57 GLboolean mapPending;
58 GLboolean visible;
59 GLboolean everCurrent; /**< has this window ever been bound? */
60 char *title;
61#if defined(WINDOWS)
62 HDC nativeWindow; /**< for render_to_app_window */
63 HWND hWnd;
64 HDC device_context;
65#elif defined(DARWIN)
66 WindowRef window;
67 WindowRef nativeWindow; /**< for render_to_app_window */
68 WindowRef appWindow;
69 EventHandlerUPP event_handler;
70 GLint bufferName;
71 AGLContext dummyContext;
72 /* unsigned long context_ptr; */
73#elif defined(GLX)
74 Window window;
75 Window nativeWindow; /**< for render_to_app_window */
76 Window appWindow; /**< Same as nativeWindow but for garbage collections purposes */
77#endif
78 int nvSwapGroup;
79
80#ifdef USE_OSMESA
81 GLubyte *buffer; /**< for rendering to off screen buffer. */
82 int in_buffer_width;
83 int in_buffer_height;
84#endif
85
86} WindowInfo;
87
88/**
89 * Context Info
90 */
91typedef struct _ContextInfo {
92 int id; /**< integer context ID */
93 VisualInfo *visual;
94 GLboolean everCurrent;
95 GLboolean haveWindowPosARB;
96 WindowInfo *currentWindow;
97#if defined(WINDOWS)
98 HGLRC hRC;
99#elif defined(DARWIN)
100 AGLContext context;
101#elif defined(GLX)
102 GLXContext context;
103#endif
104 struct _ContextInfo *shared;
105 char *extensionString;
106} ContextInfo;
107
108/**
109 * Barrier info
110 */
111typedef struct {
112 CRbarrier barrier;
113 GLuint count;
114} Barrier;
115
116/**
117 * Renderspu state info
118 */
119typedef struct {
120 SPUDispatchTable self;
121 int id;
122
123 unsigned int window_id;
124 unsigned int context_id;
125
126 /** config options */
127 /*@{*/
128 char *window_title;
129 int defaultX, defaultY;
130 unsigned int defaultWidth, defaultHeight;
131 int default_visual;
132 int use_L2;
133 int fullscreen, ontop;
134 char display_string[100];
135#if defined(GLX)
136 int try_direct;
137 int force_direct;
138 int sync;
139#endif
140 int render_to_app_window;
141 int render_to_crut_window;
142 int crut_drawable;
143 int resizable;
144 int use_lut8, lut8[3][256];
145 int borderless;
146 int nvSwapGroup;
147 int ignore_papi;
148 int ignore_window_moves;
149 int pbufferWidth, pbufferHeight;
150 int use_glxchoosevisual;
151 int draw_bbox;
152 /*@}*/
153
154 CRServer *server;
155 int gather_port;
156 int gather_userbuf_size;
157 CRConnection **gather_conns;
158
159 GLint drawCursor;
160 GLint cursorX, cursorY;
161
162 int numVisuals;
163 VisualInfo visuals[MAX_VISUALS];
164
165 CRHashTable *windowTable;
166 CRHashTable *contextTable;
167
168#ifndef CHROMIUM_THREADSAFE
169 ContextInfo *currentContext;
170#endif
171
172 crOpenGLInterface ws; /**< Window System interface */
173
174 CRHashTable *barrierHash;
175
176 int is_swap_master, num_swap_clients;
177 int swap_mtu;
178 char *swap_master_url;
179 CRConnection **swap_conns;
180
181#ifdef USE_OSMESA
182 /** Off screen rendering hooks. */
183 int use_osmesa;
184
185 OSMesaContext (*OSMesaCreateContext)( GLenum format, OSMesaContext sharelist );
186 GLboolean (* OSMesaMakeCurrent)( OSMesaContext ctx,
187 GLubyte *buffer,
188 GLenum type,
189 GLsizei width,
190 GLsizei height );
191 void (*OSMesaDestroyContext)( OSMesaContext ctx );
192#endif
193
194#ifdef RT_OS_WINDOWS
195 DWORD dwWinThreadId;
196 HANDLE hWinThreadReadyEvent;
197#endif
198} RenderSPU;
199
200#ifdef RT_OS_WINDOWS
201
202/* Asks window thread to create new window.
203 msg.lParam - holds pointer to CREATESTRUCT structure
204 note that lpCreateParams is used to specify address to store handle of created window
205 msg.wParam - unused, should be NULL
206*/
207#define WM_VBOX_RENDERSPU_CREATE_WINDOW (WM_APP+1)
208
209typedef struct _VBOX_RENDERSPU_DESTROY_WINDOW {
210 HWND hWnd; /* handle to window to destroy */
211} VBOX_RENDERSPU_DESTROY_WINDOW;
212
213/* Asks window thread to destroy previously created window.
214 msg.lParam - holds pointer to RENDERSPU_VBOX_WINDOW_DESTROY structure
215 msg.wParam - unused, should be NULL
216*/
217#define WM_VBOX_RENDERSPU_DESTROY_WINDOW (WM_APP+2)
218
219#endif
220
221extern RenderSPU render_spu;
222
223/* @todo remove this hack */
224extern unsigned int render_spu_parent_window_id;
225
226#ifdef CHROMIUM_THREADSAFE
227extern CRtsd _RenderTSD;
228#define GET_CONTEXT(T) ContextInfo *T = (ContextInfo *) crGetTSD(&_RenderTSD)
229#else
230#define GET_CONTEXT(T) ContextInfo *T = render_spu.currentContext
231#endif
232
233extern void renderspuSetVBoxConfiguration( RenderSPU *spu );
234extern void renderspuMakeVisString( GLbitfield visAttribs, char *s );
235extern VisualInfo *renderspuFindVisual(const char *displayName, GLbitfield visAttribs );
236extern GLboolean renderspu_SystemInitVisual( VisualInfo *visual );
237extern GLboolean renderspu_SystemCreateContext( VisualInfo *visual, ContextInfo *context, ContextInfo *sharedContext );
238extern void renderspu_SystemDestroyContext( ContextInfo *context );
239extern GLboolean renderspu_SystemCreateWindow( VisualInfo *visual, GLboolean showIt, WindowInfo *window );
240extern GLboolean renderspu_SystemVBoxCreateWindow( VisualInfo *visual, GLboolean showIt, WindowInfo *window );
241extern void renderspu_SystemDestroyWindow( WindowInfo *window );
242extern void renderspu_SystemWindowSize( WindowInfo *window, GLint w, GLint h );
243extern void renderspu_SystemGetWindowGeometry( WindowInfo *window, GLint *x, GLint *y, GLint *w, GLint *h );
244extern void renderspu_SystemGetMaxWindowSize( WindowInfo *window, GLint *w, GLint *h );
245extern void renderspu_SystemWindowPosition( WindowInfo *window, GLint x, GLint y );
246extern void renderspu_SystemWindowVisibleRegion(WindowInfo *window, GLint cRects, GLint* pRects);
247extern void renderspu_SystemShowWindow( WindowInfo *window, GLboolean showIt );
248extern void renderspu_SystemMakeCurrent( WindowInfo *window, GLint windowInfor, ContextInfo *context );
249extern void renderspu_SystemSwapBuffers( WindowInfo *window, GLint flags );
250extern void renderspu_GCWindow(void);
251extern int renderspuCreateFunctions( SPUNamedFunctionTable table[] );
252
253extern GLint RENDER_APIENTRY renderspuWindowCreate( const char *dpyName, GLint visBits );
254extern GLint RENDER_APIENTRY renderspuCreateContext( const char *dpyname, GLint visBits, GLint shareCtx );
255extern void RENDER_APIENTRY renderspuMakeCurrent(GLint crWindow, GLint nativeWindow, GLint ctx);
256extern void RENDER_APIENTRY renderspuSwapBuffers( GLint window, GLint flags );
257
258#ifdef __cplusplus
259extern "C" {
260#endif
261DECLEXPORT(void) renderspuSetWindowId(unsigned int winId);
262#ifdef __cplusplus
263}
264#endif
265
266#endif /* CR_RENDERSPU_H */
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette