1、调试看不到类中的变量
m_p->op();
很有可能m_p是空指针
2、类重定义
比如
ref class A;
namespace pp
{
....
}
应该写成
namespace pp
{
ref class A;
}
3、空的指向类的指针调用类的函数的错误要注意
4、界面线程中 task的wait 会产生异常 因为界面线程不能阻塞太久
5、this graphics diagnostics engine failed to build the shader trace because it cannot find any modified pixels
不能调试pixel shader主要原因是没有对Microsoft::WRL::ComPtr<ID3D11ShaderResourceView> m_textureMy进行初始化,
m_d3dContext->PSSetShaderResources(0, 1, m_textureMy.GetAddressOf())就会有问题,造成不能调用pixel shader而造成画的矩形都是是黑色的。
6、英文字母输入间隔大
这个为半角和全角的问题,shift+空格进行切换。
7、pixel shader中的color
pixel shader中的color应为(x,y,z,w),其中w应为1,(1,1,1,1)表示白色,这样便于进行颜色的混合计算。
8、纹理显示不了
m_d3dContext->PSSetShaderResources(0, 1, &m_textureMy);
&m_textureMy返回的是Details::ComPtrRef<ComPtr<T>>
operator InterfaceType**() throw()
{
return ptr_->ReleaseAndGetAddressOf();
}
从上面可以看到如果在PSSetShaderResources时,使用 &m_textureMy的形式会释放资源,所以纹理显示不了。
但在创建资源的情况下,使用&m_textureMy较好,不需要再写代码去释放之前的资源。如下:
DX::ThrowIfFailed(
CreateDDSTextureFromFile(
m_d3dDevice.Get(),
L"GpsCar.dds",
NULL,
m_textureMy.GetAddressOf()
)
);
9、很多情况下是文件找不到的原因
10、有billboard画不出原因是,它的shader类型是静态的,而也有类继承了它,同时又两种绘制类型时,会导致静态shader初始化的冲突,从而造成无法显示。