我目前正在使用SDL2,并不断提出实用性问题。
我们说我的应用程序只有一个窗口。我生成一个渲染器来渲染纹理到这个窗口。截至目前,我有一个"主人"渲染器,负责将所有内容渲染到该窗口。
我的问题是,是否有理由为单个窗口安装多个渲染器?现在,我无法想到任何事情。
答案 0 :(得分:2)
正如keltar指出的那样,没有理由(也没有办法)在文件src/render/render.c
中为SDL2中的同一窗口创建多个渲染器。
if (SDL_GetRenderer(window)) {
SDL_SetError("Renderer already associated with window");
return NULL;
}
那么,为什么SDL_Window
和SDL_Renderer
是两个单独的结构?因为多态性。
让我们通过浏览SDL2源了解原因。 This is the directory src/render
.
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语言中的多态性。
因此,您只需要一个渲染器实例,但是它应该不同于窗口;窗口特定于操作系统,而渲染器特定于驱动程序。