2011年9月10日
摘要: 很多学Directx特别初学者最头痛应该是shader的调试问题了。一般的编译器包括vs都不支持shader的调试。还好微软出了个Pix,其功能相当强大,而不仅仅是debug。这里我们入门主要总结下其debug的功能。 Pix的调试原理和一般的调试很不一样,它是先把程序运行一遍,然后把中间每一步所有的shader变量,寄存器等等都记录下来,然后再调出来看,以此模拟Directx的过程。 在用Pix调试shader代码前,要注意下几个问题。 1是必须在Directx11的编译hlsl函数加上下面的几行代码(注意加粗部分代码):DWORDdwShaderFlags=D3DCOMPILE_ENAB. 阅读全文
posted @ 2011-09-10 17:34 Bester 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 内存覆盖是个很简单又很隐蔽的错误。如果在程序中发现某个数组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); 代码也能... 阅读全文
posted @ 2011-09-10 16:14 Bester 阅读(420) 评论(0) 推荐(0) 编辑