使用SDL2渲染分块地图的最快方法

6

我正在寻找一种非常快速的方法,使用SDL2渲染具有三个图层的平铺地图。 我正在使用SDL_RenderCopy,但它非常缓慢...


2
你是渲染整个地图(包括屏幕外的瓦片),还是进行某种视图剔除?同时使用SDL_GetRendererInfo查看是否获得了硬件加速,并尝试关闭不需要透明混合的纹理的alpha混合。如果这些都没有帮助,而渲染速度确实是减慢的原因,那么我想你尝试做的事情对于简单的SDL渲染来说可能太多了,你可以切换到更高级和更快的东西(如果使用正确),比如OpenGL。 - user2802841
谢谢你的回答,但我已经检查了所有内容,现在我已经找到了解决方案。 - Unarelith
1个回答

20

好的,我已经找到我需要的东西,现在我会在这里解释一下。

实际上我有四个图层,以前我用一个简单的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

就这样了。现在你能够以非常快的速度呈现分块地图了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接