Commit 7d034dcf authored by Sam Lantinga's avatar Sam Lantinga

Exported the software renderer texture functions to make easier to create

a renderer based on a framebuffer.

Fixed an initialization bug with the dummy video display mode.

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%402589
parent 2de3ba20
...@@ -161,6 +161,36 @@ DisplayPaletteChanged(void *userdata, SDL_Palette * palette) ...@@ -161,6 +161,36 @@ DisplayPaletteChanged(void *userdata, SDL_Palette * palette)
return 0; 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 * SDL_Renderer *
SW_CreateRenderer(SDL_Window * window, Uint32 flags) SW_CreateRenderer(SDL_Window * window, Uint32 flags)
{ {
...@@ -194,28 +224,15 @@ SW_CreateRenderer(SDL_Window * window, Uint32 flags) ...@@ -194,28 +224,15 @@ SW_CreateRenderer(SDL_Window * window, Uint32 flags)
} }
renderer->ActivateRenderer = SW_ActivateRenderer; renderer->ActivateRenderer = SW_ActivateRenderer;
renderer->DisplayModeChanged = SW_DisplayModeChanged; 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->RenderFill = SW_RenderFill;
renderer->RenderCopy = SW_RenderCopy; renderer->RenderCopy = SW_RenderCopy;
renderer->RenderPresent = SW_RenderPresent; renderer->RenderPresent = SW_RenderPresent;
renderer->DestroyTexture = SW_DestroyTexture;
renderer->DestroyRenderer = SW_DestroyRenderer; 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->window = window->id;
renderer->driverdata = data; renderer->driverdata = data;
Setup_SoftwareRenderer(renderer);
renderer->info.flags = 0;
if (flags & SDL_RENDERER_PRESENTFLIP2) { if (flags & SDL_RENDERER_PRESENTFLIP2) {
renderer->info.flags |= SDL_RENDERER_PRESENTFLIP2; renderer->info.flags |= SDL_RENDERER_PRESENTFLIP2;
...@@ -417,7 +434,9 @@ SW_GetTexturePalette(SDL_Renderer * renderer, SDL_Texture * texture, ...@@ -417,7 +434,9 @@ SW_GetTexturePalette(SDL_Renderer * renderer, SDL_Texture * texture,
static void static void
SW_UpdateRenderCopyFunc(SDL_Renderer * renderer, SDL_Texture * texture) 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; SDL_Surface *surface = (SDL_Surface *) texture->driverdata;
/* We only need a special copy function for advanced features */ /* We only need a special copy function for advanced features */
...@@ -426,7 +445,7 @@ SW_UpdateRenderCopyFunc(SDL_Renderer * renderer, SDL_Texture * texture) ...@@ -426,7 +445,7 @@ SW_UpdateRenderCopyFunc(SDL_Renderer * renderer, SDL_Texture * texture)
blendMode & (SDL_TEXTUREBLENDMODE_ADD | SDL_TEXTUREBLENDMODE_MOD)) blendMode & (SDL_TEXTUREBLENDMODE_ADD | SDL_TEXTUREBLENDMODE_MOD))
|| texture->scaleMode) { || texture->scaleMode) {
surface->userdata = surface->userdata =
SDL_GetRenderCopyFunc(texture->format, data->format, SDL_GetRenderCopyFunc(texture->format, displayMode->format,
texture->modMode, texture->blendMode, texture->modMode, texture->blendMode,
texture->scaleMode); texture->scaleMode);
} else { } else {
......
...@@ -25,4 +25,7 @@ ...@@ -25,4 +25,7 @@
extern SDL_RenderDriver SW_RenderDriver; 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: */ /* vi: set ts=4 sw=4 expandtab: */
...@@ -897,6 +897,7 @@ DirectFB_DestroyWindow(_THIS, SDL_Window * window) ...@@ -897,6 +897,7 @@ DirectFB_DestroyWindow(_THIS, SDL_Window * window)
devdata->firstwin = windata->next; devdata->firstwin = windata->next;
SDL_free(windata); SDL_free(windata);
} }
static SDL_bool static SDL_bool
DirectFB_GetWindowWMInfo(_THIS, SDL_Window * window, DirectFB_GetWindowWMInfo(_THIS, SDL_Window * window,
struct SDL_SysWMinfo *info) struct SDL_SysWMinfo *info)
......
This diff is collapsed.
...@@ -114,6 +114,7 @@ DUMMY_VideoInit(_THIS) ...@@ -114,6 +114,7 @@ DUMMY_VideoInit(_THIS)
mode.w = 1024; mode.w = 1024;
mode.h = 768; mode.h = 768;
mode.refresh_rate = 0; mode.refresh_rate = 0;
mode.driverdata = NULL;
SDL_AddBasicVideoDisplay(&mode); SDL_AddBasicVideoDisplay(&mode);
SDL_AddRenderDriver(0, &SDL_DUMMY_RenderDriver); SDL_AddRenderDriver(0, &SDL_DUMMY_RenderDriver);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment