VirtualBox

Changeset 35912 in vbox for trunk/src/VBox/GuestHost


Ignore:
Timestamp:
Feb 9, 2011 12:31:28 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
69938
Message:

crOpenGL: fix sometimes missing textures and geometry

Location:
trunk/src/VBox/GuestHost/OpenGL/state_tracker
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_client.c

    r35852 r35912  
    14881488    int i;
    14891489
     1490    if (!c->array.locked)
     1491    {
     1492        crDebug("crStateUnlockArraysEXT ignored because arrays aren't locked");
     1493        return;
     1494    }
     1495
    14901496    c->array.locked = GL_FALSE;
    14911497#ifdef IN_GUEST
     
    16241630    CRClientState *from = &(fromCtx->client);
    16251631    const CRClientState *to = &(toCtx->client);
     1632    GLint curClientTextureUnit = from->curClientTextureUnit;
    16261633    int i;
    16271634
     
    16951702                        from->array.t[i].buffer != to->array.t[i].buffer) {
    16961703                    diff_api.ClientActiveTextureARB(GL_TEXTURE0_ARB + i);
     1704                    curClientTextureUnit = i;
    16971705                    diff_api.TexCoordPointer(to->array.t[i].size, to->array.t[i].type,
    16981706                                                                to->array.t[i].stride, to->array.t[i].p);
     
    17981806            if (from->array.t[i].enabled != to->array.t[i].enabled) {
    17991807                diff_api.ClientActiveTextureARB(GL_TEXTURE0_ARB + i);
     1808                curClientTextureUnit = i;
    18001809                able[to->array.t[i].enabled](GL_TEXTURE_COORD_ARRAY);
    18011810                from->array.t[i].enabled = to->array.t[i].enabled;
     
    18251834        CLEARDIRTY2(cb->enableClientState, bitID);
    18261835    }
     1836
     1837    if (to->curClientTextureUnit != curClientTextureUnit)
     1838    {
     1839        diff_api.ClientActiveTextureARB(GL_TEXTURE0_ARB + to->curClientTextureUnit);
     1840    }
    18271841}
    18281842
     
    18341848    const CRClientState *from = &(fromCtx->client);
    18351849    const CRClientState *to = &(toCtx->client);
     1850    GLint curClientTextureUnit = from->curClientTextureUnit;
    18361851    int i;
    18371852
     
    18991914                        from->array.t[i].buffer != to->array.t[i].buffer) {
    19001915                    diff_api.ClientActiveTextureARB(GL_TEXTURE0_ARB + i);
     1916                    curClientTextureUnit = i;
    19011917                    diff_api.TexCoordPointer(to->array.t[i].size, to->array.t[i].type,
    19021918                                                                to->array.t[i].stride, to->array.t[i].p);
     
    19982014            if (from->array.t[i].enabled != to->array.t[i].enabled) {
    19992015                diff_api.ClientActiveTextureARB(GL_TEXTURE0_ARB + i);
     2016                curClientTextureUnit = i;
    20002017                able[to->array.t[i].enabled](GL_TEXTURE_COORD_ARRAY);
    20012018                FILLDIRTY(cb->enableClientState);
     
    20292046        }
    20302047        CLEARDIRTY2(cb->enableClientState, bitID);
     2048    }
     2049
     2050    if (to->curClientTextureUnit != curClientTextureUnit)
     2051    {
     2052        diff_api.ClientActiveTextureARB(GL_TEXTURE0_ARB + to->curClientTextureUnit);
    20312053    }
    20322054
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_texture.c

    r33595 r35912  
    791791
    792792    c->curClientTextureUnit = texture - GL_TEXTURE0_ARB;
     793
     794    DIRTY(GetCurrentBits()->client.dirty, g->neg_bitid);
    793795}
    794796
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