Mercurial > repos > simple16
view src/system_sdl.c @ 21:91ded3b12d96
Only run rendering hardware when display is enabled
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 29 Mar 2016 19:59:26 -0700 |
parents | 41ec033ef8c3 |
children | 4c9dbfa30a66 |
line wrap: on
line source
#include <SDL.h> #include <stdint.h> #include <stdlib.h> SDL_Window *window; SDL_Renderer *renderer; SDL_Texture *texture; int system_init(int width, int height) { if (SDL_Init(SDL_INIT_VIDEO) < 0) { fprintf(stderr, "Failed to init SDL: %s\n", SDL_GetError()); return 0; } atexit(SDL_Quit); window = SDL_CreateWindow("simple16", 0, 0, width, height, 0); if (!window) { fprintf(stderr, "Failed to create window: %s\n", SDL_GetError()); return 0; } renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); if (!renderer) { fprintf(stderr, "Failed to create renderer: %s\n", SDL_GetError()); return 0; } texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGB444, SDL_TEXTUREACCESS_STREAMING, 320, 240); if (!texture) { fprintf(stderr, "Failed to create texture: %s\n", SDL_GetError()); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); return 0; } return 1; } //Should be called once per frame to get a pointer to the output buffer at the start of rendering uint16_t *system_get_framebuffer(int *pitch) { void *pixels; if (SDL_LockTexture(texture, NULL, &pixels, pitch) < 0) { fprintf(stderr, "Failed to lock texture: %s\n", SDL_GetError()); return NULL; } return pixels; } //Should be called once per frame at the competion of rendering //The pointer returned by system_get_framebuffer should be discarded after calling this function void system_framebuffer_updated() { SDL_UnlockTexture(texture); SDL_RenderCopy(renderer, texture, NULL, NULL); SDL_RenderPresent(renderer); } void system_poll_events() { SDL_Event event; while(SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: exit(0); break; } } }