VBoxOGL.h revision 4604ab7d38c2bd2dfc255aa1facffdf81c1c9153
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/** @file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * VirtualBox Windows NT/2000/XP guest OpenGL ICD
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Copyright (C) 2006-2007 Sun Microsystems, Inc.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * available from http://www.virtualbox.org. This file is free software;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * General Public License (GPL) as published by the Free Software
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync *
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync * additional information or have any questions.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync */
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync#ifndef __VBOXOGL_H__
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define __VBOXOGL_H__
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <windows.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* get rid of the inconsistent dll linkage warnings */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#undef WINGDIAPI
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define WINGDIAPI
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include "GL/gl.h"
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define WGL_WGLEXT_PROTOTYPES
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/HostServices/wglext.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <iprt/cdefs.h>
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync#include <iprt/assert.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/HostServices/VBoxOpenGLSvc.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#include <VBox/HostServices/VBoxOGLOp.h>
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef struct _icdTable
61fa69e2bc9fc9e7490feed1c020273f3ddb238dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync DWORD size;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync PROC table[336];
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync} ICDTABLE, *PICDTABLE;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef struct
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync HANDLE hGuestDrv;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync} VBOX_OGL_CTX, *PVBOX_OGL_CTX;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* HGCM macro */
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync#define VBOX_INIT_CALL(a, b, c) \
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync (a)->result = VINF_SUCCESS; \
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync (a)->u32ClientID = (c)->u32ClientID; \
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync (a)->u32Function = VBOXOGL_FN_##b; \
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync (a)->cParms = VBOXOGL_CPARMS_##b
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/* glDrawElement internal state */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VBOX_OGL_DRAWELEMENT_VERTEX 0
afed5ab737f4aacfae3fe73776f40e989190a7cavboxsync#define VBOX_OGL_DRAWELEMENT_TEXCOORD 1
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VBOX_OGL_DRAWELEMENT_COLOR 2
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VBOX_OGL_DRAWELEMENT_EDGEFLAG 3
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VBOX_OGL_DRAWELEMENT_INDEX 4
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VBOX_OGL_DRAWELEMENT_NORMAL 5
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define VBOX_OGL_DRAWELEMENT_MAX 6
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef struct
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync GLint size;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync GLenum type;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync GLsizei stride;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t cbDataType;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync const GLvoid *pointer;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync bool fValid;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync} VBOX_OGL_DRAWELEMENT;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsynctypedef struct
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync{
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t u32ClientID;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync GLenum glLastError;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint32_t cCommands;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint8_t *pCmdBuffer;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint8_t *pCmdBufferEnd;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync uint8_t *pCurrentCmd;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync /* Internal OpenGL state variables */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync VBOX_OGL_DRAWELEMENT Pointer[VBOX_OGL_DRAWELEMENT_MAX];
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync} VBOX_OGL_THREAD_CTX, *PVBOX_OGL_THREAD_CTX;
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncextern HINSTANCE hDllVBoxOGL;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncextern char szOpenGLVersion[256];
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncextern char szOpenGLExtensions[8192];
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid APIENTRY glSetError(GLenum glNewError);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync#ifdef DEBUG
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define glLogError(a) \
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync { \
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync /** @todo log error */ \
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync glSetError(a); \
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync }
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync#define DbgPrintf(a) VBoxDbgLog a
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync#ifdef VBOX_DEBUG_LVL2
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define DbgPrintf2(a) VBoxDbgLog a
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#else
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync#define DbgPrintf2(a)
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync#endif
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync#else
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync#define glLogError(a) glSetError(a)
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync#define DbgPrintf(a)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#define DbgPrintf2(a)
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync#endif
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync/**
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync * Initialize the OpenGL guest-host communication channel
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync *
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync * @return success or failure (boolean)
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync * @param hDllInst Dll instance handle
fdea543f71872a3ec3909536a4fce37ab7aa3a8bvboxsync */
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsyncBOOL VBoxOGLInit(HINSTANCE hDllInst);
8f7bc6ad2b7bbcb4b3b96248cd2478e45f2e3b88vboxsync
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync/**
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * Destroy the OpenGL guest-host communication channel
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @return success or failure (boolean)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncBOOL VBoxOGLExit();
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync/**
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * Initialize new thread
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync *
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * @return success or failure (boolean)
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync */
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsyncBOOL VBoxOGLThreadAttach();
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync/**
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * Clean up for terminating thread
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync *
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * @return success or failure (boolean)
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync */
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsyncBOOL VBoxOGLThreadDetach();
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync/**
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * Set the thread local OpenGL context
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync *
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * @param pCtx thread local OpenGL context ptr
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync */
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsyncvoid VBoxOGLSetThreadCtx(PVBOX_OGL_THREAD_CTX pCtx);
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync/**
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync * Return the thread local OpenGL context
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync *
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * @return thread local OpenGL context ptr or NULL if failure
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync */
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsyncPVBOX_OGL_THREAD_CTX VBoxOGLGetThreadCtx();
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync/**
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * Queue a new OpenGL command
726fc44ad0bd65a178ad4c3ab46ebd6cd3208e99vboxsync *
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * @param enmOp OpenGL command op
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync * @param cParam Number of parameters
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync * @param cbParams Memory needed for parameters
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync */
68ef804c4ec232c58e2c03c8fc6afe3765c5c0d1vboxsyncvoid VBoxCmdStart(uint32_t enmOp, uint32_t cParam, uint32_t cbParams);
68ef804c4ec232c58e2c03c8fc6afe3765c5c0d1vboxsync
68ef804c4ec232c58e2c03c8fc6afe3765c5c0d1vboxsync/**
3080f6c0871099df43a4e91b31894d9c2b1369a8vboxsync * Add a parameter to the currently queued OpenGL command
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync *
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * @param pParam Parameter ptr
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * @param cbParam Parameter value size
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync */
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsyncvoid VBoxCmdSaveParameter(uint8_t *pParam, uint32_t cbParam);
26824086a3f6b36cd911058f1d9b4c0b944706fbvboxsync
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync/**
b8aaccdbdd143967110d499670605dd7ff6ecc72vboxsync * Add a parameter (variable size) to the currently queued OpenGL command
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync *
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * @param pParam Parameter ptr
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param cbParam Parameter value size
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid VBoxCmdSaveMemParameter(uint8_t *pParam, uint32_t cbParam);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Finish the queued command
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param enmOp OpenGL command op
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid VBoxCmdStop(uint32_t enmOp);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Send an HGCM request
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @return VBox status code
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pvData Data pointer
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param cbData Data size
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncint vboxHGCMCall(void *pvData, unsigned cbData);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#ifdef DEBUG
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Log to the debug output device
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pszFormat Format string
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param ... Variable parameters
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncvoid VBoxDbgLog(char *pszFormat, ...);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif
b1c3cdef473df2fbc621d5da81acc82dbfb8a11avboxsync
a11c569636fa6838bd423f4631a9660a5a84204bvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Flush the OpenGL command queue and return the return val of the last command
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns return val of last command
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncuint64_t VBoxOGLFlush();
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Flush the OpenGL command queue and return the return val of the last command
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * The last command's final parameter is a pointer where its result is stored
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns return val of last command
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pLastParam Last parameter's address
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param cbParam Last parameter's size
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncuint64_t VBoxOGLFlushPtr(void *pLastParam, uint32_t cbParam);
3ecf9412133496b2aeb090cfd33a286404ec59fbvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Initialize OpenGL extensions
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns VBox status code
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pCtx OpenGL thread context
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncint vboxInitOpenGLExtensions(PVBOX_OGL_THREAD_CTX pCtx);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Check if an OpenGL extension is available on the host
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns available or not
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param pszExtFunctionName
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncbool VBoxIsExtensionAvailable(const char *pszExtFunctionName);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Query the specified cached parameter
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns requested cached value
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param type Parameter type (Note: minimal checks only!)
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync */
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsyncGLint glInternalGetIntegerv(GLenum type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Query the specified cached texture level parameter
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @returns requested cached value
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param type Parameter type (Note: minimal checks only!)
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsyncGLint glInternalGetTexLevelParameteriv(GLenum type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
aaeb2e2f6ed5b164f1dec9a16a7adeb84f64cf31vboxsync/**
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * Query the number of bytes required for a pixel in the specified format
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync *
7e960d3a0a8a3a84d7aba2cca45d72b1c31cc97bvboxsync * @returns requested pixel size
78a205e3fc6719d59e8c561b3d287d3a4f879852vboxsync * @param type Parameter type
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsyncGLint glInternalGetPixelFormatElements(GLenum format);
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync
6b022885f2cb6a55167609edecd89570cd80001dvboxsync/**
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * Query the size of the specified data type
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync *
50df3da42ff6589b0ecc4f50f2288811bc370186vboxsync * @returns type size or 0 if unknown type
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync * @param type data type
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync */
6b022885f2cb6a55167609edecd89570cd80001dvboxsyncGLint glVBoxGetDataTypeSize(GLenum type);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncuint32_t glInternalLightvElem(GLenum pname);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncuint32_t glInternalMaterialvElem(GLenum pname);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncuint32_t glInternalTexEnvvElem(GLenum pname);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncuint32_t glInternalTexGenvElem(GLenum pname);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncuint32_t glInternalTexParametervElem(GLenum pname);
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync#endif /* __VBOXOGL_H__ */
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync