2017-09-04 60 views
3

我知道SDL_TEXTUREACCESS_STATICSDL_TEXTUREACCESS_TARGET之间的区别。我正在编写一个SDL后端,这个游戏的平台无关的核心不会告诉依赖于平台的纹理分配器,纹理是否仅仅传到屏幕上,或者纹理是否也用作目标本身。分配从未用作目标的SDL目标纹理时是否存在处罚?

因此,我的SDL后端的质感分配器具有使用SDL_TEXTUREACCESS_TARGET而不是SDL_TEXTUREACCESS_STATIC为每次分配,因为它没有在分配时间知道是否质地只会位块传输,或者如果它也被用来作为目标的质感。

然而,在实践中,将会有很多纹理被分配为SDL_TEXTUREACCESS_TARGET,尽管它们从来没有被实际用作目标,但是它们只是在没有修改其内容的情况下传递给屏幕。

这样做有没有惩罚?假设纹理本身不被用作目标,但仍然使用SDL_TEXTUREACCESS_TARGET进行分配。这是否带来重大处罚?如果是这样,我当然可以重写与平台无关的核心,告诉平台相关部分是否将纹理实际上用作目标,但是由于这是我首先要问的一个主要尝试,当对每个纹理简单地使用SDL_TEXTUREACCESS_TARGET时,无论是否用作目标,都会有实际的处罚。

回答

2

我询问了SDL邮件列表,并被告知在OpenGL上没有任何重大处罚,但是在Direct3D(这是Windows上的默认驱动程序)上,存在Direct3D在窗口大小更改时重置目标纹理的问题或切换窗口显示模式(全屏,窗口等)时,需要准备应用程序以处理SDL_RENDER_TARGETS_RESET并更新目标纹理的内容,如果内容需要跨越窗口大小更改等进行保留。至少在Direct3D上当使用目标而不是静态纹理时会有一个主要的问题。