VirtualBox

Ignore:
Timestamp:
Nov 28, 2012 7:10:56 AM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
82344
Message:

crOpenGL: double-buffering for offscreen rendering, bugxifes

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

Legend:

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

    r41160 r43980  
    346346}
    347347
    348 CRContext * crStateSwichPrepare(CRContext *toCtx, GLboolean fMultipleContexts, GLuint idFBO)
    349 {
    350     CRContext *fromCtx = GetCurrentContext();
    351 
    352     if (!fMultipleContexts)
    353     {
     348void crStateSwichPrepare(CRContext *toCtx, CRContext *fromCtx, GLuint idDrawFBO, GLuint idReadFBO)
     349{
    354350#ifdef CR_EXT_framebuffer_object
    355         if (fromCtx)
    356             crStateFramebufferObjectDisableHW(fromCtx, idFBO);
    357 #endif
    358     }
    359     return fromCtx;
    360 }
    361 
    362 void crStateSwichPostprocess(CRContext *fromCtx, GLboolean fMultipleContexts, GLuint idFBO)
    363 {
    364     CRContext *toCtx = GetCurrentContext();;
     351    if (fromCtx)
     352        crStateFramebufferObjectDisableHW(fromCtx, idDrawFBO, idReadFBO);
     353#endif
     354}
     355
     356void crStateSwichPostprocess(CRContext *toCtx, CRContext *fromCtx, GLuint idDrawFBO, GLuint idReadFBO)
     357{
    365358    if (!fromCtx || !toCtx)
    366359        return;
    367360
    368     if (!fMultipleContexts)
    369     {
    370361#ifdef CR_EXT_framebuffer_object
    371         crStateFramebufferObjectReenableHW(fromCtx, toCtx, idFBO);
    372 #endif
    373     }
    374 }
     362    crStateFramebufferObjectReenableHW(fromCtx, toCtx, idDrawFBO, idReadFBO);
     363#endif
     364}
  • trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_framebuffer.c

    r41258 r43980  
    775775
    776776DECLEXPORT(void) STATE_APIENTRY
    777 crStateFramebufferObjectDisableHW(CRContext *ctx, GLuint idFBO)
     777crStateFramebufferObjectDisableHW(CRContext *ctx, GLuint idDrawFBO, GLuint idReadFBO)
    778778{
    779779    GLboolean fAdjustDrawReadBuffers = GL_FALSE;
    780780
    781     if (ctx->framebufferobject.drawFB || idFBO)
     781    if (ctx->framebufferobject.drawFB || idDrawFBO)
    782782    {
    783783        diff_api.BindFramebufferEXT(GL_DRAW_FRAMEBUFFER, 0);
     
    785785    }
    786786
    787     if (ctx->framebufferobject.readFB ||idFBO)
     787    if (ctx->framebufferobject.readFB || idReadFBO)
    788788    {
    789789        diff_api.BindFramebufferEXT(GL_READ_FRAMEBUFFER, 0);
     
    802802
    803803DECLEXPORT(void) STATE_APIENTRY
    804 crStateFramebufferObjectReenableHW(CRContext *fromCtx, CRContext *toCtx, GLuint idFBO)
     804crStateFramebufferObjectReenableHW(CRContext *fromCtx, CRContext *toCtx, GLuint idDrawFBO, GLuint idReadFBO)
    805805{
    806806    GLuint idReadBuffer = 0, idDrawBuffer = 0;
     
    812812        idDrawBuffer = toCtx->framebufferobject.drawFB->drawbuffer[0];
    813813    }
    814     else if (idFBO && !toCtx->framebufferobject.drawFB)
    815     {
    816         diff_api.BindFramebufferEXT(GL_DRAW_FRAMEBUFFER, idFBO);
     814    else if (idDrawFBO && !toCtx->framebufferobject.drawFB)
     815    {
     816        diff_api.BindFramebufferEXT(GL_DRAW_FRAMEBUFFER, idDrawFBO);
    817817        idDrawBuffer = GL_COLOR_ATTACHMENT0;
    818818    }
     
    824824        idReadBuffer = toCtx->framebufferobject.readFB->readbuffer;
    825825    }
    826     else if (idFBO && !toCtx->framebufferobject.readFB)
    827     {
    828         diff_api.BindFramebufferEXT(GL_READ_FRAMEBUFFER, idFBO);
     826    else if (idReadFBO && !toCtx->framebufferobject.readFB)
     827    {
     828        diff_api.BindFramebufferEXT(GL_READ_FRAMEBUFFER, idReadFBO);
    829829        idReadBuffer = GL_COLOR_ATTACHMENT0;
    830830    }
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