Skip to content

Instantly share code, notes, and snippets.

@incinirate
Last active December 23, 2018 21:46
Show Gist options
  • Save incinirate/9ea87131e5e27ef056a98bbeca505328 to your computer and use it in GitHub Desktop.
Save incinirate/9ea87131e5e27ef056a98bbeca505328 to your computer and use it in GitHub Desktop.
Demonstration of slowdown when using BlitRect
#include "SDL.h"
#include "SDL_gpu.h"
#include <stdio.h>
#define WIDTH 280
#define HEIGHT 160
#define SCALE 3
bool running = true;
bool doScale = true;
GPU_Image *buffer;
GPU_Target *bufferTarget;
GPU_Target *renderer;
void loop() {
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_QUIT:
running = false;
break;
case SDL_KEYDOWN:
if (event.key.keysym.sym == SDLK_ESCAPE)
running = false;
else
doScale = !doScale;
break;
default:
break;
}
}
GPU_Clear(renderer);
if (doScale) GPU_BlitRect(buffer, nullptr, renderer, nullptr);
else GPU_Blit(buffer, nullptr, renderer, WIDTH / 2, HEIGHT / 2);
GPU_Flip(renderer);
}
int main() {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window *window = SDL_CreateWindow(
"Test",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
WIDTH * SCALE, HEIGHT * SCALE,
SDL_WINDOW_OPENGL
);
GPU_SetInitWindow(SDL_GetWindowID(window));
renderer = GPU_Init(
WIDTH * SCALE, HEIGHT * SCALE,
GPU_DEFAULT_INIT_FLAGS
);
if (renderer == nullptr) {
printf("Could not create window: %s\n", SDL_GetError());
return 1;
}
buffer = GPU_CreateImage(WIDTH, HEIGHT, GPU_FORMAT_RGBA);
GPU_SetBlending(buffer, GPU_FALSE);
GPU_SetImageFilter(buffer, GPU_FILTER_NEAREST);
bufferTarget = GPU_LoadTarget(buffer);
SDL_Color color = {255, 0, 255, 255};
GPU_ClearColor(bufferTarget, color);
while (running) {
int start = SDL_GetTicks();
loop();
int time = SDL_GetTicks() - start;
if (time < 0) continue;
int sleepTime = 100/6 - time;
if (sleepTime > 0) {
SDL_Delay(sleepTime);
} else {
SDL_Delay(1);
}
}
GPU_FreeImage(buffer);
GPU_FreeTarget(renderer);
GPU_Quit();
SDL_Quit();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment