» Direct3D9 plugin interface change
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

Direct3D9 plugin interface change

As of this commit the plugin interfaces dealing with Direct3D9 stuff changed, breaking existing plugins using those interfaces. Plugins using the base classes from the VVVV.PluginInterfaces.V2.EX9 namespace are not affected by this change.

The affected interfaces are:

  • IPluginDXResource
  • IPluginDXMesh
  • IPluginDXTexture
  • IPluginDXTexture2
  • IPluginDXLayer

The change was necessary as it was unclear when to release the SlimDX device used by all implementations of these interfaces.

The situation before this change was like this:

public void UpdateResource(IPluginOut forPin, int deviceAddress)
{
  // The next call will either increase the reference count on the 
  // internal device and add the device to the object table of SlimDX 
  // or it will simply fetch the device from that object table 
  // (if the exact same call was for example made by another plugin)
  // and leave the reference count as is.
  var device = Device.FromPointer(new IntPtr(deviceAddress));
 
  // if not created yet
  var resource = SomeResource.Create(device);
  // do something with the resource
 
  // The next call is dangerous, as the reference count to the internal 
  // device will be decreased by one and the device will be removed from
  // the object table of SlimDX, but what about the resource created a few 
  // lines above? Or what about resources created by other plugins, which 
  // might still hold a reference to the SlimDX device?
  device.Dispose(); // Some plugins called this, some not
 
  // Not calling Dispose on the device is also not correct, as SlimDX 
  // will still hold a reference to the internal device. Say vvvv 
  // wants to go fullscreen and therefor creating a new device it 
  // might not be able to do so, as it can't get rid of the old one 
  // (reference count is still one).
}

So to get rid of all this confusion, we decided to move the Device.FromPointer() and device.Dispose() calls to a more central place, (where it is exactly known when a device gets created or destroyed) and hand that already created SlimDX device over to the plugin via the above mentioned interfaces. The plugin should never need to create or destroy a device, it should just use it. Therefor the above example gets as simple as this:

public void UpdateResource(IPluginOut forPin, Device device)
{
  // if not created yet
  var resource = SomeResource.Create(device);
  // do something with the resource
}

So the rule of thumb now is like it is for every other object implementing IDisposable: only call Dispose() if it is you who created that object. As you didn't create the device, don't call Dispose() on it.

Elias, Thursday, Jan 26th 2012 Digg | Tweet | Delicious 0 comments  
  • 1

anonymous user login

Shoutbox

~8h ago

CeeYaa: https://www.youtube.com/watch?v=OkzfYQCLrCE thanks for the insights, impressive stuff @mediadog yes, it is a very nice CAVE

~1d ago

mediadog: @CeeYaa Why I'm learning Unreal, now if I could just afford wrap-around LED walls! Can do in vvvv too, it's just a CAVE

~1d ago

kleinkariert: @tonfilm any hint on how to generate Mel-Frequency images out of audio for mel-GAN in v4

~1d ago

joreg: @mediadog we're aware of this, see: https://discourse.vvvv.org/t/visual-c-2008-this-download-is-no-longer-available/17895 and i now also fixed the resp. links on the download page.

~2d ago

mediadog: FYI VC redist 2008 links bad in 38.1 installer and on web page

~3d ago

joreg: Reminder: Intro workshop to the all-new vvvv this Tuesday before the #vvvv meetup in #berlin. Signup here: https://nodeforum.org/announcements/2020-series-of-2h-introduction-workshops-to-vvvv-gamma/

~3d ago

~4d ago

tonfilm: Creative coder wanted: https://discourse.vvvv.org/t/creativvvve-coder-in-residence-2020/18283 vvvv visualprogramming #creativecoding #xenko #dotnet #berlin #internship #residency

~5d ago

metrowave: Collection of replicable research: http://www.replicabilitystamp.org/