VirtualBox

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


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
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/GuestHost/OpenGL/include/cr_glstate.h

    r41160 r43980  
    219219DECLEXPORT(GLboolean) crStateEnableDiffOnMakeCurrent(GLboolean fEnable);
    220220
    221 CRContext * crStateSwichPrepare(CRContext *toCtx, GLboolean fMultipleContexts, GLuint idFBO);
    222 void crStateSwichPostprocess(CRContext *fromCtx, GLboolean fMultipleContexts, GLuint idFBO);
     221void crStateSwichPrepare(CRContext *toCtx, CRContext *fromCtx, GLuint idDrawFBO, GLuint idReadFBO);
     222void crStateSwichPostprocess(CRContext *toCtx, CRContext *fromCtx, GLuint idDrawFBO, GLuint idReadFBO);
    223223
    224224DECLEXPORT(void) crStateFlushFunc( CRStateFlushFunc ff );
  • trunk/src/VBox/GuestHost/OpenGL/include/cr_server.h

    r43932 r43980  
    105105    GLboolean   bReceivedRects;   /*indicates if guest did any updates for visible regions*/
    106106
    107     GLuint idFBO, idColorTex, idDepthStencilRB;
     107    GLuint cBuffers;
     108    GLuint iBbBuffer;
     109    GLuint aidFBOs[2];
     110    GLuint aidColorTexs[2];
     111
     112    void *pvOutputRedirectInstance;
     113
     114    CRCreateInfo_t CreateInfo;
     115
     116    /* to avoid saved state breakage we need to keep RT_OFFSETOF(CRMuralInfo, CreateInfo) intact
     117     * this is why we place some FBO stuff to the tail
     118     * @todo: once we need to increment a saved state version, we could refactor this structure */
     119    GLuint iCurDrawBuffer;
     120    GLuint iCurReadBuffer;
     121
     122    GLuint idDepthStencilRB;
    108123    GLuint fboWidth, fboHeight;
    109124    GLuint idPBO;
    110 
    111     void *pvOutputRedirectInstance;
    112 
    113     CRCreateInfo_t CreateInfo;
    114125} CRMuralInfo;
    115126
  • trunk/src/VBox/GuestHost/OpenGL/include/state/cr_framebuffer.h

    r41160 r43980  
    7575DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectSwitch(CRContext *from, CRContext *to);
    7676
    77 DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectDisableHW(CRContext *ctx, GLuint idFBO);
    78 DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectReenableHW(CRContext *fromCtx, CRContext *toCtx, GLuint idFBO);
     77DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectDisableHW(CRContext *ctx, GLuint idDrawFBO, GLuint idReadFBO);
     78DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectReenableHW(CRContext *fromCtx, CRContext *toCtx, GLuint idDrawFBO, GLuint idReadFBO);
    7979
    8080DECLEXPORT(GLuint) STATE_APIENTRY crStateGetFramebufferHWID(GLuint id);
  • 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