Page 1 of 1

[TVPaint12] DLL Plugins don't works

Posted: 12 Dec 2024, 10:10
by Ben_QuadGroup
Hi,

It seems currently no dll plugins can work on TV Paint 12.

Our dev team (maintaining QuadPype) wanted check if our TV Paint plugin (dll) used in the pipeline solution is supported and work on TV Paint 12.

The issue is that TV Paint 12 introduced changes in the GUI that broke compatibility with ALL existing (dll) TV Paint plugins including all the example plugins shipped in the SDK archive.

After talking to the TV Paint Product Owner / Technical Support Manager we got the info that the SDK was not changed for TV Paint 12, but nothing has been done to it neither to ensure the compatibility (meaning not breaking the SDK).

We did lot of tests, recompiling the example SDK plugins from 1999/2000, trying our working plugin for TV Paint 11.7 on 12.0, but there is truly an issue with TV Paint 12.

After lots of investigations, this seems to be on the graphical side, the plugins are all properly detected, when "activating them" from the Windows > Plugins panel they are properly activated, we added code to store plugin state when the program exit and this is properly called, so the C / CPP main logic of the plugin code work well.

We call for help to be able tu support TV Paint 12 and newer.

This is an urgence since it's not possible to buy new licenses for TV Paint 11 / 11.5 from the official store or the vast majority of resellers.

TV Paint is used by lot of studios and artists around the globe, TV Paint supported in multiple pipeline solutions like ours, and this is done via plugin DLL.

Thanks,

Re: [TVPaint12] DLL Plugins don't works

Posted: 14 Dec 2024, 13:59
by Peter Wassink
Apart from your issue,
you should be able to still use v11.7 with a tvp new v12.0 license.

Re: [TVPaint12] DLL Plugins don't works

Posted: 16 Dec 2024, 07:26
by ematecki
Hi,
The problem with plugins comes from the switch to 64bits.
At that time, all DWORDs used to pass pointers back and forth between TVPaint and the plugins have been converted to INTPTRs (which is defined according the 32/64bits arch).
It seems that truncating pointers to 32bits worked most of the times on windows with TVP11 even in 64bits, as the MSB 32 bits were all 0s... by sheer luck !
With the new windowing system in TVP12 this isn't the case anymore.

First, check if you have the latest SDK, in file plugdllx.h around line 580 you should have :

Code: Select all

INTPTR  TVOpenReq(PIFilter *PiFilter, int width, int height, int x, int y, INTPTR flags, const char *name);
Everywhere you see a DWORD in your plugin's code, check in the .h files if it has to be changed to INTPTR or ULONG32 (all DWORDs in SDK calls have been converted to either INTPTRs or ULONG32s, but you may be using DWORDs in your own non-SDK code, so be careful).

Re: [TVPaint12] DLL Plugins don't works

Posted: 16 Dec 2024, 16:08
by Ben_QuadGroup
ematecki wrote: 16 Dec 2024, 07:26 Hi,
The problem with plugins comes from the switch to 64bits.
At that time, all DWORDs used to pass pointers back and forth between TVPaint and the plugins have been converted to INTPTRs (which is defined according the 32/64bits arch).
It seems that truncating pointers to 32bits worked most of the times on windows with TVP11 even in 64bits, as the MSB 32 bits were all 0s... by sheer luck !
With the new windowing system in TVP12 this isn't the case anymore.

First, check if you have the latest SDK, in file plugdllx.h around line 580 you should have :

Code: Select all

INTPTR  TVOpenReq(PIFilter *PiFilter, int width, int height, int x, int y, INTPTR flags, const char *name);
Everywhere you see a DWORD in your plugin's code, check in the .h files if it has to be changed to INTPTR or ULONG32 (all DWORDs in SDK calls have been converted to either INTPTRs or ULONG32s, but you may be using DWORDs in your own non-SDK code, so be careful).
Its seems we have the correct latest SDK version.

We made the changes and recompiled our plugin (dll), this is still not working on TV Paint 12.

To ensure this was not due to another part of our plugin we did the changes (DWORD to INTPTR) and recompiled the SDK example plugin named : Luma Range (that works on TV Paint 11.X) and this is not working either on 12.

We use a Windows 10 (x64) computer, with the cl compiler from Visual Studio 2022.

Here is the link to the CMakeLists.txt and lumarange.def we made to then use

Code: Select all

cmake .
and finally call

Code: Select all

msbuild LumaRange.sln
https://gist.github.com/BenSouchet/7ef4 ... 50a4d4ebf1

Can you check with a simple plugin like LumaRange (shipped in the SDK examples) that the plugin can work on TVPaint 12.

Thanks