Mercurial > repos > blastem
diff render_sdl.c @ 487:c08a4efeee7f opengl
Update opengl branch from default. Fix build breakage unrelated to merge
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 26 Oct 2013 22:38:47 -0700 |
parents | 7696d824489d db5880d8ea03 |
children | 32f053ad9b02 |
line wrap: on
line diff
--- a/render_sdl.c Tue Jul 23 23:01:03 2013 -0700 +++ b/render_sdl.c Sat Oct 26 22:38:47 2013 -0700 @@ -1,3 +1,8 @@ +/* + Copyright 2013 Michael Pavone + This file is part of BlastEm. + BlastEm is free software distributed under the terms of the GNU General Public License version 3 or greater. See COPYING for full license text. +*/ #include <stdlib.h> #include <stdio.h> #include "render.h" @@ -5,7 +10,9 @@ #include "io.h" #ifndef DISABLE_OPENGL +#define GL_GLEXT_PROTOTYPES #include <GL/gl.h> +#include <GL/glext.h> #endif SDL_Surface *screen; @@ -78,6 +85,11 @@ SDL_Joystick * joysticks[MAX_JOYSTICKS]; int num_joysticks; +int render_num_joysticks() +{ + return num_joysticks; +} + uint32_t render_map_color(uint8_t r, uint8_t g, uint8_t b) { if (render_gl) { @@ -113,7 +125,7 @@ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); if (i < 2) { - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 512, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, i ? context->evenbuf : context->oddbuf); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 512, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, i ? context->evenbuf : context->oddbuf); } else { uint32_t blank = 255; glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 1, 1, 0, GL_BGRA, GL_UNSIGNED_BYTE, &blank); @@ -135,7 +147,9 @@ return screen->format->BytesPerPixel * 8; } -void render_init(int width, int height, char * title, uint32_t fps, uint8_t use_gl) +char * caption = NULL; + +void render_init(int width, int height, char * title, uint32_t fps, uint8_t fullscreen, uint8_t use_gl) { if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK) < 0) { fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError()); @@ -144,7 +158,7 @@ atexit(SDL_Quit); atexit(render_close_audio); printf("width: %d, height: %d\n", width, height); - uint32_t flags + uint32_t flags = SDL_ANYFORMAT; #ifndef DISABLE_OPENGL if (use_gl) { @@ -158,7 +172,11 @@ #else { #endif - flags = SDL_SWSURFACE | SDL_ANYFORMAT; + if (fullscreen) { + flags |= SDL_FULLSCREEN | SDL_HWSURFACE | SDL_DOUBLEBUF; + } else { + flags |= SDL_SWSURFACE; + } } screen = SDL_SetVideoMode(width, height, 32, flags); if (!screen) { @@ -174,6 +192,7 @@ render_gl = use_gl; #endif SDL_WM_SetCaption(title, title); + caption = title; min_delay = 0; for (int i = 0; i < 100; i++) { uint32_t start = SDL_GetTicks(); @@ -196,10 +215,21 @@ audio_ready = SDL_CreateCond(); SDL_AudioSpec desired, actual; - desired.freq = 48000; + char * rate_str = tern_find_ptr(config, "audiorate"); + int rate = rate_str ? atoi(rate_str) : 0; + if (!rate) { + rate = 48000; + } + desired.freq = rate; desired.format = AUDIO_S16SYS; desired.channels = 2; - desired.samples = 2048;//1024; + char * samples_str = tern_find_ptr(config, "audiobuffer"); + int samples = samples_str ? atoi(samples_str) : 0; + if (!samples) { + samples = 512; + } + printf("config says: %d\n", samples); + desired.samples = samples*2; desired.callback = audio_callback; desired.userdata = NULL; @@ -298,7 +328,8 @@ if ( SDL_MUSTLOCK(screen) ) { SDL_UnlockSurface(screen); } - SDL_UpdateRect(screen, 0, 0, screen->clip_rect.w, screen->clip_rect.h); + //SDL_UpdateRect(screen, 0, 0, screen->clip_rect.w, screen->clip_rect.h); + SDL_Flip(screen); if (context->regs[REG_MODE_4] & BIT_INTERLACE) { context->framebuf = context->framebuf == context->oddbuf ? context->evenbuf : context->oddbuf; @@ -385,6 +416,8 @@ return 0; } +char * fps_caption = NULL; + uint32_t frame_counter = 0; uint32_t start = 0; int wait_render_frame(vdp_context * context, int frame_limit) @@ -411,15 +444,19 @@ //TODO: Figure out why this causes segfaults - /*frame_counter++; + frame_counter++; if ((last_frame - start) > 1000) { if (start && (last_frame-start)) { - printf("\r%f fps", ((float)frame_counter) / (((float)(last_frame-start)) / 1000.0)); + if (!fps_caption) { + fps_caption = malloc(strlen(caption) + strlen(" - 1000.1 fps") + 1); + } + sprintf(fps_caption, "%s - %.1f fps", caption, ((float)frame_counter) / (((float)(last_frame-start)) / 1000.0)); + SDL_WM_SetCaption(fps_caption, caption); fflush(stdout); } start = last_frame; frame_counter = 0; - }*/ + } return ret; }