gpt4 book ai didi

sdl - 每帧多次调用 SDL_SetTextureColorMod 是否安全/可接受?

转载 作者:行者123 更新时间:2023-12-05 01:37:22 25 4
gpt4 key购买 nike

作为渲染多个除颜色之外相同的纹理的简单方法,我将纯白色圆圈加载到 SDL_Texture 中。然后调用SDL_SetTextureColorMod()给它我想要做圆圈的颜色。

如果纹理是单独的(示例 1),但如果我共享 SDL_Texture,这一切都很好。这样多个对象都引用它,这意味着SDL_SetTextureColorMod()必须在对象渲染纹理之前调用每个渲染帧,因为它上次提供的颜色可能已被另一个对象更改(示例 2)。

正在调用SDL_SetTextureColorMod()每个渲染帧,对于可能有相当多的对象共享一个纹理,会导致主要的性能问题吗?

需要它的原因是系统是使用具有基本引用计数的共享纹理功能设计的(我知道使用智能指针可能有更好的方法来做到这一点,但这不是这里讨论的主题)。让每个对象拥有自己的SDL_Texture 副本会更好吗?所以它只需要设置一次颜色(或每当需要更改时)而不是每个渲染帧?

示例 1:

SDL_Texture* tex1;
SDL_Texture* tex2;
SDL_Texture* tex3;
...
// All 3 instances have their own SDL_Texture
MyObject A(tex1);
MyObject B(tex2);
MyObject C(tex3);
...
// A call to set the color of the texture is only required once for each class

示例 2:
SDL_Texture* tex;
...
// All 3 instances share the SDL_Texture
MyObject A(tex);
MyObject B(tex);
MyObject C(tex);
...
// A call to set the color of the texture must be made before rendering
// each object to ensure that any other object has not set a different color.
// E.g if the draw order was A, B, C and the color was set to be different
// for each object then before rendering B, each frame it would need to set
// the color again otherwise it would have the color of A and the same
// for the others

编辑:这也将扩展到 SDL_SetTextureAlphaMod()SDL_SetTextureBlendMode()或其他类似功能

作为引用,我正在使用 SDL2。

更新:最初认为对函数的调用只是更新颜色混合标志。我做了更多的调查,这是部分正确的,可以在 - http://pastebin.com/pMjgVkmM 中的函数中看到。

但是,如果渲染器有分配给 SetTextureColorMod() 的函数在大多数情况下似乎都是这种情况,然后它映射到函数 'SW_SetTextureColorMod()' - http://pastebin.com/qYtxD0TH

这反过来又调用 SDL_SetSurfaceColorMod() - http://pastebin.com/GrsVibAz

我在这里担心的是,此时可能会调用 SDL_InvalidateMap。我认为这可能会导致释放,尽管我不确定 - http://pastebin.com/r0HGJYHT

最佳答案

SDL_SetTextureColorMod不更新纹理纹理 - 它保存乘数颜色并引发 SDL_MODTEXTURE_COLOR 标志。该纹理上的后续 RenderCopy 将增加具有固定颜色的纹素。

由于它不修改纹理,并且在纹理头中只是一个小常数,因此在渲染帧中为同一纹理设置多次是完全可以的。克隆纹理会适得其反(更多的内存使用,并且由于更高的内存带宽压力可能会降低帧速率)。

关于sdl - 每帧多次调用 SDL_SetTextureColorMod 是否安全/可接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24969783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com