VirtualBox

Changeset 55764 in vbox for trunk/src


Ignore:
Timestamp:
May 8, 2015 7:04:15 PM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
100190
Message:

3D: saving state: fix broken in r100180 SSM versioning.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_main.c

    r55763 r55764  
    12511251}
    12521252
     1253/* Add framebuffer image elements arrording to SSM version. Please refer to cr_version.h
     1254 * in order to distinguish between versions. */
    12531255static int crVBoxServerFBImageDataInitEx(CRFBData *pData, CRContextInfo *pCtxInfo, CRMuralInfo *pMural, GLboolean fWrite, uint32_t version, GLuint overrideWidth, GLuint overrideHeight)
    12541256{
     
    12881290        }
    12891291    }
     1292
    12901293    pData->cElements = 0;
    12911294
    1292     rc = crVBoxAddFBDataElement(
    1293             pData,
    1294             pMural && pMural->fRedirected ? pMural->aidFBOs[CR_SERVER_FBO_FB_IDX(pMural)] : 0,
    1295             pData->aElements[1].idFBO ? GL_COLOR_ATTACHMENT0 : GL_FRONT,
    1296             width, height, GL_RGBA, GL_UNSIGNED_BYTE);
     1295    rc = crVBoxAddFBDataElement(pData, pMural && pMural->fRedirected ? pMural->aidFBOs[CR_SERVER_FBO_FB_IDX(pMural)] : 0,
     1296        pData->aElements[1].idFBO ? GL_COLOR_ATTACHMENT0 : GL_FRONT, width, height, GL_RGBA, GL_UNSIGNED_BYTE);
    12971297    AssertReturn(rc == VINF_SUCCESS, rc);
    12981298
     
    13051305                                                                      *    no matter what the visual bits are. */
    13061306    {
    1307         rc = crVBoxAddFBDataElement(
    1308                 pData,
    1309                 pMural && pMural->fRedirected ? pMural->aidFBOs[CR_SERVER_FBO_BB_IDX(pMural)] : 0,
    1310                 pData->aElements[1].idFBO ? GL_COLOR_ATTACHMENT0 : GL_BACK,
    1311                 width, height, GL_RGBA, GL_UNSIGNED_BYTE);
     1307        rc = crVBoxAddFBDataElement(pData, pMural && pMural->fRedirected ? pMural->aidFBOs[CR_SERVER_FBO_BB_IDX(pMural)] : 0,
     1308            pData->aElements[1].idFBO ? GL_COLOR_ATTACHMENT0 : GL_BACK, width, height, GL_RGBA, GL_UNSIGNED_BYTE);
    13121309        AssertReturn(rc == VINF_SUCCESS, rc);
    13131310    }
     
    13161313        return VINF_SUCCESS;
    13171314
    1318     if (pCtxInfo->CreateInfo.requestedVisualBits & CR_DEPTH_BIT)
    1319     {
    1320         rc = crVBoxAddFBDataElement(
    1321                 pData,
    1322                 pMural && pMural->fRedirected ? pMural->aidFBOs[CR_SERVER_FBO_FB_IDX(pMural)] : 0,
    1323                 pMural ? pMural->idDepthRB : 0,
    1324                 width, height, GL_DEPTH_COMPONENT, GL_FLOAT);
     1315    if (version < SHCROGL_SSM_VERSION_WITH_SINGLE_DEPTH_STENCIL)
     1316    {
     1317        rc = crVBoxAddFBDataElement(pData, pMural && pMural->fRedirected ? pMural->aidFBOs[CR_SERVER_FBO_FB_IDX(pMural)] : 0,
     1318            pMural ? pMural->idDepthRB : 0, width, height, GL_DEPTH_COMPONENT, GL_FLOAT);
    13251319        AssertReturn(rc == VINF_SUCCESS, rc);
    13261320
     
    13291323        for (i = 0; i < width * height; ++i)
    13301324            pF[i] = 1.;
     1325
     1326        rc = crVBoxAddFBDataElement(pData, pMural && pMural->fRedirected ? pMural->aidFBOs[CR_SERVER_FBO_FB_IDX(pMural)] : 0,
     1327            pMural ? pMural->idDepthRB : 0, width, height, GL_STENCIL_INDEX, GL_UNSIGNED_INT);
     1328        AssertReturn(rc == VINF_SUCCESS, rc);
     1329
     1330        return VINF_SUCCESS;
     1331    }
     1332
     1333    if (version < SHCROGL_SSM_VERSION_WITH_SEPARATE_DEPTH_STENCIL_BUFFERS)
     1334    {
     1335        /* Use GL_DEPTH_STENCIL only in case if both CR_STENCIL_BIT and CR_DEPTH_BIT specified. */
     1336        if (   (pCtxInfo->CreateInfo.requestedVisualBits & CR_STENCIL_BIT)
     1337            && (pCtxInfo->CreateInfo.requestedVisualBits & CR_DEPTH_BIT))
     1338        {
     1339            rc = crVBoxAddFBDataElement(pData, pMural && pMural->fRedirected ? pMural->aidFBOs[CR_SERVER_FBO_FB_IDX(pMural)] : 0, 0,
     1340                width, height, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8);
     1341            AssertReturn(rc == VINF_SUCCESS, rc);
     1342        }
     1343
     1344        return VINF_SUCCESS;
     1345    }
     1346
     1347    /* Current SSM verion (SHCROGL_SSM_VERSION_WITH_SEPARATE_DEPTH_STENCIL_BUFFERS). */
     1348
     1349    if (pCtxInfo->CreateInfo.requestedVisualBits & CR_DEPTH_BIT)
     1350    {
     1351        rc = crVBoxAddFBDataElement(pData, pMural && pMural->fRedirected ? pMural->aidFBOs[CR_SERVER_FBO_FB_IDX(pMural)] : 0,
     1352            pMural ? pMural->idDepthRB : 0, width, height, GL_DEPTH_COMPONENT, GL_FLOAT);
     1353        AssertReturn(rc == VINF_SUCCESS, rc);
     1354
     1355        /* Init to default depth value, just in case. */
     1356        pF = (GLfloat*)pEl->pvData;
     1357        for (i = 0; i < width * height; ++i)
     1358            pF[i] = 1.;
    13311359    }
    13321360
    13331361    if (pCtxInfo->CreateInfo.requestedVisualBits & CR_STENCIL_BIT)
    13341362    {
    1335         rc = crVBoxAddFBDataElement(
    1336                 pData,
    1337                 pMural && pMural->fRedirected ? pMural->aidFBOs[CR_SERVER_FBO_FB_IDX(pMural)] : 0,
    1338                 pMural ? pMural->idDepthRB : 0,
    1339                 width, height, GL_STENCIL_INDEX, GL_UNSIGNED_INT);
     1363        rc = crVBoxAddFBDataElement(pData, pMural && pMural->fRedirected ? pMural->aidFBOs[CR_SERVER_FBO_FB_IDX(pMural)] : 0,
     1364            pMural ? pMural->idDepthRB : 0, width, height, GL_STENCIL_INDEX, GL_UNSIGNED_INT);
    13401365        AssertReturn(rc == VINF_SUCCESS, rc);
    13411366    }
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