【发布时间】:2020-06-14 23:47:42
【问题描述】:
我有以下在窗口上绘制像素网格的函数,我正在使用 sdl。
问题是速度很慢!它使我的程序以 10fps 运行,所以我认为我一定做错了什么。
这是我正在使用的代码
void rayTracing(SDL &sdl) {
int nx = 1440;
int ny = 810;
for (int x = 0; x < nx; x++) {
for (int y = 0; y < ny; y++) {
float r = float(x) / float(nx);
float g = float(y) / float(ny);
float b = 0.2;
int ir = int(255.99 * r);
int ig = int(255.99 * g);
int ib = int(255.99 * b);
SDL_SetRenderDrawColor(sdl.renderer.get(), ir, ig, ib, 255);
SDL_RenderDrawPoint(sdl.renderer.get(), x, ny - y);
}
}
SDL_SetRenderDrawColor(sdl.renderer.get(), 0, 0, 0, 0);
}
也许问题出在我使用 SDL_RenderDrawPoint 的方式上?
【问题讨论】:
-
您使用的是哪个版本的 SDL?如果可以,请升级到支持 SDL_Renderer 批处理的最新版本之一(2.0.10+?)并通过
SDL_HINT_RENDER_BATCHING提示强制启用它。否则,按颜色对您的点进行分组并使用SDL_RenderDrawPoints()。或者,因为一切都在一个网格中,所以将像素加载到 SDL_Texture 并绘制它。 -
我会尝试 SDL_HINT_RENDER_BATCHING,而 SDL_RenderDrawPoints 不适用于我的这种情况。我应该如何以高效的方式使用 SDL_Texture?
-
如果用 OpenGL & shaders 实现会快很多。
-
learnopengl.com 是一个很好的教程。