VirtualBox

Ignore:
Timestamp:
Oct 29, 2012 12:53:40 PM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
81697
Message:

crOpenGL: fix state diff for multiple VBO usage (unused now, but still)

File:
1 edited

Legend:

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

    r43764 r43766  
    16331633    GLint curClientTextureUnit = from->curClientTextureUnit;
    16341634    int i;
     1635    GLint idHwArrayBuffer = CR_BUFFER_HWID(toCtx->bufferobject.arrayBuffer);
     1636    const GLint idHwInitialBuffer = idHwArrayBuffer;
     1637
     1638#ifdef DEBUG_misha
     1639    {
     1640        GLint tstHwBuffer = -1;
     1641        diff_api.GetIntegerv(GL_ARRAY_BUFFER_BINDING, &tstHwBuffer);
     1642        CRASSERT(idHwInitialBuffer == tstHwBuffer);
     1643    }
     1644#endif
     1645
    16351646
    16361647    if (CHECKDIRTY(cb->clientPointer, bitID)) {
     
    16411652                    from->array.v.stride != to->array.v.stride ||
    16421653                    from->array.v.buffer != to->array.v.buffer) {
     1654                GLint idHwArrayBufferUsed = CR_BUFFER_HWID(to->array.v.buffer);
     1655                if (idHwArrayBufferUsed != idHwArrayBuffer)
     1656                {
     1657                    diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, idHwArrayBufferUsed);
     1658                    idHwArrayBuffer = idHwArrayBufferUsed;
     1659                }
    16431660                diff_api.VertexPointer(to->array.v.size, to->array.v.type,
    16441661                                                             to->array.v.stride, to->array.v.p);
     
    16561673                    from->array.n.stride != to->array.n.stride ||
    16571674                    from->array.n.buffer != to->array.n.buffer) {
     1675                GLint idHwArrayBufferUsed = CR_BUFFER_HWID(to->array.n.buffer);
     1676                if (idHwArrayBufferUsed != idHwArrayBuffer)
     1677                {
     1678                    diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, idHwArrayBufferUsed);
     1679                    idHwArrayBuffer = idHwArrayBufferUsed;
     1680                }
    16581681                diff_api.NormalPointer(to->array.n.type,
    16591682                                                             to->array.n.stride, to->array.n.p);
     
    16711694                    from->array.c.stride != to->array.c.stride ||
    16721695                    from->array.c.buffer != to->array.c.buffer) {
     1696                GLint idHwArrayBufferUsed = CR_BUFFER_HWID(to->array.c.buffer);
     1697                if (idHwArrayBufferUsed != idHwArrayBuffer)
     1698                {
     1699                    diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, idHwArrayBufferUsed);
     1700                    idHwArrayBuffer = idHwArrayBufferUsed;
     1701                }
    16731702                diff_api.ColorPointer(to->array.c.size, to->array.c.type,
    16741703                                                            to->array.c.stride, to->array.c.p);
     
    16861715                    from->array.i.stride != to->array.i.stride ||
    16871716                    from->array.i.buffer != to->array.i.buffer) {
     1717                GLint idHwArrayBufferUsed = CR_BUFFER_HWID(to->array.i.buffer);
     1718                if (idHwArrayBufferUsed != idHwArrayBuffer)
     1719                {
     1720                    diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, idHwArrayBufferUsed);
     1721                    idHwArrayBuffer = idHwArrayBufferUsed;
     1722                }
    16881723                diff_api.IndexPointer(to->array.i.type,
    16891724                                                            to->array.i.stride, to->array.i.p);
     
    17021737                        from->array.t[i].stride != to->array.t[i].stride ||
    17031738                        from->array.t[i].buffer != to->array.t[i].buffer) {
     1739                    GLint idHwArrayBufferUsed = CR_BUFFER_HWID(to->array.t[i].buffer);
     1740                    if (idHwArrayBufferUsed != idHwArrayBuffer)
     1741                    {
     1742                        diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, idHwArrayBufferUsed);
     1743                        idHwArrayBuffer = idHwArrayBufferUsed;
     1744                    }
    17041745                    diff_api.ClientActiveTextureARB(GL_TEXTURE0_ARB + i);
    17051746                    curClientTextureUnit = i;
     
    17191760            if (from->array.e.stride != to->array.e.stride ||
    17201761                    from->array.e.buffer != to->array.e.buffer) {
     1762                GLint idHwArrayBufferUsed = CR_BUFFER_HWID(to->array.e.buffer);
     1763                if (idHwArrayBufferUsed != idHwArrayBuffer)
     1764                {
     1765                    diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, idHwArrayBufferUsed);
     1766                    idHwArrayBuffer = idHwArrayBufferUsed;
     1767                }
    17211768                diff_api.EdgeFlagPointer(to->array.e.stride, to->array.e.p);
    17221769                from->array.e.stride = to->array.e.stride;
     
    17321779                    from->array.s.stride != to->array.s.stride ||
    17331780                    from->array.s.buffer != to->array.s.buffer) {
     1781                GLint idHwArrayBufferUsed = CR_BUFFER_HWID(to->array.s.buffer);
     1782                if (idHwArrayBufferUsed != idHwArrayBuffer)
     1783                {
     1784                    diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, idHwArrayBufferUsed);
     1785                    idHwArrayBuffer = idHwArrayBufferUsed;
     1786                }
    17341787                diff_api.SecondaryColorPointerEXT(to->array.s.size, to->array.s.type,
    17351788                                                                                    to->array.s.stride, to->array.s.p);
     
    17471800                    from->array.f.stride != to->array.f.stride ||
    17481801                    from->array.f.buffer != to->array.f.buffer) {
     1802                GLint idHwArrayBufferUsed = CR_BUFFER_HWID(to->array.f.buffer);
     1803                if (idHwArrayBufferUsed != idHwArrayBuffer)
     1804                {
     1805                    diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, idHwArrayBufferUsed);
     1806                    idHwArrayBuffer = idHwArrayBufferUsed;
     1807                }
    17491808                diff_api.FogCoordPointerEXT(to->array.f.type,
    17501809                                                                        to->array.f.stride, to->array.f.p);
     
    17651824                        from->array.a[i].normalized != to->array.a[i].normalized ||
    17661825                        from->array.a[i].buffer != to->array.a[i].buffer) {
     1826                    GLint idHwArrayBufferUsed = CR_BUFFER_HWID(to->array.[i].buffer);
     1827                    if (idHwArrayBufferUsed != idHwArrayBuffer)
     1828                    {
     1829                        diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, idHwArrayBufferUsed);
     1830                        idHwArrayBuffer = idHwArrayBufferUsed;
     1831                    }
    17671832                    diff_api.VertexAttribPointerARB(i, to->array.a[i].size,
    17681833                                                                                    to->array.a[i].type,
     
    17811846        }
    17821847#endif
     1848    }
     1849
     1850    if (idHwArrayBuffer != idHwInitialBuffer)
     1851    {
     1852        diff_api.BindBufferARB(GL_ARRAY_BUFFER_ARB, idHwInitialBuffer);
    17831853    }
    17841854
     
    21092179                if (to->array.a[i].enabled)
    21102180                    diff_api.EnableVertexAttribArrayARB(i);
    2111                 else 
     2181                else
    21122182                    diff_api.DisableVertexAttribArrayARB(i);
    21132183                FILLDIRTY(cb->enableClientState);
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