Changeset 39815 in vbox
- Timestamp:
- Jan 20, 2012 9:32:29 AM (13 years ago)
- Location:
- trunk/src/VBox
- Files:
-
- 6 edited
-
GuestHost/OpenGL/include/cr_glstate.h (modified) (1 diff)
-
GuestHost/OpenGL/include/state/cr_framebuffer.h (modified) (1 diff)
-
GuestHost/OpenGL/state_tracker/state_diff.c (modified) (1 diff)
-
GuestHost/OpenGL/state_tracker/state_framebuffer.c (modified) (1 diff)
-
HostServices/SharedOpenGL/crserverlib/server_context.c (modified) (3 diffs)
-
HostServices/SharedOpenGL/unpacker/unpack.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/GuestHost/OpenGL/include/cr_glstate.h
r39602 r39815 207 207 DECLEXPORT(void) crStateDestroyContext(CRContext *ctx); 208 208 209 CRContext * crStateSwichPrepare(CRContext *toCtx); 210 void crStateSwichPostprocess(CRContext *fromCtx); 211 209 212 DECLEXPORT(void) crStateFlushFunc( CRStateFlushFunc ff ); 210 213 DECLEXPORT(void) crStateFlushArg( void *arg ); -
trunk/src/VBox/GuestHost/OpenGL/include/state/cr_framebuffer.h
r34107 r39815 67 67 DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectDestroy(CRContext *ctx); 68 68 DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectSwitch(CRContext *from, CRContext *to); 69 70 DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectDisableHW(CRContext *ctx); 71 DECLEXPORT(void) STATE_APIENTRY crStateFramebufferObjectReenableHW(CRContext *fromCtx, CRContext *toCtx); 72 69 73 DECLEXPORT(GLuint) STATE_APIENTRY crStateGetFramebufferHWID(GLuint id); 70 74 DECLEXPORT(GLuint) STATE_APIENTRY crStateGetRenderbufferHWID(GLuint id); -
trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_diff.c
r37613 r39815 345 345 #endif 346 346 } 347 348 CRContext * crStateSwichPrepare(CRContext *toCtx) 349 { 350 CRContext *fromCtx = GetCurrentContext(); 351 352 #ifdef CR_EXT_framebuffer_object 353 if (fromCtx) 354 crStateFramebufferObjectDisableHW(fromCtx); 355 #endif 356 357 return fromCtx; 358 } 359 360 void crStateSwichPostprocess(CRContext *fromCtx) 361 { 362 CRContext *toCtx = GetCurrentContext();; 363 if (!fromCtx || !toCtx) 364 return; 365 366 #ifdef CR_EXT_framebuffer_object 367 crStateFramebufferObjectReenableHW(fromCtx, toCtx); 368 #endif 369 } -
trunk/src/VBox/GuestHost/OpenGL/state_tracker/state_framebuffer.c
r37394 r39815 748 748 } 749 749 750 751 DECLEXPORT(void) STATE_APIENTRY 752 crStateFramebufferObjectDisableHW(CRContext *ctx) 753 { 754 if (ctx->framebufferobject.drawFB) 755 diff_api.BindFramebufferEXT(GL_DRAW_FRAMEBUFFER, 0); 756 757 if (ctx->framebufferobject.readFB) 758 diff_api.BindFramebufferEXT(GL_READ_FRAMEBUFFER, 0); 759 760 if (ctx->framebufferobject.drawFB) 761 diff_api.DrawBuffer(GL_BACK); 762 if (ctx->framebufferobject.readFB) 763 diff_api.ReadBuffer(GL_BACK); 764 765 if (ctx->framebufferobject.renderbuffer) 766 diff_api.BindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); 767 } 768 769 DECLEXPORT(void) STATE_APIENTRY 770 crStateFramebufferObjectReenableHW(CRContext *fromCtx, CRContext *toCtx) 771 { 772 GLboolean fAdjustDrawReadBuffers = GL_FALSE; 773 774 if (fromCtx->framebufferobject.drawFB 775 && fromCtx->framebufferobject.drawFB == toCtx->framebufferobject.drawFB) 776 { 777 diff_api.BindFramebufferEXT(GL_DRAW_FRAMEBUFFER, toCtx->framebufferobject.drawFB->hwid); 778 fAdjustDrawReadBuffers = GL_TRUE; 779 } 780 781 if (fromCtx->framebufferobject.readFB 782 && fromCtx->framebufferobject.readFB == toCtx->framebufferobject.readFB) 783 { 784 diff_api.BindFramebufferEXT(GL_READ_FRAMEBUFFER, toCtx->framebufferobject.readFB->hwid); 785 fAdjustDrawReadBuffers = GL_TRUE; 786 } 787 788 if (fAdjustDrawReadBuffers) 789 { 790 diff_api.DrawBuffer(toCtx->framebufferobject.drawFB?toCtx->framebufferobject.drawFB->drawbuffer[0]:toCtx->buffer.drawBuffer); 791 diff_api.ReadBuffer(toCtx->framebufferobject.readFB?toCtx->framebufferobject.readFB->readbuffer:toCtx->buffer.readBuffer); 792 } 793 } 794 795 750 796 DECLEXPORT(GLuint) STATE_APIENTRY crStateGetFramebufferHWID(GLuint id) 751 797 { 752 798 CRContext *g = GetCurrentContext(); 753 799 CRFramebufferObject *pFBO = (CRFramebufferObject*) crHashtableSearch(g->shared->fbTable, id); 754 800 #ifdef DEBUG_misha 801 crDebug("FB id(%d) hw(%d)", id, pFBO ? pFBO->hwid : 0); 802 #endif 755 803 return pFBO ? pFBO->hwid : 0; 756 804 } -
trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_context.c
r39265 r39815 231 231 { 232 232 CRMuralInfo *mural, *oldMural; 233 CRContext *ctx ;233 CRContext *ctx, *oldCtx; 234 234 235 235 if (context >= 0 && window >= 0) { … … 267 267 return; 268 268 } 269 270 /* Ubuntu 11.04 hosts misbehave if context window switch is 271 * done with non-default framebuffer object settings. 272 * crStateSwichPrepare & crStateSwichPostprocess are supposed to work around this problem 273 * crStateSwichPrepare restores the FBO state to its default values before the context window switch, 274 * while crStateSwichPostprocess restores it back to the original values */ 275 oldCtx = crStateSwichPrepare(ctx); 269 276 270 277 /* … … 326 333 crStateMakeCurrent( ctx ); 327 334 335 crStateSwichPostprocess(oldCtx); 336 328 337 if (oldMural != mural && crServerSupportRedirMuralFBO()) 329 338 { -
trunk/src/VBox/HostServices/SharedOpenGL/unpacker/unpack.py
r21781 r39815 227 227 for (i = 0 ; i < num_opcodes ; i++) 228 228 { 229 230 CRDBGPTR_CHECKZ(writeback_ptr); 231 CRDBGPTR_CHECKZ(return_ptr); 232 229 233 /*crDebug(\"Unpacking opcode \%d\", *unpack_opcodes);*/ 230 234 switch( *unpack_opcodes ) … … 263 267 break; 264 268 } 269 270 CRDBGPTR_CHECKZ(writeback_ptr); 271 CRDBGPTR_CHECKZ(return_ptr); 272 265 273 unpack_opcodes--; 266 274 }
Note:
See TracChangeset
for help on using the changeset viewer.

