[Mono-dev] Managed DirectX

Brian Crowell mono-devel at fluggo.com
Wed Oct 25 13:02:52 EDT 2006

Jon Chambers wrote:
> I am working on COM Interop support in mono. ...
>                 ... If you want to try anything out on mono, you will need to build you interop assemblies with .Net (either by hand or via tlbimp). If you need any other help let me know.

A practical example of building a wrapper by hand would be most helpful. Late binding is not an option, and I haven't ever found interface definition files for DirectX9.


> On 10/25/06, *Brian Crowell* <mono-devel at fluggo.com 
> <mailto:mono-devel at fluggo.com>> wrote:
>     Stefan Dösinger wrote:
>      > I am one of the programmers of the Wine Direct3D implementation,
>     and I
>      > wondered if there are any plans to implement Managed DirectX in
>     Mono, and if
>      > it is possible to share efforts between wine and mono?
>     Hello.
>     I started on an open implementation of the XNA libraries. Mostly
>     because I was cheesed at the lack of good error messages. I know
>     that isn't Managed DirectX, but Microsoft never really seemed
>     interested in supporting that. The good news is that they're not
>     terribly different from each other.
>     The only catch is that it's implemented in C++/CLI, which at present
>     is really the best way to do it. I wouldn't attempt it in C#, unless
>     you could figure out a better way to do all the calli instructions.
>     I thought at one point about doing a simple wrapper around the COM
>     implementation and doing the rest in C#, but even that's not all
>     that great, and you still have the C++/CLI dependency.
>     Here, I'll give you a good example:
>     ----------
>     _device->CreateTexture( width, height, levels, (DWORD) usage,
>     (D3DFORMAT) format, (D3DPOOL) pool, &tex, NULL )
>     ----------
>     ...becomes:
>     ----------
>       IL_0006:  ldarg.0
>       IL_0007:  ldfld      valuetype IDirect3DDevice9*
>     Fluggo.Graphics.Direct3D.GraphicsDevice::_device
>       IL_000c:  ldarg.1
>       IL_000d:  ldarg.2
>       IL_000e:  ldarg.3
>       IL_000f:   ldarg.s    usage
>       IL_0011:  ldarg.s    format
>       IL_0013:  ldarg.s    pool
>       IL_0015:  ldloca.s   tex
>       IL_0017:  ldc.i4.0
>       IL_0018:  ldarg.0
>       IL_0019:  ldfld      valuetype IDirect3DDevice9*
>     Fluggo.Graphics.Direct3D.GraphicsDevice::_device
>       IL_001e:  ldind.i4
>       IL_001f:  ldc.i4.s   92
>       IL_0021:  add
>       IL_0022:  ldind.i4
>       IL_0023:  calli      unmanaged stdcall int32
>     modopt([mscorlib]System.Runtime.CompilerServices.IsLong)
>     modopt([mscorlib]System.Runtime.CompilerServices.CallConvStdcall)(native
>     int,uint32,uint32,uint32,uint32
>     modopt([mscorlib]System.Runtime.CompilerServices.IsLong),valuetype
>     _D3DFORMAT,valuetype _D3DPOOL,valuetype IDirect3DTexture9**,void**)
>     ----------
>     Here, you can see C++ calculating the address of the pointer to the
>     function, loading it, then issuing a calli. I don't know of a way to
>     do that in C#, at least, not one that will give you any kind of good
>     performance.
>     --Brian
>     _______________________________________________
>     Mono-devel-list mailing list
>     Mono-devel-list at lists.ximian.com
>     <mailto:Mono-devel-list at lists.ximian.com>
>     http://lists.ximian.com/mailman/listinfo/mono-devel-list

More information about the Mono-devel-list mailing list