SDL2 中的渲染器是什么?

3
我不太明白渲染器是什么。我可以有多个渲染器吗?还是只有一个?
例如,如何使用渲染器在背景颜色不同的情况下绘制具有特定颜色的矩形?
我认为答案在于函数SDL_RenderDrawRect()和SDL_RenderFillRect()。我是对的吗?
我知道表面和bliting是如何工作的,但我不知道渲染器到底代表什么。
如果有人能向我展示如何绘制一个矩形,我想我会理解渲染器的工作原理。
到目前为止,我有这个:
#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;
}

仅绘制轮廓线:https://dev59.com/BXnZa4cB1Zd3GeqPolAD - Ciro Santilli OurBigBook.com
1个回答

9

关于您问题的第一部分,请参见这个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);
...

谢谢,现在我完全明白了。非常感谢你的帮助。 - Rokusjar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接