VirtualBox

Ignore:
Timestamp:
Feb 20, 2009 11:25:55 AM (16 years ago)
Author:
vboxsync
Message:

crOpenGL: don't allocate memory for textures on host side (#3461)

File:
1 edited

Legend:

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

    r16939 r16969  
    544544        tl->bytes = crImageSize(format, type, width, 1);
    545545
     546#ifndef CR_STATE_NO_TEXTURE_IMAGE_STORE
    546547    if (tl->bytes)
    547548    {
     
    553554        {
    554555            crStateError(__LINE__, __FILE__, GL_OUT_OF_MEMORY,
    555                                      "glTexImage1D out of memory");
     556                         "glTexImage1D out of memory");
    556557            return;
    557558        }
    558559        if (pixels)
    559560            crPixelCopy1D((GLvoid *) tl->img, format, type,
    560                                         pixels, format, type, width, &(c->unpack));
    561     }
     561                          pixels, format, type, width, &(c->unpack));
     562    }
     563#endif
    562564
    563565    tl->width = width;
     
    594596void STATE_APIENTRY
    595597crStateTexImage2D(GLenum target, GLint level, GLint internalFormat,
    596                                     GLsizei width, GLsizei height, GLint border,
    597                                     GLenum format, GLenum type, const GLvoid * pixels)
     598                  GLsizei width, GLsizei height, GLint border,
     599                  GLenum format, GLenum type, const GLvoid * pixels)
    598600{
    599601    CRContext *g = GetCurrentContext();
     
    639641    }
    640642
     643#ifndef CR_STATE_NO_TEXTURE_IMAGE_STORE
    641644    /* allocate the image buffer and fill it */
    642645    if (tl->bytes)
     
    649652        {
    650653            crStateError(__LINE__, __FILE__, GL_OUT_OF_MEMORY,
    651                                      "glTexImage2D out of memory");
     654                         "glTexImage2D out of memory");
    652655            return;
    653656        }
     
    661664            {
    662665                crPixelCopy2D(width, height,
    663                                             (GLvoid *) tl->img, format, type, NULL, /* dst */
    664                                             pixels, format, type, &(c->unpack));    /* src */
     666                              (GLvoid *) tl->img, format, type, NULL, /* dst */
     667                              pixels, format, type, &(c->unpack));    /* src */
    665668            }
    666669        }
    667670    }
     671#endif
    668672
    669673    tl->width = width;
     
    741745        tl->bytes = crTextureSize(format, type, width, height, depth);
    742746
     747#ifndef CR_STATE_NO_TEXTURE_IMAGE_STORE
    743748    if (tl->bytes)
    744749    {
     
    750755        {
    751756            crStateError(__LINE__, __FILE__, GL_OUT_OF_MEMORY,
    752                                      "glTexImage3D out of memory");
     757                         "glTexImage3D out of memory");
    753758            return;
    754759        }
    755760        if (pixels)
    756761            crPixelCopy3D(width, height, depth, (GLvoid *) (tl->img), format, type,
    757                                         NULL, pixels, format, type, &(c->unpack));
    758     }
     762                          NULL, pixels, format, type, &(c->unpack));
     763    }
     764#endif
    759765
    760766    tl->internalFormat = internalFormat;
     
    820826    }
    821827
     828#ifndef CR_STATE_NO_TEXTURE_IMAGE_STORE
    822829    xoffset += tl->border;
    823830
    824831    crPixelCopy1D((void *) (tl->img + xoffset * tl->bytesPerPixel),
    825                                 tl->format, tl->type,
    826                                 pixels, format, type, width, &(c->unpack));
     832                  tl->format, tl->type,
     833                  pixels, format, type, width, &(c->unpack));
     834#endif
    827835
    828836#ifdef CR_SGIS_generate_mipmap
     
    844852void STATE_APIENTRY
    845853crStateTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
    846                                          GLsizei width, GLsizei height,
    847                                          GLenum format, GLenum type, const GLvoid * pixels)
     854                     GLsizei width, GLsizei height,
     855                     GLenum format, GLenum type, const GLvoid * pixels)
    848856{
    849857    CRContext *g = GetCurrentContext();
     
    855863    GLubyte *subimg = NULL;
    856864    GLubyte *img = NULL;
     865#ifndef CR_STATE_NO_TEXTURE_IMAGE_STORE
    857866    GLubyte *src;
    858867    int i;
     868#endif
    859869
    860870    FLUSH();
     
    869879    CRASSERT(tl);
    870880
     881#ifndef CR_STATE_NO_TEXTURE_IMAGE_STORE
    871882    xoffset += tl->border;
    872883    yoffset += tl->border;
    873884
    874     subimg =
    875         (GLubyte *) crAlloc(crImageSize(tl->format, tl->type, width, height));
     885    subimg = (GLubyte *) crAlloc(crImageSize(tl->format, tl->type, width, height));
    876886
    877887    crPixelCopy2D(width, height, subimg, tl->format, tl->type, NULL,    /* dst */
    878                                 pixels, format, type, &(c->unpack));    /* src */
     888                  pixels, format, type, &(c->unpack));                  /* src */
    879889
    880890    img = tl->img +
     
    892902
    893903    crFree(subimg);
     904#endif
    894905
    895906#ifdef CR_SGIS_generate_mipmap
     
    925936    GLubyte *subimg = NULL;
    926937    GLubyte *img = NULL;
     938#ifndef CR_STATE_NO_TEXTURE_IMAGE_STORE
    927939    GLubyte *src;
    928940    int i;
     941#endif
    929942
    930943    FLUSH();
     
    935948    }
    936949
     950#ifndef CR_STATE_NO_TEXTURE_IMAGE_STORE
    937951    xoffset += tl->border;
    938952    yoffset += tl->border;
     
    944958
    945959    crPixelCopy3D(width, height, depth, subimg, tl->format, tl->type, NULL,
    946                                 pixels, format, type, &(c->unpack));
     960                  pixels, format, type, &(c->unpack));
    947961
    948962    img = tl->img + xoffset * tl->bytesPerPixel +
     
    961975
    962976    crFree(subimg);
     977#endif
    963978
    964979#ifdef CR_SGIS_generate_mipmap
     
    10141029        tl->bytes = imageSize;
    10151030
     1031#ifndef CR_STATE_NO_TEXTURE_IMAGE_STORE
    10161032    if (tl->bytes)
    10171033    {
     
    10231039        {
    10241040            crStateError(__LINE__, __FILE__, GL_OUT_OF_MEMORY,
    1025                                      "glTexImage1D out of memory");
     1041                         "glTexImage1D out of memory");
    10261042            return;
    10271043        }
     
    10291045            crMemcpy(tl->img, data, imageSize);
    10301046    }
     1047#endif
    10311048
    10321049    tl->width = width;
     
    10591076void STATE_APIENTRY
    10601077crStateCompressedTexImage2DARB(GLenum target, GLint level,
    1061                                                              GLenum internalFormat, GLsizei width,
    1062                                                              GLsizei height, GLint border,
    1063                                                              GLsizei imageSize, const GLvoid * data)
     1078                               GLenum internalFormat, GLsizei width,
     1079                               GLsizei height, GLint border,
     1080                               GLsizei imageSize, const GLvoid * data)
    10641081{
    10651082    CRContext *g = GetCurrentContext();
     
    10921109        tl->bytes = imageSize;
    10931110
     1111#ifndef CR_STATE_NO_TEXTURE_IMAGE_STORE
    10941112    if (tl->bytes)
    10951113    {
     
    11011119        {
    11021120            crStateError(__LINE__, __FILE__, GL_OUT_OF_MEMORY,
    1103                                      "glTexImage2D out of memory");
     1121                         "glTexImage2D out of memory");
    11041122            return;
    11051123        }
     
    11071125            crMemcpy(tl->img, data, imageSize);
    11081126    }
     1127#endif
    11091128
    11101129    tl->width = width;
     
    11711190        tl->bytes = imageSize;
    11721191
     1192#ifndef CR_STATE_NO_TEXTURE_IMAGE_STORE
    11731193    if (tl->bytes)
    11741194    {
     
    11801200        {
    11811201            crStateError(__LINE__, __FILE__, GL_OUT_OF_MEMORY,
    1182                                      "glCompressedTexImage3D out of memory");
     1202                         "glCompressedTexImage3D out of memory");
    11831203            return;
    11841204        }
     
    11861206            crMemcpy(tl->img, data, imageSize);
    11871207    }
     1208#endif
    11881209
    11891210    tl->width = width;
     
    12341255    }
    12351256
     1257#ifndef CR_STATE_NO_TEXTURE_IMAGE_STORE
    12361258    xoffset += tl->border;
    12371259
     
    12421264    else {
    12431265        /* XXX this depends on the exact compression method */
    1244     }
     1266        crWarning("Not implemented part crStateCompressedTexSubImage1DARB");
     1267    }
     1268#endif
    12451269
    12461270#ifdef CR_SGIS_generate_mipmap
     
    12811305    }
    12821306
     1307#ifndef CR_STATE_NO_TEXTURE_IMAGE_STORE
    12831308    xoffset += tl->border;
    12841309    yoffset += tl->border;
    12851310
    1286     if (xoffset == 0 && width == tl->width &&
    1287             yoffset == 0 && height == tl->height) {
     1311    if (xoffset == 0 && width == tl->width
     1312        && yoffset == 0 && height == tl->height)
     1313    {
    12881314        /* just memcpy */
    12891315        crMemcpy(tl->img, data, imageSize);
     
    12911317    else {
    12921318        /* XXX this depends on the exact compression method */
    1293     }
     1319        crWarning("Not implemented part crStateCompressedTexSubImage2DARB");
     1320    }
     1321#endif
    12941322
    12951323#ifdef CR_SGIS_generate_mipmap
     
    13311359    }
    13321360
     1361#ifndef CR_STATE_NO_TEXTURE_IMAGE_STORE
    13331362    xoffset += tl->border;
    13341363    yoffset += tl->border;
     
    13361365
    13371366    if (xoffset == 0 && width == tl->width &&
    1338             yoffset == 0 && height == tl->height &&
    1339             zoffset == 0 && depth == tl->depth) {
     1367        yoffset == 0 && height == tl->height &&
     1368        zoffset == 0 && depth == tl->depth) {
    13401369        /* just memcpy */
    13411370        crMemcpy(tl->img, data, imageSize);
     
    13431372    else {
    13441373        /* XXX this depends on the exact compression method */
    1345     }
     1374        crWarning("Not implemented part crStateCompressedTexSubImage3DARB");
     1375    }
     1376#endif
    13461377
    13471378#ifdef CR_SGIS_generate_mipmap
     
    13881419    }
    13891420
     1421#ifndef CR_STATE_NO_TEXTURE_IMAGE_STORE
    13901422    crMemcpy(img, tl->img, tl->bytes);
     1423#else
     1424    diff_api.GetCompressedTexImageARB(target, level, img);
     1425#endif
    13911426}
    13921427
     
    13941429void STATE_APIENTRY
    13951430crStateGetTexImage(GLenum target, GLint level, GLenum format,
    1396                                      GLenum type, GLvoid * pixels)
     1431                   GLenum type, GLvoid * pixels)
    13971432{
    13981433    CRContext *g = GetCurrentContext();
     
    14531488    }
    14541489
     1490#ifndef CR_STATE_NO_TEXTURE_IMAGE_STORE
    14551491#ifdef CR_OPENGL_VERSION_1_2
    14561492    if (target == GL_TEXTURE_3D)
    14571493    {
    14581494        crPixelCopy3D(tl->width, tl->height, tl->depth, (GLvoid *) pixels, format,
    1459                                     type, NULL, (tl->img), format, type, &(c->pack));
     1495                      type, NULL, (tl->img), format, type, &(c->pack));
    14601496    }
    14611497    else
    14621498#endif
    1463     if ((target == GL_TEXTURE_2D) || (target == GL_TEXTURE_1D))
     1499    if ((target == GL_TEXTURE_1D) || (target == GL_TEXTURE_2D))
    14641500    {
    14651501        crPixelCopy2D(tl->width, tl->height, (GLvoid *) pixels, format, type, NULL, /* dst */
    1466                                     (tl->img), format, type, &(c->pack));   /* src */
    1467     }
    1468 }
     1502                      tl->img, format, type, &(c->pack));                           /* src */
     1503    }
     1504#else
     1505    diff_api.GetTexImage(target, level, format, type, pixels);
     1506#endif
     1507}
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