gpt4 book ai didi

c - SDL2 tilemap - 太慢

转载 作者:太空狗 更新时间:2023-10-29 15:07:17 25 4
gpt4 key购买 nike

我正在使用 SDL2 编写一个在每一帧都显示瓦片 map 的游戏,但性能太慢了。我写了一个小程序来隔离问题。假设“temp.bmp”是一张 16x16 的图像。

#include <stdio.h>

#include "SDL2/SDL.h"
#include "SDL2/SDL_timer.h"
#include "SDL2/SDL_image.h"

int main()
{
SDL_Window* win;
SDL_Renderer* ren;
int x, y;

SDL_Init(SDL_INIT_VIDEO);
SDL_CreateWindowAndRenderer(800, 600, 0, &win, &ren);
SDL_Surface* sf = IMG_Load("temp.bmp");
SDL_Texture* tx = SDL_CreateTextureFromSurface(ren, sf);

for(;;) {
Uint32 t = SDL_GetTicks();
for(x=0; x<800; x+=16) {
for(y=0; y<600; y+=16) {
SDL_Rect src = { 0, 0, 16, 16 };
SDL_Rect dst = { x, y, 16, 16 };
SDL_RenderCopy(ren, tx, &src, &dst);
}
}
SDL_RenderPresent(ren);
printf("%ld ms\n", SDL_GetTicks() - t);
}
}

运行程序,我发现渲染一帧大约需要 16 毫秒。这恰好是 60 FPS (1000/60),没有为游戏逻辑留下空间。此外,我正在一台速度相当快的计算机上运行它。

我很确定我使用了错误的策略,但我不确定什么才是正确的。也许创建一个大纹理并不太频繁地更新它是可行的方法,但我找不到任何关于如何将一个纹理复制到另一个纹理上的文档。

那么,我怎样才能提高 tilemap 的性能呢?

最佳答案

关于 this它提到 SDL_RENDERER_PRESENTVSYNcflags的页面意味着您已同步到刷新率。试试这个

    renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED);

关于c - SDL2 tilemap - 太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18591758/

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