Что такое рендерер в SDL2?

Я не совсем понимаю, что такое рендерер. Могу ли я иметь несколько рендереров или всегда только один?

Например, как с помощью рендерера нарисовать прямоугольник определенного цвета на фоне другого цвета?

Я считаю, что ответ кроется в функциях SDL_RenderDrawRect() и SDL_RenderFillRect(). Я прав?

Я знаю, как работают поверхности и блайтинг, но я не знаю, что именно символизирует рендерер.

Если бы кто-нибудь мог показать мне, как рисовать прямоугольник, думаю, я понял бы, как работают рендереры.

Пока у меня это:

#include <SDL.h>

int main(int argc, char* argv[]) {

    //Initialization
    SDL_Init(SDL_INIT_EVERYTHING);

    //Window
    SDL_Window *MainWindow = SDL_CreateWindow("My Game Window",
                                  SDL_WINDOWPOS_CENTERED,
                                  SDL_WINDOWPOS_CENTERED,
                                  640, 480,
                                  SDL_WINDOW_SHOWN
                                  );

    //Renderer
    SDL_Renderer *Background = SDL_CreateRenderer(MainWindow, -1, 0);

    SDL_SetRenderDrawColor(Background, 255, 255, 255, 255);

    SDL_RenderClear(Background);

    SDL_Delay(3000);

    //Clean up
    SDL_DestroyWindow(MainWindow);
    SDL_Quit();

    return 0;
}

person Rokusjar    schedule 12.10.2014    source источник
comment
только контур 2 0">stackoverflow.com/questions/20072639/   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 14.03.2016


Ответы (1)


для первой части вашего вопроса см. этот вопрос SO.

относительно того, почему ваш код мало что делает:

вы правы, что вам нужно использовать либо SDL_RenderDrawRect(), либо SDL_RenderFillRect(). SDL_RenderDrawRect нарисует незаполненный прямоугольник. SDL_RenderFillRect будет заполнено (надеюсь, это очевидно).

С помощью SDL_renderer вам нужно вызвать SDL_RenderPresent, чтобы скопировать «сцену» на экран.

...
 //Renderer
SDL_Renderer* renderer = SDL_CreateRenderer(MainWindow, -1, 0);

SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);

SDL_RenderClear(renderer); // fill the scene with white

SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); // the rect color (solid red)
SDL_Rect rect(0, 0, 100, 50); // the rectangle
SDL_RenderFillRect(renderer, &rect);
SDL_RenderPresent(renderer); // copy to screen

SDL_Delay(3000);
...
person Brad Allred    schedule 12.10.2014
comment
Спасибо, теперь мне все ясно. Я очень ценю вашу помощь. - person Rokusjar; 12.10.2014