是否有理由为单个 window 使用多个 SDL 渲染器?
Would there ever be a reason to have multiple SDL renderers for a single window?
我目前正在使用 SDL2 并不断提出实用性问题。
假设我的应用程序具有单个 window。我生成一个渲染器来渲染这个 window 的纹理。截至目前,我有一个 "master" 渲染器,负责将所有内容渲染到 window。
我的问题是,是否有理由为单个 window 使用多个渲染器?目前暂时想不出。
没有理由(也没有办法)在 SDL2 中为同一个 window 创建多个渲染器,正如 keltar 在文件 src/render/render.c
.
中指出的那样
if (SDL_GetRenderer(window)) {
SDL_SetError("Renderer already associated with window");
return NULL;
}
那么为什么 SDL_Window
和 SDL_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中的多态性。
因此您只需要一个渲染器实例,但它应该不同于 window ; window 是 OS-特定的,而渲染器是特定于驱动程序的。
我目前正在使用 SDL2 并不断提出实用性问题。
假设我的应用程序具有单个 window。我生成一个渲染器来渲染这个 window 的纹理。截至目前,我有一个 "master" 渲染器,负责将所有内容渲染到 window。
我的问题是,是否有理由为单个 window 使用多个渲染器?目前暂时想不出。
没有理由(也没有办法)在 SDL2 中为同一个 window 创建多个渲染器,正如 keltar 在文件 src/render/render.c
.
if (SDL_GetRenderer(window)) {
SDL_SetError("Renderer already associated with window");
return NULL;
}
那么为什么 SDL_Window
和 SDL_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中的多态性。
因此您只需要一个渲染器实例,但它应该不同于 window ; window 是 OS-特定的,而渲染器是特定于驱动程序的。