关于RenderTarget注意事项
关于RenderTarget,其实包括图像渲染缓冲和深度缓冲,你可以只设置图像缓冲,忽略深度缓冲,那么这时候深度缓冲将使用原先的深度缓冲,也就是使用D3DPRESENT_PARAMETERS指定的深度缓冲,渲染完毕之后再将深度缓冲置1.这里有个问题,也就是深度缓冲的大小问题,深度缓冲的尺寸必须比你自己指定的RenderTarget相等,或者更大,因为每个像素都要做深度测试,深度缓冲尺寸太小就不能够达到这个目的了。创建的RenderTarget必须使用D3DPOOL_DEFAULT标志。
当你使用
1.指定新的深度缓冲,大小为RenderTarget的大小。
2.
关于IDirect3DDevice9::CreateRenderTarget和IDirect3DDevice9::CreateTexture()前者可以使用硬件的抗锯齿,而后者不能。
关于 PIX Experiment File Version Mismatch Problem 。路径中不能包含中文。
当你使用
Code
创建窗口时,其中的 nWidth nHeight是整个窗口的大小(包括标题栏),而实际的客户区略小,因此,你的默认深度缓冲实际上是小于nWidth 和 nHeight的,因此,当你指定nWidth X nHeight大小的渲染纹理时,如果没有指定新的深度缓冲,那么,将会出现错误,直观一点就是就算你Clear整个Buffer仍然可以在画面上看到很多小碎片一样的图形,有两种方法解决这个问题。1.指定新的深度缓冲,大小为RenderTarget的大小。
2.
RECT rect = {0, 0, SCREENSIZE, SCREENSIZE};
AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE);
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
使用新的width和height来创建窗口。AdjustWindowRect(&rect, WS_OVERLAPPEDWINDOW, FALSE);
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
关于IDirect3DDevice9::CreateRenderTarget和IDirect3DDevice9::CreateTexture()前者可以使用硬件的抗锯齿,而后者不能。
关于 PIX Experiment File Version Mismatch Problem 。路径中不能包含中文。