Browse Source

Improve renderer creation; enable vsync for non-OpenGL renderers

develop
Ben Kurtovic 5 years ago
parent
commit
dad4d1627c
1 changed files with 16 additions and 6 deletions
  1. +16
    -6
      src/emulator.c

+ 16
- 6
src/emulator.c View File

@@ -102,13 +102,25 @@ static void setup_graphics(Config *config)
int height = config->scale * GG_SCREEN_HEIGHT; int height = config->scale * GG_SCREEN_HEIGHT;
if (!config->square_par) if (!config->square_par)
height = height * GG_PIXEL_HEIGHT / GG_PIXEL_WIDTH; height = height * GG_PIXEL_HEIGHT / GG_PIXEL_WIDTH;
SDL_CreateWindowAndRenderer(width, height, flags,
&emu.window, &emu.renderer);


emu.window = SDL_CreateWindow("crater", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, width, height, flags);
if (!emu.window) if (!emu.window)
FATAL("SDL failed to create a window: %s", SDL_GetError()); FATAL("SDL failed to create a window: %s", SDL_GetError());
if (!emu.renderer)
FATAL("SDL failed to create a renderer: %s", SDL_GetError());

emu.renderer = SDL_CreateRenderer(emu.window, -1,
SDL_RENDERER_ACCELERATED|SDL_RENDERER_PRESENTVSYNC);
if (!emu.renderer) {
// Fall back to software renderer (or a hardware renderer
// without vsync, if one exists?)
emu.renderer = SDL_CreateRenderer(emu.window, -1, 0);
if (!emu.renderer)
FATAL("SDL failed to create a renderer: %s", SDL_GetError());
}

SDL_RendererInfo info;
SDL_GetRendererInfo(emu.renderer, &info);
DEBUG("Using %s renderer", info.name);


emu.texture = SDL_CreateTexture(emu.renderer, SDL_PIXELFORMAT_ARGB8888, emu.texture = SDL_CreateTexture(emu.renderer, SDL_PIXELFORMAT_ARGB8888,
SDL_TEXTUREACCESS_STREAMING, GG_SCREEN_WIDTH, GG_SCREEN_HEIGHT); SDL_TEXTUREACCESS_STREAMING, GG_SCREEN_WIDTH, GG_SCREEN_HEIGHT);
@@ -123,9 +135,7 @@ static void setup_graphics(Config *config)
config->square_par ? GG_SCREEN_WIDTH : GG_LOGICAL_WIDTH, config->square_par ? GG_SCREEN_WIDTH : GG_LOGICAL_WIDTH,
config->square_par ? GG_SCREEN_HEIGHT : GG_LOGICAL_HEIGHT); config->square_par ? GG_SCREEN_HEIGHT : GG_LOGICAL_HEIGHT);
SDL_SetTextureBlendMode(emu.texture, SDL_BLENDMODE_BLEND); SDL_SetTextureBlendMode(emu.texture, SDL_BLENDMODE_BLEND);
SDL_SetWindowTitle(emu.window, "crater");
SDL_ShowCursor(SDL_DISABLE); SDL_ShowCursor(SDL_DISABLE);
SDL_GL_SetSwapInterval(1); // Vsync


SDL_SetRenderDrawColor(emu.renderer, 0x00, 0x00, 0x00, 0xFF); SDL_SetRenderDrawColor(emu.renderer, 0x00, 0x00, 0x00, 0xFF);
SDL_RenderClear(emu.renderer); SDL_RenderClear(emu.renderer);


Loading…
Cancel
Save