gpt4 book ai didi

c++ - 如何优化 SDL 2 中许多纹理的渲染?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:25:56 25 4
gpt4 key购买 nike

我正在使用 SDL 2,我有一个 8x8 像素 block 的二维数组:

    SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 0xdf, 0xef, 0xff, 0xff);
for (s32 y = 0, Y = 0; y < worldSize.y; y++, Y += blockSize)
for (s32 x = 0, X = 0; x < worldSize.x; x++, X += blockSize)
if (block[x][y].GetMaterial())
{
if (block[x][y].IsSolid())
{
SDL_Rect src =
{
block[x][y].GetTileVariant() * blockSize,
block[x][y].GetTile() * blockSize,
blockSize,
blockSize
};
SDL_Rect dst =
{
X + (s32)posX,
Y + (s32)posY,
blockSize,
blockSize
};
SDL_RenderCopy(renderer, materials[block[x][y].GetMaterial()]->texture, &src, &dst);
}
}
SDL_RenderPresent(renderer);

所以在这里我以随机顺序使用了一些纹理,例如:1、2、5、2、2、3、1 等。如果它填满了整个屏幕 (1920x1080),它就会开始滞后。不是很多,但无论如何都要大声。所以我的问题是:如何优化它?我应该使用什么?我需要一些代码示例。最后,是自己在openGL上写点东西还是怎么办?

最佳答案

尝试按 Material /纹理对您的 SDL_RenderCopy() 调用进行分组,并希望您的 OpenGL 驱动程序快速路径冗余 glBindTexture()

和/或将所有图 block 组合成一个大型纹理图集。

或者,如果您的图 block 实际上并未逐帧移动/变化 blit them into one large texture并渲染它。

长期,bug Sammailing list 上对于类似 SDL_RenderCopyBatch() 的东西,类似于 SDL_RenderDrawRects()

关于c++ - 如何优化 SDL 2 中许多纹理的渲染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19371834/

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