VirtualBox

source: vbox/trunk/src/VBox/HostServices/SharedOpenGL/gldrv.h@ 3793

Last change on this file since 3793 was 3708, checked in by vboxsync, 18 years ago

Merged Linux code from Alexander Eichner.

File size: 6.1 KB
Line 
1/** @file
2 * VBox OpenGL windows helper functions
3 */
4
5/*
6 * Copyright (C) 2006-2007 innotek GmbH
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License as published by the Free Software Foundation,
12 * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
13 * distribution. VirtualBox OSE is distributed in the hope that it will
14 * be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * If you received this file as part of a commercial VirtualBox
17 * distribution, then only the terms of your commercial VirtualBox
18 * license agreement apply instead of the previous paragraph.
19 */
20
21#ifndef ___VBOXGLWIN_H
22#define ___VBOXGLWIN_H
23
24#include <iprt/types.h>
25#include <iprt/mem.h>
26
27#ifdef RT_OS_WINDOWS
28#define VBOX_OGL_DEBUG_WINDOW_OUTPUT
29#elif defined(RT_OS_LINUX)
30#include <X11/Xlib.h>
31#include <GL/glx.h>
32#include <GL/glxext.h>
33
34typedef GLXContextID (*glXGetContextIDEXTProc) (const GLXContext);
35typedef GLXContext (*glXImportContextEXTProc) (Display *, GLXContextID);
36
37#define VBOX_OGL_DEBUG_WINDOW_OUTPUT
38#endif
39
40#ifdef VBOX_OGL_DEBUG_WINDOW_OUTPUT
41#if defined(RT_OS_WINDOWS)
42#define VBOX_OGL_GUEST_TO_HOST_HDC(a) pClient->hdc
43#elif defined(RT_OS_LINUX)
44#define VBOX_OGL_GUEST_TO_HOST_HDC(a) pClient->glxContext
45#endif
46#endif
47
48
49typedef struct
50{
51 uint64_t lastretval;
52 uint32_t ulLastError;
53
54 bool fHasLastError;
55
56 uint8_t *pLastParam;
57 uint32_t cbLastParam;
58
59 struct
60 {
61#ifdef RT_OS_WINDOWS
62 HWND hwnd;
63 HDC hdc;
64 HGLRC hglrc;
65#elif defined RT_OS_LINUX
66 Display *dpy;
67 Window win;
68 GLXContext ctx;
69 GLXFBConfig *fbConfig;
70 XVisualInfo *visinfo;
71#endif
72 } enable;
73
74#ifdef VBOX_OGL_DEBUG_WINDOW_OUTPUT
75#ifdef RT_OS_WINDOWS
76 HWND hwnd;
77 HDC hdc;
78#elif defined RT_OS_LINUX
79 Display *dpy;
80 Window xWindow;
81 GLXFBConfig actFBConfig;
82 int winWidth, winHeight;
83 GLXFBConfig *PixelFormatToFBConfigMapper;
84 int numFBConfigs;
85 GLXContext glxContext;
86 PFNGLXCHOOSEFBCONFIGSGIXPROC glxChooseFBConfig;
87 PFNGLXGETVISUALFROMFBCONFIGSGIXPROC glxGetVisualFromFBConfig;
88 PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC glxCreateNewContext;
89 //glXGetContextIDEXTProc getContextIDPtr;
90 //glXImportContextEXTProc importContextEXTPtr;
91#endif
92#endif
93} VBOXOGLCTX, *PVBOXOGLCTX;
94
95
96#ifndef RT_OS_WINDOWS
97
98typedef uint32_t DWORD;
99typedef uint16_t WORD;
100typedef uint8_t BYTE;
101typedef BYTE BOOL;
102typedef RTGCUINTPTR HANDLE;
103typedef HANDLE HDC;
104typedef HANDLE HGLRC;
105typedef uint32_t UINT;
106typedef uint32_t COLORREF;
107typedef void VOID;
108typedef void * LPVOID;
109typedef int16_t SHORT;
110typedef uint16_t USHORT;
111typedef int64_t INT64;
112typedef int32_t INT32;
113typedef float FLOAT; /* ??? */
114
115#define DECLARE_HANDLE(a) typedef HANDLE a
116#define WINAPI
117
118#define PFD_DOUBLEBUFFER 0x00000001
119#define PFD_STEREO 0x00000002
120#define PFD_DRAW_TO_WINDOW 0x00000004
121#define PFD_SUPPORT_OPENGL 0x00000020
122
123#define PFD_TYPE_RGBA 0
124#define PFD_TYPE_COLORINDEX 1
125
126#define PFD_MAIN_PLANE 0
127#define PFD_OVERLAY_PLANE 1
128#define PFD_UNDERLAY_PLANE (-1)
129
130typedef struct
131{
132 WORD nSize;
133 WORD nVersion;
134 DWORD dwFlags;
135 BYTE iPixelType;
136 BYTE cColorBits;
137 BYTE cRedBits;
138 BYTE cRedShift;
139 BYTE cGreenBits;
140 BYTE cGreenShift;
141 BYTE cBlueBits;
142 BYTE cBlueShift;
143 BYTE cAlphaBits;
144 BYTE cAlphaShift;
145 BYTE cAccumBits;
146 BYTE cAccumRedBits;
147 BYTE cAccumGreenBits;
148 BYTE cAccumBlueBits;
149 BYTE cAccumAlphaBits;
150 BYTE cDepthBits;
151 BYTE cStencilBits;
152 BYTE cAuxBuffers;
153 BYTE iLayerType;
154 BYTE bReserved;
155 DWORD dwLayerMask;
156 DWORD dwVisibleMask;
157 DWORD dwDamageMask;
158} PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR, *LPPIXELFORMATDESCRIPTOR;
159
160typedef struct
161{
162 WORD nSize;
163 WORD nVersion;
164 DWORD dwFlags;
165 BYTE iPixelType;
166 BYTE cColorBits;
167 BYTE cRedBits;
168 BYTE cRedShift;
169 BYTE cGreenBits;
170 BYTE cGreenShift;
171 BYTE cBlueBits;
172 BYTE cBlueShift;
173 BYTE cAlphaBits;
174 BYTE cAlphaShift;
175 BYTE cAccumBits;
176 BYTE cAccumRedBits;
177 BYTE cAccumGreenBits;
178 BYTE cAccumBlueBits;
179 BYTE cAccumAlphaBits;
180 BYTE cDepthBits;
181 BYTE cStencilBits;
182 BYTE cAuxBuffers;
183 BYTE iLayerPlane;
184 BYTE bReserved;
185 COLORREF crTransparent;
186} LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, LPLAYERPLANEDESCRIPTOR;
187
188#endif
189
190void vboxglDrvReleaseContext(VBOXOGLCTX *pClient, uint8_t *pCmdBuffer);
191void vboxglDrvCreateContext(VBOXOGLCTX *pClient, uint8_t *pCmdBuffer);
192void vboxglDrvDeleteContext(VBOXOGLCTX *pClient, uint8_t *pCmdBuffer);
193void vboxglDrvCopyContext(VBOXOGLCTX *pClient, uint8_t *pCmdBuffer);
194void vboxglDrvSetContext(VBOXOGLCTX *pClient, uint8_t *pCmdBuffer);
195void vboxglDrvCreateLayerContext(VBOXOGLCTX *pClient, uint8_t *pCmdBuffer);
196void vboxglDrvShareLists(VBOXOGLCTX *pClient, uint8_t *pCmdBuffer);
197void vboxglDrvDescribeLayerPlane(VBOXOGLCTX *pClient, uint8_t *pCmdBuffer);
198void vboxglDrvSetLayerPaletteEntries(VBOXOGLCTX *pClient, uint8_t *pCmdBuffer);
199void vboxglDrvGetLayerPaletteEntries(VBOXOGLCTX *pClient, uint8_t *pCmdBuffer);
200void vboxglDrvRealizeLayerPalette(VBOXOGLCTX *pClient, uint8_t *pCmdBuffer);
201void vboxglDrvSwapLayerBuffers(VBOXOGLCTX *pClient, uint8_t *pCmdBuffer);
202void vboxglDrvDescribePixelFormat(VBOXOGLCTX *pClient, uint8_t *pCmdBuffer);
203void vboxglDrvSetPixelFormat(VBOXOGLCTX *pClient, uint8_t *pCmdBuffer);
204void vboxglDrvSwapBuffers(VBOXOGLCTX *pClient, uint8_t *pCmdBuffer);
205
206int vboxglEnableOpenGL(VBOXOGLCTX *pClient);
207int vboxglDisableOpenGL(VBOXOGLCTX *pClient);
208
209RTUINTPTR vboxDrvIsExtensionAvailable(char *pszExtFunctionName);
210
211#endif /* !___VBOXGLWIN_H */
Note: See TracBrowser for help on using the repository browser.

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