绘制循环¶
让我们直接进入 Direct3D 工作原理的速成课。在 Direct3D 游戏的源代码中,你会发现一个处理输入和渲染图形的无限循环。这个绘制循环中的每次迭代称为一帧。如果我们删掉所有无关代码,只关注一个空骨架,我们可以用以下代码可视化游戏的主循环:
int WINAPI WinMain(args)
{
/* 这里会调用一些代码
设置 Direct3D 并初始化游戏。
为了简洁省略。 */
MSG msg;
while(TRUE) {
/* 这里会放处理传入
鼠标和键盘消息的代码。 */
drawFrame(); // 这是我们关心的函数
}
/* 这里会调用一些代码
在退出前清理一切。 */
}
这个函数是游戏的入口点。简单来说,它初始化游戏,然后进入游戏的主循环。在主循环内,它执行负责处理用户输入的代码,然后调用 drawFrame() 用 Direct3D 重绘屏幕。(看看 GameHackingExamples/Chapter8_Direct3DApplication 代码,查看一个功能完整的游戏循环。)
每次调用时,drawFrame() 函数都会重绘整个屏幕。代码看起来像这样: