在使用自己编写的Shader时,难道只能在游戏运行时调用“D3DXCompileShader”、“D3DXCompileShaderFromFile”、“D3DXCompileShaderFromResource”,实时的把shader代码编译好,然后在运行吗?不能事先把shader的代码编译成类似于可执行文件一样的东西,然后在游戏运行时由主程序直接调用吗?

解决方案 »

  1.   

    http://msdn.microsoft.com/en-us/library/bb172731(VS.85).aspx参数 ppShader 就是生成的编译好的shader, 你把这个存成2进制文件就好了啊
    到时候load文件就行了。
      

  2.   

    谢谢!但是pShader是一个指针,用"sizeof(pShader)"或"sizeof(*pShader)”的到的值是4。
    如果要把pShader中的东西储存为文件就一定要知道pShader指向的内容有多少字节。要怎样才能获取pShader指向内容的字节数?
      

  3.   

    "ID3DXBuffer::GetBufferSize"和"ID3DXBuffer::GetBufferPointer"两个成员函数,可以获得BufferPointer和BufferSize。但是如果使用"D3DXCreateEffectFromFile"编译成效果,出来的指针是"LPD3DXEFFECT pEffect"就不和ID3DXBuffer一样有"ID3DXBuffer::GetBufferSize"和"ID3DXBuffer::GetBufferPointer"两个成员函数,使用文件流保存文件需要一个指针和保存数据块的大小。如果使用"D3DXCreateEffectFromFile"或"D3DXCreateEffectFromFileEx"获得"LPD3DXEFFECT pEffect"怎样才能取得pEffect的BufferPointer和BufferSize?难道把pEffect强转成ID3DXBuffer也行?
      

  4.   

    必须要把Effect先转换到文本,有个D3DX9Disass什么的函数。