2009/1/21 Henri Verbeet hverbeet@gmail.com:
2009/1/21 Stefan Dösinger stefan@codeweavers.com:
I don't see the point. IDirect3DDevice7 is the primary vtable and that's not going to change, ever. We also do things like this about everywhere else, and I don't think ddraw should be special in that regard.
I don't see any 'primary' vtable in any ddraw object, but that's just my personal view. I also dislike casting between the iface and the impl, which is possible only because vtable is the first member of the impl struct.
Primary in the sense that it is the table that actually implements most of the methods, including things like QueryInterface(), rather than forwarding them to somewhere else.
You're also relying on the IDirect3DDevice7 vtable field being the first field on the impl struct, so you should add a big comment to the impl struct warning that bad things will happen if the IDirect3DDevice7 vtable field isn't the first one.