VirtualBox

Changeset 22284 in vbox for trunk/src/VBox/HostServices


Ignore:
Timestamp:
Aug 17, 2009 8:44:47 AM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
51129
Message:

crOpenGL: add compiled vertex array support

Location:
trunk/src/VBox/HostServices/SharedOpenGL
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/SharedOpenGL/Makefile.kmk

    r22155 r22284  
    172172        $(VBOX_PATH_CROGL_GENFILES)/spu_dispatch_table.h \
    173173        $(VBOX_PATH_CROGL_GENFILES)/cr_opcodes.h \
    174         $(VBOX_PATH_CROGL_GENFILES)/unpack_extend.h
     174        $(VBOX_PATH_CROGL_GENFILES)/unpack_extend.h \
     175        $(VBOX_PATH_CROGL_GENFILES)/state/cr_currentpointers.h \
     176        $(VBOX_PATH_CROGL_GENFILES)/state/cr_statefuncs.h
    175177VBoxOGLcrunpacker_SOURCES  = \
    176178        unpacker/unpack_arrays.c \
  • trunk/src/VBox/HostServices/SharedOpenGL/crserver/crservice.cpp

    r22165 r22284  
    7171
    7272static const char* gszVBoxOGLSSMMagic = "***OpenGL state data***";
    73 #define SHCROGL_SSM_VERSION 5
     73#define SHCROGL_SSM_VERSION 6
    7474
    7575typedef struct
  • trunk/src/VBox/HostServices/SharedOpenGL/unpacker/unpack_arrays.c

    r21423 r22284  
    88#include "unpack_extend.h"
    99#include "unpacker.h"
     10#include "cr_glstate.h"
    1011/**
    1112 * \mainpage Unpacker
     
    158159    crError( "Can't decode MultiDrawElementsEXT" );
    159160}
     161
     162static void crUnpackSetClientPointerByIndex(int index, GLint size,
     163                                            GLenum type, GLboolean normalized,
     164                                            GLsizei stride, const GLvoid *pointer, CRClientState *c)
     165{
     166    if (index<7)
     167    {
     168        switch (index)
     169        {
     170            case 0:
     171                cr_unpackDispatch.VertexPointer(size, type, stride, pointer);
     172                break;
     173            case 1:
     174                cr_unpackDispatch.ColorPointer(size, type, stride, pointer);
     175                break;
     176            case 2:
     177                cr_unpackDispatch.FogCoordPointerEXT(type, stride, pointer);
     178                break;
     179            case 3:
     180                cr_unpackDispatch.SecondaryColorPointerEXT(size, type, stride, pointer);
     181                break;
     182            case 4:
     183                cr_unpackDispatch.EdgeFlagPointer(stride, pointer);
     184                break;
     185            case 5:
     186                cr_unpackDispatch.IndexPointer(type, stride, pointer);
     187                break;
     188            case 6:
     189                cr_unpackDispatch.NormalPointer(type, stride, pointer);
     190                break;
     191        }
     192    }
     193    else if (index<(7+CR_MAX_TEXTURE_UNITS))
     194    {
     195        int curTexUnit = c->curClientTextureUnit;
     196        if ((index-7)!=curTexUnit)
     197        {
     198            cr_unpackDispatch.ClientActiveTextureARB(GL_TEXTURE0_ARB+index-7);
     199        }
     200        cr_unpackDispatch.TexCoordPointer(size, type, stride, pointer);
     201        if ((index-7)!=curTexUnit)
     202        {
     203            cr_unpackDispatch.ClientActiveTextureARB(GL_TEXTURE0_ARB+curTexUnit);
     204        }
     205    }
     206    else
     207    {
     208        cr_unpackDispatch.VertexAttribPointerARB(index-7-CR_MAX_TEXTURE_UNITS,
     209                                                 size, type, normalized, stride, pointer);
     210    }
     211}
     212
     213void crUnpackExtendLockArraysEXT(void)
     214{
     215    GLint first    = READ_DATA(sizeof(int) + 4, GLint);
     216    GLint count    = READ_DATA(sizeof(int) + 8, GLint);
     217    int numenabled = READ_DATA(sizeof(int) + 12, int);
     218
     219    CRContext *g = crStateGetCurrent();
     220    CRClientState *c = &g->client;
     221    CRClientPointer *cp;
     222    int i, index, offset;
     223    unsigned char *data;
     224   
     225    offset = 2*sizeof(int)+12;
     226
     227    for (i=0; i<numenabled; ++i)
     228    {
     229        index = READ_DATA(offset, int);
     230        offset += sizeof(int);
     231        cp = crStateGetClientPointerByIndex(index, &c->array);
     232        CRASSERT(cp && cp->enabled && (!cp->buffer || !cp->buffer->name));
     233        data = crAlloc((first+count)*cp->bytesPerIndex);
     234        crMemcpy(data+first*cp->bytesPerIndex, DATA_POINTER(offset, GLvoid), count*cp->bytesPerIndex);
     235        offset += count*cp->bytesPerIndex;
     236        crUnpackSetClientPointerByIndex(index, cp->size, cp->type, cp->normalized, 0, data, c);
     237    }
     238    cr_unpackDispatch.LockArraysEXT(first, count);
     239}
     240
     241void crUnpackExtendUnlockArraysEXT(void)
     242{
     243    int i;
     244    CRContext *g = crStateGetCurrent();
     245    CRClientState *c = &g->client;
     246    CRClientPointer *cp;
     247
     248    cr_unpackDispatch.UnlockArraysEXT();
     249
     250    for (i=0; i<CRSTATECLIENT_MAX_VERTEXARRAYS; ++i)
     251    {
     252        cp = crStateGetClientPointerByIndex(i, &c->array);
     253        if (cp->enabled)
     254        {
     255            crUnpackSetClientPointerByIndex(i, cp->size, cp->type, cp->normalized, cp->prevStride, cp->prevPtr, c);
     256        }
     257    }
     258}
  • trunk/src/VBox/HostServices/SharedOpenGL/unpacker/unpacker_special

    r22155 r22284  
    166166DeleteFramebuffersEXT
    167167DeleteRenderbuffersEXT
     168LockArraysEXT
     169UnlockArraysEXT
Note: See TracChangeset for help on using the changeset viewer.

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