是否有理由为单个窗口安装多个SDL渲染器?

时间:2018-06-17 17:25:09

标签: rendering sdl sdl-2 renderer

我目前正在使用SDL2,并不断提出实用性问题。

我们说我的应用程序只有一个窗口。我生成一个渲染器来渲染纹理到这个窗口。截至目前,我有一个"主人"渲染器,负责将所有内容渲染到该窗口。

我的问题是,是否有理由为单个窗口安装多个渲染器?现在,我无法想到任何事情。

1 个答案:

答案 0 :(得分:2)

正如keltar指出的那样,没有理由(也没有办法)在文件src/render/render.c中为SDL2中的同一窗口创建多个渲染器。

if (SDL_GetRenderer(window)) {
     SDL_SetError("Renderer already associated with window");
     return NULL;
}

那么,为什么SDL_WindowSDL_Renderer是两个单独的结构?因为多态性。

让我们通过浏览SDL2源了解原因。 This is the directory src/render.

来自the file sysrender.h

struct SDL_Renderer
{
    const void *magic;

    void (*WindowEvent) (SDL_Renderer * renderer, const SDL_WindowEvent *event);
    int (*GetOutputSize) (SDL_Renderer * renderer, int *w, int *h);
    SDL_bool (*SupportsBlendMode)(SDL_Renderer * renderer, SDL_BlendMode blendMode);
    int (*CreateTexture) (SDL_Renderer * renderer, SDL_Texture * texture);
    int (*SetTextureColorMod) (SDL_Renderer * renderer,
                               SDL_Texture * texture);
    int (*SetTextureAlphaMod) (SDL_Renderer * renderer,
                               SDL_Texture * texture);
    int (*SetTextureBlendMode) (SDL_Renderer * renderer,
                                SDL_Texture * texture);
    int (*RenderClear) (SDL_Renderer * renderer);

    ...
};

渲染器具有许多功能指针,例如,这些指针是从子目录opengl中的文件设置的。每个驱动程序使用其自己的功能定义其自己的SDL_Renderer实例。通过这样做,SDL2实现了C语言中的多态性。

因此,您只需要一个渲染器实例,但是它应该不同于窗口;窗口特定于操作系统,而渲染器特定于驱动程序。