09 2011 档案
用Pix调试HLSL
摘要:很多学Directx特别初学者最头痛应该是shader的调试问题了。一般的编译器包括vs都不支持shader的调试。还好微软出了个Pix,其功能相当强大,而不仅仅是debug。这里我们入门主要总结下其debug的功能。 Pix的调试原理和一般的调试很不一样,它是先把程序运行一遍,然后把中间每一步所有的shader变量,寄存器等等都记录下来,然后再调出来看,以此模拟Directx的过程。 在用Pix调试shader代码前,要注意下几个问题。 1是必须在Directx11的编译hlsl函数加上下面的几行代码(注意加粗部分代码):DWORDdwShaderFlags=D3DCOMPILE_ENAB.
阅读全文
c++变量莫名其妙改变_内存覆盖
摘要:内存覆盖是个很简单又很隐蔽的错误。如果在程序中发现某个数组a的一些结果被莫名奇妙改写了,但你可以很肯定你没有在代码中修改它们。很有可能内存被不小心覆盖了。例如: int b[100]; int a[100]; int c=102; b[c]=5; 与数组a相邻的数组b不够大,开了b[100],程序中不小心给越界的b[102]赋值,那么就有可能造成数组a中间一些数值被覆盖(当然也可能有其他问题,如程序崩溃)。 malloc()函数也可能导致类似的错误。如果函数的实参为sizeof(int),用于生成一个整型数据需要的大小。如果你写成: int*p=(int*)malloc(1); 代码也能...
阅读全文
HLSL中struct里面的变量在内存中的放置方式
摘要:《Introtod3d10》里面关于hlsl的structurepacking有这样一段描述structLight{Light(){ZeroMemory(this,sizeof(Light));}D3DXVECTOR3pos;floatpad1;//notusedD3DXVECTOR3dir;floatpad2;//notusedD3DXCOLORambient;D3DXCOLORdiffuse;D3DXCOLORspecular;D3DXVECTOR3att;floatspotPow;floatrange;};Theissuewiththe“pad”variablesistomaketheC
阅读全文
浙公网安备 33010602011771号