DFBResult CoreGraphicsStateClient_StretchBlit( CoreGraphicsStateClient *client, const DFBRectangle *srects, const DFBRectangle *drects, unsigned int num ) { D_DEBUG_AT( Core_GraphicsStateClient, "%s( client %p )\n", __FUNCTION__, client ); D_MAGIC_ASSERT( client, CoreGraphicsStateClient ); D_ASSERT( srects != NULL ); D_ASSERT( drects != NULL ); if (num == 0) return DFB_OK; if (num != 1) D_UNIMPLEMENTED(); if (dfb_core_is_master( client->core ) || !fusion_config->secure_fusion) { // FIXME: will overwrite rects dfb_gfxcard_stretchblit( (DFBRectangle*) srects, (DFBRectangle*) drects, client->state ); } else { DFBResult ret; CoreGraphicsStateClient_Update( client, DFXL_STRETCHBLIT, client->state ); ret = CoreGraphicsState_StretchBlit( client->gfx_state, srects, drects, num ); if (ret) return ret; } return DFB_OK; }
DFBResult CoreGraphicsStateClient_StretchBlit( CoreGraphicsStateClient *client, const DFBRectangle *srects, const DFBRectangle *drects, unsigned int num ) { D_DEBUG_AT( Core_GraphicsStateClient, "%s( client %p )\n", __FUNCTION__, client ); D_MAGIC_ASSERT( client, CoreGraphicsStateClient ); D_ASSERT( srects != NULL ); D_ASSERT( drects != NULL ); if (num == 0) return DFB_OK; if (!dfb_config->call_nodirect && (dfb_core_is_master( client->core ) || !fusion_config->secure_fusion)) { if (num == 1 && srects[0].w == drects[0].w && srects[0].h == drects[0].h) { DFBPoint point = { drects[0].x, drects[0].y }; // FIXME: will overwrite rects, points dfb_gfxcard_batchblit( (DFBRectangle*) srects, &point, 1, client->state ); } else { // FIXME: will overwrite rects dfb_gfxcard_batchstretchblit( (DFBRectangle*) srects, (DFBRectangle*) drects, num, client->state ); } } else { DFBResult ret; if (num == 1 && srects[0].w == drects[0].w && srects[0].h == drects[0].h) { CoreGraphicsStateClient_Update( client, DFXL_BLIT, client->state ); DFBPoint point = { drects[0].x, drects[0].y }; ret = CoreGraphicsState_Blit( client->gfx_state, srects, &point, 1 ); if (ret) return ret; } else { CoreGraphicsStateClient_Update( client, DFXL_STRETCHBLIT, client->state ); ret = CoreGraphicsState_StretchBlit( client->gfx_state, srects, drects, num ); if (ret) return ret; } } return DFB_OK; }