private static IntPtr ID3DXBuffer_GetBufferPointer(ID3DXBuffer *p) { var lpDelegateID3DXBuffer_GetBufferPointer = (DelegateID3DXBuffer_GetBufferPointer)Marshal.GetDelegateForFunctionPointer(p->lpVtbl[3], typeof(DelegateID3DXBuffer_GetBufferPointer)); var retval = lpDelegateID3DXBuffer_GetBufferPointer(p); return(retval); }
public static void Decompile(string sFileName) { Initialize(); ID3DXEffect *pD3DEffect = null; ID3DXBuffer *pD3DError = null; ID3DXBuffer *pDisassembler = null; D3DXCreateEffectFromFile(g_D3DDevice, sFileName, IntPtr.Zero, IntPtr.Zero, 0, IntPtr.Zero, &pD3DEffect, &pD3DError); D3DXDisassembleEffect(pD3DEffect, false, &pDisassembler); var sShaderSource = Marshal.PtrToStringAnsi(ID3DXBuffer_GetBufferPointer(pDisassembler)); var sOutFile = Common.OutputPath + "/Shaders/mb.fx"; if (!Directory.Exists(Common.OutputPath + "/Shaders")) { Directory.CreateDirectory(Common.OutputPath + "/Shaders"); } Win32FileWriter.WriteAllText(sOutFile, Header.Shaders + sShaderSource); Release(); }