Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
RenderReadPixels and RenderWritePixels functions work with back buffe…
Browse files Browse the repository at this point in the history
…r now and all asynchronous operations are flushed before reading or writing to backbuffer. Thanks Sam for clarification of this.
  • Loading branch information
llmike committed Nov 21, 2009
1 parent a79e2e3 commit 9aa1024
Showing 1 changed file with 42 additions and 12 deletions.
54 changes: 42 additions & 12 deletions src/video/photon/SDL_photon_render.c
Expand Up @@ -1594,17 +1594,32 @@ photon_renderreadpixels(SDL_Renderer * renderer, const SDL_Rect * rect,
uint8_t* spixels=NULL;
unsigned int spitch=0;

/* Flush all undrawn graphics data to surface */
switch (rdata->surfaces_type)
{
case SDL_PHOTON_SURFTYPE_OFFSCREEN:
sformat=photon_image_to_sdl_pixelformat(rdata->osurfaces[rdata->surface_visible_idx]->format);
spixels=(uint8_t*)PdGetOffscreenContextPtr(rdata->osurfaces[rdata->surface_visible_idx]);
spitch=rdata->osurfaces[rdata->surface_visible_idx]->pitch;
PgFlushCx(rdata->osurfaces[rdata->surface_render_idx]);
PgWaitHWIdle();
break;
case SDL_PHOTON_SURFTYPE_PHIMAGE:
sformat=photon_image_to_sdl_pixelformat(rdata->psurfaces[rdata->surface_visible_idx]->type);
spixels=(uint8_t*)rdata->psurfaces[rdata->surface_visible_idx]->image;
spitch=rdata->psurfaces[rdata->surface_visible_idx]->bpl;
PmMemFlush(rdata->pcontexts[rdata->surface_render_idx], rdata->psurfaces[rdata->surface_render_idx]);
break;
case SDL_PHOTON_SURFTYPE_UNKNOWN:
default:
return;
}

switch (rdata->surfaces_type)
{
case SDL_PHOTON_SURFTYPE_OFFSCREEN:
sformat=photon_image_to_sdl_pixelformat(rdata->osurfaces[rdata->surface_render_idx]->format);
spixels=(uint8_t*)PdGetOffscreenContextPtr(rdata->osurfaces[rdata->surface_render_idx]);
spitch=rdata->osurfaces[rdata->surface_render_idx]->pitch;
break;
case SDL_PHOTON_SURFTYPE_PHIMAGE:
sformat=photon_image_to_sdl_pixelformat(rdata->psurfaces[rdata->surface_render_idx]->type);
spixels=(uint8_t*)rdata->psurfaces[rdata->surface_render_idx]->image;
spitch=rdata->psurfaces[rdata->surface_render_idx]->bpl;
break;
case SDL_PHOTON_SURFTYPE_UNKNOWN:
default:
Expand All @@ -1631,17 +1646,32 @@ photon_renderwritepixels(SDL_Renderer * renderer, const SDL_Rect * rect,
uint8_t* spixels=NULL;
unsigned int spitch=0;

/* Flush all undrawn graphics data to surface */
switch (rdata->surfaces_type)
{
case SDL_PHOTON_SURFTYPE_OFFSCREEN:
PgFlushCx(rdata->osurfaces[rdata->surface_render_idx]);
PgWaitHWIdle();
break;
case SDL_PHOTON_SURFTYPE_PHIMAGE:
PmMemFlush(rdata->pcontexts[rdata->surface_render_idx], rdata->psurfaces[rdata->surface_render_idx]);
break;
case SDL_PHOTON_SURFTYPE_UNKNOWN:
default:
return;
}

switch (rdata->surfaces_type)
{
case SDL_PHOTON_SURFTYPE_OFFSCREEN:
sformat=photon_image_to_sdl_pixelformat(rdata->osurfaces[rdata->surface_visible_idx]->format);
spixels=(uint8_t*)PdGetOffscreenContextPtr(rdata->osurfaces[rdata->surface_visible_idx]);
spitch=rdata->osurfaces[rdata->surface_visible_idx]->pitch;
sformat=photon_image_to_sdl_pixelformat(rdata->osurfaces[rdata->surface_render_idx]->format);
spixels=(uint8_t*)PdGetOffscreenContextPtr(rdata->osurfaces[rdata->surface_render_idx]);
spitch=rdata->osurfaces[rdata->surface_render_idx]->pitch;
break;
case SDL_PHOTON_SURFTYPE_PHIMAGE:
sformat=photon_image_to_sdl_pixelformat(rdata->psurfaces[rdata->surface_visible_idx]->type);
spixels=(uint8_t*)rdata->psurfaces[rdata->surface_visible_idx]->image;
spitch=rdata->psurfaces[rdata->surface_visible_idx]->bpl;
sformat=photon_image_to_sdl_pixelformat(rdata->psurfaces[rdata->surface_render_idx]->type);
spixels=(uint8_t*)rdata->psurfaces[rdata->surface_render_idx]->image;
spitch=rdata->psurfaces[rdata->surface_render_idx]->bpl;
break;
case SDL_PHOTON_SURFTYPE_UNKNOWN:
default:
Expand Down

0 comments on commit 9aa1024

Please sign in to comment.