• 其他语言



在主流图形硬件上实现阴影贴图
页面和feed选项
打印
收藏此页
Digg此页 | 添加到您的del.icio.us帐号
目录

线程
DWORD dwThreadid;
g_hRenderMutex = CreateMutex(NULL, FALSE, NULL);
g_hShadowThread = 
	(HANDLE) _beginthreadex(NULL, 0, 
			GenerateShadowMap,(void*) pd3dDevice, 0, 
			(unsigned int*)&dwThreadid );
      
此函数生成阴影贴图:

unsigned __stdcall GenerateShadowMap(void* pd3dDevice)
{
	while (pd3dDevice)
	{
		// 在深度创建阴影贴图前, 
// 获取锁。
		DWORD dwResult = 
WaitForSingleObject(g_hRenderMutex, INFINITE);

		// 此处创建阴影贴图。
		// 完成阴影贴图后,释放锁。 
ReleaseMutex(g_hRenderMutex);
		
// 在必须更新阴影贴图之前,让该线程
// 休眠。指定的休眠时间以毫秒为 
// 单位。
Sleep(g_iShadowMapUpdateMS);
	}
		_endthread();
	return 0;
}
      
主渲染函数需要类似的锁定。

非正式的测试显示,如果在维持类似的更新频率的同时,使用单独的线程生成阴影贴图,则帧速率会略有增加。在模拟的 CPU 负载下,经过线程处理的情况也会有较高的帧速率。

上一部分1  2  3  4  5  下一部分

第 4 页, 共 9 页