我的问题集中在SDL 2上

我不完全了解什么是渲染器。我可以有多个渲染器,还是总是只有一个?
例如,如何使用渲染器在具有不同颜色的背景上绘制具有特定颜色的矩形?
我相信答案在于此功能: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;
}

最佳答案

对于您的问题的第一部分,请参见this SO question

关于为什么您的代码没有做很多事情:

您是正确的,您需要使用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);
...

10-07 19:52
查看更多