我正在编写一个2D基于瓷砖的引擎。目前,我的绘图例程使用C#绘图库在每次屏幕刷新时重新绘制每个可见的瓷砖。我已经使滚动和缩放正常工作,并且一切看起来都很好。但是程序运行速度慢。现在我正在尝试改进它,并有几个问题:
首先,我认为每次刷新都重新绘制瓷砖是不必要的(因为它们从未更改)。现在,我正在尝试更改算法,以便在初始化时将整个地图写入单个位图,然后在绘制时剪切正确的部分。您认为这是正确的方法吗? (我还考虑过将图像保留在背景中并在其上滚动。但是,我决定不想绘制视野范围之外的东西。不过,也许这比剪切/粘贴便宜?是内存与时间的问题吗?)
其次,据我所知,C#绘图例程没有充分利用GPU的全部功率。我认为应该尝试使用OpenGL进行绘图(或者DirectX,但我更喜欢前者,因为它是多平台的)。那样会有帮助吗?您是否了解OpenGL的任何平铺(或一般像素绘制)教程?书籍参考也可能有所帮助。
此外,我目前不进行多线程处理(实际上我对这是什么只有一个模糊的概念)。我应该尝试将drawer多线程处理吗?还是OpenGL使图形的多线程处理变得多余?
谢谢。
首先,我认为每次刷新都重新绘制瓷砖是不必要的(因为它们从未更改)。现在,我正在尝试更改算法,以便在初始化时将整个地图写入单个位图,然后在绘制时剪切正确的部分。您认为这是正确的方法吗? (我还考虑过将图像保留在背景中并在其上滚动。但是,我决定不想绘制视野范围之外的东西。不过,也许这比剪切/粘贴便宜?是内存与时间的问题吗?)
其次,据我所知,C#绘图例程没有充分利用GPU的全部功率。我认为应该尝试使用OpenGL进行绘图(或者DirectX,但我更喜欢前者,因为它是多平台的)。那样会有帮助吗?您是否了解OpenGL的任何平铺(或一般像素绘制)教程?书籍参考也可能有所帮助。
此外,我目前不进行多线程处理(实际上我对这是什么只有一个模糊的概念)。我应该尝试将drawer多线程处理吗?还是OpenGL使图形的多线程处理变得多余?
谢谢。