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

Commit

Permalink
Exported the software renderer texture functions to make easier to cr…
Browse files Browse the repository at this point in the history
…eate

a renderer based on a framebuffer.

Fixed an initialization bug with the dummy video display mode.
  • Loading branch information
slouken committed Aug 11, 2007
1 parent dbc7937 commit 1b25d88
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 322 deletions.
55 changes: 37 additions & 18 deletions src/video/SDL_renderer_sw.c
Expand Up @@ -161,6 +161,36 @@ DisplayPaletteChanged(void *userdata, SDL_Palette * palette)
return 0;
}

void
Setup_SoftwareRenderer(SDL_Renderer * renderer)
{
renderer->CreateTexture = SW_CreateTexture;
renderer->QueryTexturePixels = SW_QueryTexturePixels;
renderer->SetTexturePalette = SW_SetTexturePalette;
renderer->GetTexturePalette = SW_GetTexturePalette;
renderer->SetTextureColorMod = SW_SetTextureColorMod;
renderer->SetTextureAlphaMod = SW_SetTextureAlphaMod;
renderer->SetTextureBlendMode = SW_SetTextureBlendMode;
renderer->SetTextureScaleMode = SW_SetTextureScaleMode;
renderer->UpdateTexture = SW_UpdateTexture;
renderer->LockTexture = SW_LockTexture;
renderer->UnlockTexture = SW_UnlockTexture;
renderer->DirtyTexture = SW_DirtyTexture;
renderer->DestroyTexture = SW_DestroyTexture;

renderer->info.mod_modes = SW_RenderDriver.info.mod_modes;
renderer->info.blend_modes = SW_RenderDriver.info.blend_modes;
renderer->info.scale_modes = SW_RenderDriver.info.scale_modes;
renderer->info.num_texture_formats =
SW_RenderDriver.info.num_texture_formats;
SDL_memcpy(renderer->info.texture_formats,
SW_RenderDriver.info.texture_formats,
sizeof(renderer->info.texture_formats));;
renderer->info.max_texture_width = SW_RenderDriver.info.max_texture_width;
renderer->info.max_texture_height =
SW_RenderDriver.info.max_texture_height;
}

SDL_Renderer *
SW_CreateRenderer(SDL_Window * window, Uint32 flags)
{
Expand Down Expand Up @@ -194,28 +224,15 @@ SW_CreateRenderer(SDL_Window * window, Uint32 flags)
}
renderer->ActivateRenderer = SW_ActivateRenderer;
renderer->DisplayModeChanged = SW_DisplayModeChanged;
renderer->CreateTexture = SW_CreateTexture;
renderer->QueryTexturePixels = SW_QueryTexturePixels;
renderer->SetTexturePalette = SW_SetTexturePalette;
renderer->GetTexturePalette = SW_GetTexturePalette;
renderer->SetTextureColorMod = SW_SetTextureColorMod;
renderer->SetTextureAlphaMod = SW_SetTextureAlphaMod;
renderer->SetTextureBlendMode = SW_SetTextureBlendMode;
renderer->SetTextureScaleMode = SW_SetTextureScaleMode;
renderer->UpdateTexture = SW_UpdateTexture;
renderer->LockTexture = SW_LockTexture;
renderer->UnlockTexture = SW_UnlockTexture;
renderer->DirtyTexture = SW_DirtyTexture;
renderer->RenderFill = SW_RenderFill;
renderer->RenderCopy = SW_RenderCopy;
renderer->RenderPresent = SW_RenderPresent;
renderer->DestroyTexture = SW_DestroyTexture;
renderer->DestroyRenderer = SW_DestroyRenderer;
renderer->info = SW_RenderDriver.info;
renderer->info.name = SW_RenderDriver.info.name;
renderer->info.flags = 0;
renderer->window = window->id;
renderer->driverdata = data;

renderer->info.flags = 0;
Setup_SoftwareRenderer(renderer);

if (flags & SDL_RENDERER_PRESENTFLIP2) {
renderer->info.flags |= SDL_RENDERER_PRESENTFLIP2;
Expand Down Expand Up @@ -417,7 +434,9 @@ SW_GetTexturePalette(SDL_Renderer * renderer, SDL_Texture * texture,
static void
SW_UpdateRenderCopyFunc(SDL_Renderer * renderer, SDL_Texture * texture)
{
SW_RenderData *data = (SW_RenderData *) renderer->driverdata;
SDL_Window *window = SDL_GetWindowFromID(renderer->window);
SDL_VideoDisplay *display = SDL_GetDisplayFromWindow(window);
SDL_DisplayMode *displayMode = &display->current_mode;
SDL_Surface *surface = (SDL_Surface *) texture->driverdata;

/* We only need a special copy function for advanced features */
Expand All @@ -426,7 +445,7 @@ SW_UpdateRenderCopyFunc(SDL_Renderer * renderer, SDL_Texture * texture)
blendMode & (SDL_TEXTUREBLENDMODE_ADD | SDL_TEXTUREBLENDMODE_MOD))
|| texture->scaleMode) {
surface->userdata =
SDL_GetRenderCopyFunc(texture->format, data->format,
SDL_GetRenderCopyFunc(texture->format, displayMode->format,
texture->modMode, texture->blendMode,
texture->scaleMode);
} else {
Expand Down
3 changes: 3 additions & 0 deletions src/video/SDL_renderer_sw.h
Expand Up @@ -25,4 +25,7 @@

extern SDL_RenderDriver SW_RenderDriver;

/* Set up SDL_Surface texture functions for a renderer */
void Setup_SoftwareRenderer(SDL_Renderer * renderer);

/* vi: set ts=4 sw=4 expandtab: */
1 change: 1 addition & 0 deletions src/video/directfb/SDL_DirectFB_video.c
Expand Up @@ -897,6 +897,7 @@ DirectFB_DestroyWindow(_THIS, SDL_Window * window)
devdata->firstwin = windata->next;
SDL_free(windata);
}

static SDL_bool
DirectFB_GetWindowWMInfo(_THIS, SDL_Window * window,
struct SDL_SysWMinfo *info)
Expand Down

0 comments on commit 1b25d88

Please sign in to comment.