我正在寻找一种非常快速的方法,使用SDL2渲染具有三个图层的平铺地图。 我正在使用SDL_RenderCopy,但它非常缓慢...
好的,我已经找到我需要的东西,现在我会在这里解释一下。
实际上我有四个图层,以前我用一个简单的for循环来渲染它们。 事实上,for循环并不是渲染平铺地图的好方法。
最好的方法是在主渲染循环之前将每个图层渲染成一个大纹理,然后将每个大纹理渲染到屏幕上。for循环需要很长时间来处理,而渲染一个大纹理非常快。
请看以下代码,其中“bigTexture”是一个图层,“width”和“height”是该图层的尺寸。
Uint32 pixelFormat;
SDL_QueryTexture(tileset, &pixelFormat, NULL, NULL, NULL);
SDL_Texture *bigTexture = SDL_CreateTexture(renderer, pixelFormat, SDL_TEXTUREACCESS_TARGET, width, height);
SDL_SetRenderTarget(renderer, bigTexture);
// Put your for loop here
完成了,我们将我们的图层加载到了一个大纹理中。现在看看如何渲染它。
SDL_SetRenderTarget(renderer, NULL);
// Create a SDL_Rect which defines the big texture's part to display, ie the big texture's part visible in the window.
// Display the big texture with a simple SDL_RenderCopy
就这样了。现在你能够以非常快的速度呈现分块地图了。
SDL_GetRendererInfo
查看是否获得了硬件加速,并尝试关闭不需要透明混合的纹理的alpha混合。如果这些都没有帮助,而渲染速度确实是减慢的原因,那么我想你尝试做的事情对于简单的SDL渲染来说可能太多了,你可以切换到更高级和更快的东西(如果使用正确),比如OpenGL。 - user2802841