【问题标题】:What exactly is a renderer in SDL2?SDL2 中的渲染器到底是什么?
【发布时间】:2014-12-07 05:15:49
【问题描述】:

我不完全了解渲染器是什么。我可以有多个渲染器还是只有一个?

例如,如何使用渲染器在具有不同颜色的背景上绘制具有某种颜色的矩形?

我相信答案在于函数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;
}

【问题讨论】:

标签: c++ sdl-2


【解决方案1】:

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

【讨论】:

  • 谢谢,我现在一切都清楚了。我真的很感激你的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多