
françois leroy
Enthusiast
françois leroy
Enthusiast
Activity
Apr 16, 2018
03:49 AM
Cos I need to resize my layer's output according to this calculation...
... View more
Apr 16, 2018
03:01 AM
Salut! After testing a bit more, it's true that my solution isn't that ugly 😉 I finally added an Idle Hook that can print a message in the info panel. So everytime frameSetup is called, I send the number of frames computed so far, in Idle Hook I update the message and the user knows how many frames have been computed and how many are still to go. It's not a progress bar, but at least it's something! Cheers, François
... View more
Apr 15, 2018
07:18 AM
Hi, I got a problem with progress bar too... Not the same, but a solution to one of the issues could may be fix the other. I have a particule system plugin which needs to compute composition from frame 0, and I need to make most of my computation during FrameSetup, so I can resize my layer's output according to particles positions. And FrameSetup doesn't support PF_PROGRESS, and actually doesn't update the progress bar at all. I'd like to find a way to warn users that the plugin is computing something, and that it's not just stuck. I tried InfoDrawText, but it seems it doesn't work anymore... I finally found an ugly solution: I stop the computation after one second, then during render call return PF_Interrupt_CANCEL, frameSetup is called again and continues computation, and so on. It results in having the progressbar 'flashing' until computation is done, and it's over all slower because of the back and forth between framesetup and render... If someone has a better solution, I'd love to hear it! 🙂 Cheers, François
... View more
Apr 08, 2018
06:28 AM
Hi Tom, Unfortunately, I'm not a premiere user, so I can't tell you. Hope someone here can! Cheers, François
... View more
Jan 03, 2018
10:06 PM
Hi Igor, from what I can remember, CS6' Glator is broken (I think it crashes if the source size is more than 1024 pixels wide or high). You definitely should use the latest SDK, even if you build your plugins fro CS6. Cheers, François PS: Zac, when do you think the new SDK will be released?
... View more
Dec 21, 2017
06:52 AM
Hi! There is a plugin called GLator in the sample effects of the SDK. It shows how to use OpenGL inside AE. To the best of my knowledge, this is the only example of effect using the GPU. Cheers, François
... View more
Dec 15, 2017
12:49 AM
No worry, writing plugins is not an easy task! 🙂 The suite version will give you the description, but you can still use the MACRO directly in your plugin. It will act just like the suite, but will work in Premiere. Cheers, François
... View more
Dec 14, 2017
11:41 PM
These Macros are just a kind of 'short cut' to usual suites. For example PF_Fill() is the same than FillMatteSuite2()->fill() and PF_COPY() is WorldTransformSuite1()->copy() I copied it from the CC 2015 SDK documentation. If it doesn't appear in the CS6 SDK, just search for fill or copy directly (without the PF), you'll probably find what you're looking for. Cheers, François
... View more
Dec 14, 2017
10:30 PM
Hi, they're both in AE_EffectCB.h But generally speaking, when you hit a MACRO you don't know about, just right-click it and select 'jump to definition', it'll open the document where it's defined. Cheers, François
... View more
Dec 13, 2017
11:03 PM
OK, for future generations, I'll answer my own question 🙂 No cmd was sent cos' I wasn't returning the good PF_Err during previous frames rendering. I was returning Interrupt_CANCEL instead of OUT_OF_MEMORY. Somehow, previous versions of AE could deal with it, not anymore (probably the UI / Render thread separation). François
... View more
Dec 13, 2017
03:36 AM
Hi everyone, I have a very weird issue with one of my plugins. I wrote it several years ago and it was working pretty well until now. It seems to be a caching problem. It sometimes skips frames. First I thought I was returning bad data to AE, or whatsoever... But after digging a bit more, I've found that on these frames, AE doesn't send any call to the plugin at all! To make sure, I've set a break point at the very first line of the EntryPointFunc(). It seems to happen mostly after Ram previewing, and then trying to go to the frame right after the last one rendered. Did anyone ever hit such an issue? For info, here are my out_flags: out_data->out_flags |= PF_OutFlag_I_DO_DIALOG | PF_OutFlag_WIDE_TIME_INPUT; out_data->out_flags2 = PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS | PF_OutFlag2_I_USE_3D_CAMERA; Any idea? Cheers, François
... View more
Dec 07, 2017
07:28 PM
Then you'll have to try with options available in CS6... Check in the list above, you'll find what you need. Cheers, François
... View more
Dec 06, 2017
11:01 PM
Hi! you can use: suites.CommandSuite1()->AEGP_DoCommand(10200) Here's a list of other command numbers if you need: http://sydefxink.com/AECC2014_MenuIDs_v2_0.pdf Cheers, François
... View more
Dec 03, 2017
08:55 PM
1 Upvote
Hi James, glbinding is only one way to handle openGL textures and contexts in AE. Personnally, I do it like this: _I share one context for all my plugins instances, and each instance has its own textures. _I store everything in GlobalData, everything related to the context on one side, all the textures in a std::vector It's easier to handle (you store everything yourself so it's 'human readable'). To keep track of instances, I just use an int in GlobalData called instanceG, and one in sequenceData called intanceS. Everytime SequenceSetup is called, I increase instanceG, and copy its value in the newly created instanceS. Everytime SequenceSetDown is called, I decrease instanceG, and instanceS is cleared. This way, you'll get more sequenceData than the actual number of effects, cos' AE will create one for render and one for UI, but as long as you use your data only in the Render thread (which you should!), it won't really matter (UI instances only have 1 int to store int his case, not a real loss). Then each instance can simply acces its textures in the std::vector with index [instanceS]. Note that it is only one way to do it, there are probably smarter ways, but this one does work. And this way, my plugins weigh only a few hundred Ko. Anyway, though the new GLator is much better than the old one, it's structure won't be supported by all graphic cards / computers. Some users reported bugs with my plugins, and I had to switch back to my good old personnal structure... and it fixed it. Hope it helps! François
... View more
Oct 11, 2017
10:48 AM
Hi tomb23568765! there is one workaround: expressions can read a file, and grab data from this file, like this: $.evalFile("~/Desktop/myFunctions.txt"); So, you can write an AEGP plugin that creates a "myFunctions.txt" file on your desktop, and fill it with anything you want, like: function getThingamabob(num, question) { if (num == 2 and question == 'yes') { return true; } else { return false; } } Then, your expression will look like this: $.evalFile("~/Desktop/myFunctions.txt"); getThingamabob(2, 'yes') Cheers, François
... View more
Oct 09, 2017
04:09 AM
It was very promising... Probably too much 🙂
... View more
Oct 09, 2017
04:01 AM
Hi Toby, Do you mean expressions can call commands just like scripts? It's very interesting! 🙂 How do you actually do that? Cheers, François
... View more
Sep 30, 2017
02:49 AM
1 Upvote
Hi! I think what you're looking for is WorldTransformSuite1()->transform_world(). It takes 1 (or 2 if you use MotionBlur) matrix. There you can change the values of the matrix as you wish to perform any 2D transformation. Cheers, François
... View more
Jul 25, 2017
05:18 AM
1 Upvote
Baking can be long, but may be not as much as you expect (I was surprised too!) The best solution I found is to actually keyframe only current time when the user's doing something (so it's lightning fast), then bake 'in the background' at idle time, one portion of the workarea after the other. This way, if the user modifies something while baking is still occuring, I can cancel keyframing and update. But in your case, if you only modify a float slider, I guess it'll be super fast anyway and you won't have to deal with delayed baking... One more thing: if you delete the keyframes (not sure you need to...) if you follow the normal way, it'll be super long (no idea why, by the way) but if you use the workaround described in the thread above, it's almost instant. Cheers, François
... View more
Jul 25, 2017
05:01 AM
The plugin doesn't render any images, so I had to find an alternative to watermark for the demo version... So it only bakes one second. But full version bakes the full work area. Cheers, François
... View more
Jul 24, 2017
10:28 AM
1 Upvote
I see... My plugin is BAO Mask Avenger 2 - aescripts + aeplugins - aescripts.com The first version was modifying the mask at render time (a maskShape is a stream too). But since CC 2015, I had to do it another way. So the plugin is not 'dynamic' anymore, meaning it doesn't modify the stream at render time. But of course it is still updated when something changes. Instead, it 'bakes' the mask in the work area. With the help of Shachar, I could make it 'kind of dynamic': when the maskshape needs to be updated, all the keyframes are deleted and baked again. The deleting/baking occurs during ParamChange call of course (baking current time only, for speed reasons), but also at Idle time (it allows updating the mask even if it is modified by an expression that doesn't trigger paramchange... and bakes the remaining keyframes after ParamChange) If you want details, you can check these threads: Re: Deleting all keyframes Re: PF_ABORT and PF_Cmd_USER_CHANGED_PARAM Hope this helps! François
... View more
Jul 24, 2017
01:42 AM
Hi James, I had one plugin working this way, and I had to re-write it all... with a lot of workarounds to avoid this issue. Also, keep in mind that setting a stream's value invalidates the previously rendered frames... What kind of stream do you need to set? And for what purpose? Cheers, François
... View more
May 05, 2017
01:14 AM
Thanks 🙂 May be the layer's matrix could give you some informations, and compare it to comp's size... Just a thought though, not sure at all. Cheers, François
... View more
May 04, 2017
10:02 PM
Hi James, I might be wrong as I'm not using text layers, but aren't text layers 'collapsed' layers (like shape layers)? Then when you check it out, it gets the composition size instead of layer size. Cheers, François
... View more
Mar 23, 2017
10:42 PM
I don't know if you can pass a pointer (I doubt it, but you can try!)... Can you give more details about what you try to achieve? There must be workarounds to find... May be you can just delete the effect at idle time and do all the rest during paramChange (this way you have access to the data you need). Cheers, François
... View more
Mar 23, 2017
07:25 AM
I don't know what kind of data you want to pass... But for example, if you want to pass a simple number, you could add a hidden parameter, set its value on param change, and check the parameter's value at idle time. If you want to pass more complicated data, well, you can add more parameters... If you want to re-render, you could also add a hidden paremeter and change its value at idle time, it will trigger a re-render. Cheers, François
... View more
Mar 23, 2017
04:33 AM
Hi! another way, may be not exactly what you expect, but easier, would be to have a Button parameter instead. Clicking that button, you could get the actual selection of your composition. So if you select the layers then click the button, you'll get their layerID and do whatever you need to do. Cheers, François
... View more