VirtualBox

Changeset 3513 in vbox


Ignore:
Timestamp:
Jul 9, 2007 4:20:50 PM (18 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
22732
Message:

filter out opengl extensions, that we don't support (yet)

Location:
trunk/src/VBox/Additions/WINNT/Graphics/OpenGL
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/OpenGL/VBoxOGL.cpp

    r3465 r3513  
    2424#include <stdio.h>
    2525
    26 #define VBOX_INIT_CALL(a, b, c)                 \
    27     (a)->result      = VINF_SUCCESS;            \
    28     (a)->u32ClientID = (c)->u32ClientID;        \
    29     (a)->u32Function = VBOXOGL_FN_##b;          \
    30     (a)->cParms      = VBOXOGL_CPARMS_##b
    31 
    3226
    3327       HINSTANCE    hDllVBoxOGL                 = 0;
    3428static DWORD        dwOGLTlsIndex               = TLS_OUT_OF_INDEXES;
    3529static VBOX_OGL_CTX vboxOGLCtx                  = {0};
    36 static char         szOpenGLVersion[256]        = "";
    37 static char         szOpenGLExtensions[8192]    = ""; /* this one can be rather long */
     30      char         szOpenGLVersion[256]        = "";
     31      char         szOpenGLExtensions[8192]    = ""; /* this one can be rather long */
    3832
    3933
     
    188182    parms.pString.u.Pointer.u.linearAddr = (vmmDevHypPtr)szOpenGLVersion;
    189183
    190     int rc = vboxHGCMCall(vboxOGLCtx.hGuestDrv, &parms, sizeof (parms));
     184    int rc = vboxHGCMCall(&parms, sizeof (parms));
    191185
    192186    if (    VBOX_FAILURE(rc)
     
    198192    DbgPrintf(("GL_VERSION=%s\n", szOpenGLVersion));
    199193
    200     memset(&parms, 0, sizeof(parms));
    201     VBOX_INIT_CALL(&parms.hdr, GLGETSTRING, pCtx);
    202 
    203     parms.name.type                      = VMMDevHGCMParmType_32bit;
    204     parms.name.u.value32                 = GL_EXTENSIONS;
    205     parms.pString.type                   = VMMDevHGCMParmType_LinAddr;
    206     parms.pString.u.Pointer.size         = sizeof(szOpenGLExtensions);
    207     parms.pString.u.Pointer.u.linearAddr = (vmmDevHypPtr)szOpenGLExtensions;
    208 
    209     rc = vboxHGCMCall(vboxOGLCtx.hGuestDrv, &parms, sizeof (parms));
    210 
    211     if (    VBOX_FAILURE(rc)
    212         ||  VBOX_FAILURE(parms.hdr.result))
    213     {
    214         DbgPrintf(("GL_EXTENSIONS failed with %x %x\n", rc, parms.hdr.result));
    215         return FALSE;
    216     }
    217     DbgPrintf(("GL_EXTENSIONS=%s\n\n", szOpenGLExtensions));
    218 
    219194    /* Initialize OpenGL extensions */
    220     vboxInitOpenGLExtensions();
     195    vboxInitOpenGLExtensions(pCtx);
    221196
    222197    return TRUE;
     
    275250 *
    276251 * @return VBox status code
    277  * @param   hDriver     Driver handle
    278252 * @param   pvData      Data pointer
    279253 * @param   cbData      Data size
    280254 */
    281 int vboxHGCMCall(HANDLE hDriver, void *pvData, unsigned cbData)
     255int vboxHGCMCall(void *pvData, unsigned cbData)
    282256{
    283257    DWORD cbReturned;
    284258
    285     if (DeviceIoControl (hDriver,
     259    if (DeviceIoControl (vboxOGLCtx.hGuestDrv,
    286260                         IOCTL_VBOXGUEST_HGCM_CALL,
    287261                         pvData, cbData,
     
    391365    parms.lasterror.u.value32               = 0;
    392366
    393     int rc = vboxHGCMCall(vboxOGLCtx.hGuestDrv, &parms, sizeof (parms));
     367    int rc = vboxHGCMCall(&parms, sizeof (parms));
    394368
    395369    /* reset command buffer */
     
    453427    }
    454428
    455     int rc = vboxHGCMCall(vboxOGLCtx.hGuestDrv, &parms, sizeof (parms));
     429    int rc = vboxHGCMCall(&parms, sizeof (parms));
    456430
    457431    /* reset command buffer */
     
    491465    parms.pszExtFnName.u.Pointer.u.linearAddr = (vmmDevHypPtr)pszExtFunctionName;
    492466
    493     int rc = vboxHGCMCall(vboxOGLCtx.hGuestDrv, &parms, sizeof (parms));
     467    int rc = vboxHGCMCall(&parms, sizeof (parms));
    494468
    495469    if (    VBOX_FAILURE(rc)
  • trunk/src/VBox/Additions/WINNT/Graphics/OpenGL/VBoxOGL.h

    r3493 r3513  
    4747
    4848} VBOX_OGL_CTX, *PVBOX_OGL_CTX;
     49
     50/* HGCM macro */
     51#define VBOX_INIT_CALL(a, b, c)                 \
     52    (a)->result      = VINF_SUCCESS;            \
     53    (a)->u32ClientID = (c)->u32ClientID;        \
     54    (a)->u32Function = VBOXOGL_FN_##b;          \
     55    (a)->cParms      = VBOXOGL_CPARMS_##b
    4956
    5057/* glDrawElement internal state */
     
    8491
    8592extern HINSTANCE hDllVBoxOGL;
     93extern char      szOpenGLVersion[256];
     94extern char      szOpenGLExtensions[8192];
    8695
    8796void APIENTRY glSetError(GLenum glNewError);
     
    189198 *
    190199 * @return VBox status code
    191  * @param   hDriver     Driver handle
    192200 * @param   pvData      Data pointer
    193201 * @param   cbData      Data size
    194202 */
    195 int vboxHGCMCall(HANDLE hDriver, void *pvData, unsigned cbData);
     203int vboxHGCMCall(void *pvData, unsigned cbData);
    196204
    197205#ifdef DEBUG
     
    227235 *
    228236 * @returns VBox status code
    229  */
    230 int vboxInitOpenGLExtensions();
     237 * @param pCtx  OpenGL thread context
     238 */
     239int vboxInitOpenGLExtensions(PVBOX_OGL_THREAD_CTX pCtx);
    231240
    232241/**
  • trunk/src/VBox/Additions/WINNT/Graphics/OpenGL/glext.cpp

    r3468 r3513  
    2828
    2929
    30 int vboxInitOpenGLExtensions()
     30/**
     31 * Initialize OpenGL extensions
     32 *
     33 * @returns VBox status code
     34 * @param pCtx  OpenGL thread context
     35 */
     36int vboxInitOpenGLExtensions(PVBOX_OGL_THREAD_CTX pCtx)
    3137{
    32     const GLubyte *pszExtensions = glGetString(GL_EXTENSIONS);
     38    char *pszExtensions;
    3339    static bool    fInitialized  = false;
     40    VBoxOGLglGetString parms;
     41    int rc;
     42
     43    memset(&parms, 0, sizeof(parms));
     44    VBOX_INIT_CALL(&parms.hdr, GLGETSTRING, pCtx);
     45
     46    parms.name.type                      = VMMDevHGCMParmType_32bit;
     47    parms.name.u.value32                 = GL_EXTENSIONS;
     48    parms.pString.type                   = VMMDevHGCMParmType_LinAddr;
     49    parms.pString.u.Pointer.size         = sizeof(szOpenGLExtensions);
     50    parms.pString.u.Pointer.u.linearAddr = (vmmDevHypPtr)szOpenGLExtensions;
     51
     52    rc = vboxHGCMCall(&parms, sizeof (parms));
     53
     54    if (    VBOX_FAILURE(rc)
     55        ||  VBOX_FAILURE(parms.hdr.result))
     56    {
     57        DbgPrintf(("GL_EXTENSIONS failed with %x %x\n", rc, parms.hdr.result));
     58        return FALSE;
     59    }
     60    DbgPrintf(("GL_EXTENSIONS=%s\n\n", szOpenGLExtensions));
    3461
    3562    if (fInitialized)
    3663        return VINF_SUCCESS;
     64
     65    pszExtensions = strdup(szOpenGLExtensions);
     66    szOpenGLExtensions[0] = 0;
    3767
    3868    for (int i=0;i<RT_ELEMENTS(OpenGLExtensions);i++)
     
    4070        if (strstr((char *)pszExtensions, OpenGLExtensions[i].pszExtName))
    4171            OpenGLExtensions[i].fAvailable = VBoxIsExtensionAvailable(OpenGLExtensions[i].pszExtFunctionName);
     72       
     73        if (OpenGLExtensions[i].fAvailable)
     74            strcat(szOpenGLExtensions, OpenGLExtensions[i].pszExtName);
    4275    }
     76
     77    free(pszExtensions);
     78
    4379    fInitialized = true;
    4480    return VINF_SUCCESS;
Note: See TracChangeset for help on using the changeset viewer.

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