comparison test/common.c @ 5150:ad50b3db78bd

The rendering functions take a context so it's clear what window they're drawing to. This also potentially opens to the door to multi-threaded rendering in the future.
author Sam Lantinga <slouken@libsdl.org>
date Tue, 01 Feb 2011 19:19:43 -0800
parents c8e049de174c
children af8ca17f6b7c
comparison
equal deleted inserted replaced
5149:3052772b59db 5150:ad50b3db78bd
644 fullscreen_mode.refresh_rate = state->refresh_rate; 644 fullscreen_mode.refresh_rate = state->refresh_rate;
645 645
646 state->windows = 646 state->windows =
647 (SDL_Window **) SDL_malloc(state->num_windows * 647 (SDL_Window **) SDL_malloc(state->num_windows *
648 sizeof(*state->windows)); 648 sizeof(*state->windows));
649 if (!state->windows) { 649 state->renderers =
650 (SDL_Renderer **) SDL_malloc(state->num_windows *
651 sizeof(*state->renderers));
652 if (!state->windows || !state->renderers) {
650 fprintf(stderr, "Out of memory!\n"); 653 fprintf(stderr, "Out of memory!\n");
651 return SDL_FALSE; 654 return SDL_FALSE;
652 } 655 }
653 for (i = 0; i < state->num_windows; ++i) { 656 for (i = 0; i < state->num_windows; ++i) {
654 char title[1024]; 657 char title[1024];
682 SDL_FreeSurface(icon); 685 SDL_FreeSurface(icon);
683 } 686 }
684 } 687 }
685 688
686 SDL_ShowWindow(state->windows[i]); 689 SDL_ShowWindow(state->windows[i]);
690
691 state->renderers[i] = NULL;
687 692
688 if (!state->skip_renderer 693 if (!state->skip_renderer
689 && (state->renderdriver 694 && (state->renderdriver
690 || !(state->window_flags & SDL_WINDOW_OPENGL))) { 695 || !(state->window_flags & SDL_WINDOW_OPENGL))) {
691 m = -1; 696 m = -1;
705 "Couldn't find render driver named %s", 710 "Couldn't find render driver named %s",
706 state->renderdriver); 711 state->renderdriver);
707 return SDL_FALSE; 712 return SDL_FALSE;
708 } 713 }
709 } 714 }
710 if (SDL_CreateRenderer 715 state->renderers[i] = SDL_CreateRenderer(state->windows[i],
711 (state->windows[i], m, state->render_flags) < 0) { 716 m, state->render_flags);
717 if (!state->renderers[i]) {
712 fprintf(stderr, "Couldn't create renderer: %s\n", 718 fprintf(stderr, "Couldn't create renderer: %s\n",
713 SDL_GetError()); 719 SDL_GetError());
714 return SDL_FALSE; 720 return SDL_FALSE;
715 } 721 }
716 if (state->verbose & VERBOSE_RENDER) { 722 if (state->verbose & VERBOSE_RENDER) {
717 SDL_RendererInfo info; 723 SDL_RendererInfo info;
718 724
719 fprintf(stderr, "Current renderer:\n"); 725 fprintf(stderr, "Current renderer:\n");
720 SDL_GetRendererInfo(&info); 726 SDL_GetRendererInfo(state->renderers[i], &info);
721 PrintRenderer(&info); 727 PrintRenderer(&info);
722 } 728 }
723 } 729 }
724 } 730 }
725 SDL_SelectRenderer(state->windows[0]);
726 } 731 }
727 732
728 if (state->flags & SDL_INIT_AUDIO) { 733 if (state->flags & SDL_INIT_AUDIO) {
729 if (state->verbose & VERBOSE_AUDIO) { 734 if (state->verbose & VERBOSE_AUDIO) {
730 n = SDL_GetNumAudioDrivers(); 735 n = SDL_GetNumAudioDrivers();
1010 } 1015 }
1011 1016
1012 void 1017 void
1013 CommonQuit(CommonState * state) 1018 CommonQuit(CommonState * state)
1014 { 1019 {
1020 int i;
1021
1022 if (state->windows) {
1023 SDL_free(state->windows);
1024 }
1025 if (state->renderers) {
1026 for (i = 0; i < state->num_windows; ++i) {
1027 if (state->renderers[i]) {
1028 SDL_DestroyRenderer(state->renderers[i]);
1029 }
1030 }
1031 SDL_free(state->renderers);
1032 }
1015 if (state->flags & SDL_INIT_VIDEO) { 1033 if (state->flags & SDL_INIT_VIDEO) {
1016 SDL_VideoQuit(); 1034 SDL_VideoQuit();
1017 } 1035 }
1018 if (state->flags & SDL_INIT_AUDIO) { 1036 if (state->flags & SDL_INIT_AUDIO) {
1019 SDL_AudioQuit(); 1037 SDL_AudioQuit();
1020 } 1038 }
1021 if (state->windows) {
1022 SDL_free(state->windows);
1023 }
1024 SDL_free(state); 1039 SDL_free(state);
1025 } 1040 }
1026 1041
1027 /* vi: set ts=4 sw=4 expandtab: */ 1042 /* vi: set ts=4 sw=4 expandtab: */