【发布时间】:2014-01-03 07:52:26
【问题描述】:
我正在制作一款游戏,而我实际上正在生成地图。
地图是使用一些算法程序生成的。这没有问题。
问题是我的地图可能很大。所以我考虑过将地图分割成块。
我的块没问题,每个块都是 512*512 像素,但唯一的问题是:我必须生成纹理(实际上是 SFML 中的 RenderTexture)。生成大约需要 0.5 毫秒,因此每次生成块时游戏都会冻结。
我想了一个办法来解决这个问题:我用工厂制作了一种线程池。我只需向它发送一个任务,它就会创建块。
现在已经全部实现了,它会引发 opengl 警告,例如:
“RenderTarget.cpp (219) 中的内部 OpenGL 调用失败:GL_INVALID_OPERATION,当前状态下不允许指定的操作”。
我不知道这是否是处理块的好方法。我也考虑过将块保存到图像/文件中,但我担心保存/加载它们需要太多时间。
你知道处理这种“无限”地图的更好方法吗?
【问题讨论】:
-
OpenGL 调用只能从单个线程进行。虽然技术上可以在 OpenGL 中使用多线程,但它不会加速任何事情(除非您有 2 个或更多显卡)。
-
@Builer_K 实际上,如果您花费大量精力在 GPU 和 CPU 之间移动数据,则很有可能使用多个线程来仅在单个 GPU 上提高 OpenGL 性能。见seas.upenn.edu/~pcozzi/OpenGLInsights/…
-
如果你想拥有无限数量的块,那么你需要不时保存/加载它们,最后你根本没有更多的内存来用于块。
标签: opengl map sfml procedural-generation