forked from archive/yeti3dpro
remove several blit operations, should be faster now
This commit is contained in:
parent
86ba27d73d
commit
997d5021ed
1 changed files with 20 additions and 18 deletions
|
@ -15,8 +15,6 @@ static u16 backbuffer[YETI_FRAMEBUFFER_WIDTH * YETI_FRAMEBUFFER_HEIGHT];
|
||||||
static SDL_Window *window = NULL;
|
static SDL_Window *window = NULL;
|
||||||
static SDL_Renderer *renderer = NULL;
|
static SDL_Renderer *renderer = NULL;
|
||||||
static SDL_Texture *texture = NULL;
|
static SDL_Texture *texture = NULL;
|
||||||
static SDL_Surface *front = NULL;
|
|
||||||
static SDL_Surface *back = NULL;
|
|
||||||
|
|
||||||
static bool focused = true;
|
static bool focused = true;
|
||||||
|
|
||||||
|
@ -67,17 +65,7 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char **argv)
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
SDL_RenderPresent(renderer);
|
SDL_RenderPresent(renderer);
|
||||||
|
|
||||||
back = SDL_CreateSurfaceFrom(YETI_FRAMEBUFFER_WIDTH, YETI_FRAMEBUFFER_HEIGHT, SDL_PIXELFORMAT_XBGR1555, backbuffer, YETI_FRAMEBUFFER_WIDTH * sizeof(u16));
|
texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_XBGR1555, SDL_TEXTUREACCESS_STREAMING, YETI_FRAMEBUFFER_WIDTH, YETI_FRAMEBUFFER_HEIGHT);
|
||||||
if (!back)
|
|
||||||
die(SDL_GetError());
|
|
||||||
|
|
||||||
format = SDL_GetWindowPixelFormat(window);
|
|
||||||
|
|
||||||
front = SDL_CreateSurface(YETI_FRAMEBUFFER_WIDTH, YETI_FRAMEBUFFER_HEIGHT, format);
|
|
||||||
if (!front)
|
|
||||||
die(SDL_GetError());
|
|
||||||
|
|
||||||
texture = SDL_CreateTexture(renderer, format, SDL_TEXTUREACCESS_STREAMING, YETI_FRAMEBUFFER_WIDTH, YETI_FRAMEBUFFER_HEIGHT);
|
|
||||||
if (!texture)
|
if (!texture)
|
||||||
die(SDL_GetError());
|
die(SDL_GetError());
|
||||||
|
|
||||||
|
@ -133,13 +121,20 @@ void do_frame(Sint64 dt)
|
||||||
|
|
||||||
SDL_AppResult SDL_AppIterate(void *appstate)
|
SDL_AppResult SDL_AppIterate(void *appstate)
|
||||||
{
|
{
|
||||||
|
void *pixels;
|
||||||
|
int pitch;
|
||||||
|
|
||||||
/* speed limiter */
|
/* speed limiter */
|
||||||
now = SDL_GetTicks();
|
now = SDL_GetTicks();
|
||||||
do_frame(now - then);
|
do_frame(now - then);
|
||||||
then = now;
|
then = now;
|
||||||
|
|
||||||
SDL_BlitSurface(back, NULL, front, NULL);
|
if (SDL_LockTexture(texture, NULL, &pixels, &pitch))
|
||||||
SDL_UpdateTexture(texture, NULL, front->pixels, front->pitch);
|
{
|
||||||
|
SDL_memcpy(pixels, backbuffer, sizeof(backbuffer));
|
||||||
|
SDL_UnlockTexture(texture);
|
||||||
|
}
|
||||||
|
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
SDL_RenderTexture(renderer, texture, NULL, NULL);
|
SDL_RenderTexture(renderer, texture, NULL, NULL);
|
||||||
SDL_RenderPresent(renderer);
|
SDL_RenderPresent(renderer);
|
||||||
|
@ -175,12 +170,21 @@ SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event)
|
||||||
}
|
}
|
||||||
else if (event->key.scancode == SDL_SCANCODE_F12)
|
else if (event->key.scancode == SDL_SCANCODE_F12)
|
||||||
{
|
{
|
||||||
|
SDL_Surface *screen;
|
||||||
char filename[256];
|
char filename[256];
|
||||||
|
|
||||||
|
screen = SDL_CreateSurfaceFrom(YETI_FRAMEBUFFER_WIDTH, YETI_FRAMEBUFFER_HEIGHT, SDL_PIXELFORMAT_XBGR1555, backbuffer, YETI_FRAMEBUFFER_WIDTH * sizeof(u16));
|
||||||
|
if (!screen)
|
||||||
|
die("%s", SDL_GetError());
|
||||||
|
|
||||||
SDL_snprintf(filename, sizeof(filename), "yeti%03d.bmp", screenshot_idx++);
|
SDL_snprintf(filename, sizeof(filename), "yeti%03d.bmp", screenshot_idx++);
|
||||||
while (file_exists(filename))
|
while (file_exists(filename))
|
||||||
SDL_snprintf(filename, sizeof(filename), "yeti%03d.bmp", screenshot_idx++);
|
SDL_snprintf(filename, sizeof(filename), "yeti%03d.bmp", screenshot_idx++);
|
||||||
SDL_SaveBMP(back, filename);
|
|
||||||
|
SDL_SaveBMP(screen, filename);
|
||||||
SDL_Log("Saved screenshot %s", filename);
|
SDL_Log("Saved screenshot %s", filename);
|
||||||
|
|
||||||
|
SDL_DestroySurface(screen);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -200,8 +204,6 @@ void SDL_AppQuit(void *appstate, SDL_AppResult result)
|
||||||
{
|
{
|
||||||
if (window) SDL_DestroyWindow(window);
|
if (window) SDL_DestroyWindow(window);
|
||||||
if (renderer) SDL_DestroyRenderer(renderer);
|
if (renderer) SDL_DestroyRenderer(renderer);
|
||||||
if (back) SDL_DestroySurface(back);
|
|
||||||
if (front) SDL_DestroySurface(front);
|
|
||||||
if (texture) SDL_DestroyTexture(texture);
|
if (texture) SDL_DestroyTexture(texture);
|
||||||
|
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
|
|
Loading…
Reference in a new issue