Hi, I'll work like that project( 3M GTG Rotation Screen - YouTube ). What I need and where will be start like that project.( which IDE, which language, which library ) I need that information basiclly.
Thanks for reading.
Hi, I'll work like that project( 3M GTG Rotation Screen - YouTube ). What I need and where will be start like that project.( which IDE, which language, which library ) I need that information basiclly.
Thanks for reading.
I'm trying to create an image filter plugin for AE. The template project from the SDK ("Skeleton project") uses :
suites.Iterate8Suite1()->iterate( in_data,
0, // progress base
linesL, // progress final
¶ms[SKELETON_INPUT]->u.ld, // src
NULL, // area - null for all pixels
(void*)&tInfo, // refcon - your custom data pointer
drawTriangles8, // pixel function pointer
output));
But I want to run my image filter algorithm on an int array int[ ] data_array which holds all of the rgba values (0 - 255) for each pixel.
I'm doing this because I have already written the filter for Java and would prefer not to completely change my implementation.
So this already part of an API or is there a common way of doing this?
Here is my current solution in the Render function:
static PF_Err Render(..){
//...
for(int i = 0; i < tInfo->width; i++){
for(int j = 0; j < tInfo->height; j++){
PF_Pixel currentPixel = *getXY(*tInfo->input, i, j);
int alpha = currentPixel.alpha;
int red = currentPixel.red;
int green = currentPixel.green;
int blue = currentPixel.blue;
p.push_back(red);
p.push_back(green);
p.push_back(blue);
p.push_back(alpha);
}
}
staticPF_Pixel
*getXY(PF_EffectWorld&def, int x , int y){
return (PF_Pixel*)((char*)def.data +
(y * def.rowbytes) +
(x * sizeof(PF_Pixel)));
}
Also while I'm here, what is the best way to debug the plugin using Xcode? I set the executable path to AE but I'm not sure how to go about using the debug mode along with AE. I appreciate any help anyone can give me.
I've managed to hack my way through to a functional 32bit plugin but have hit a stumbling block.
I need to query a colour picker parameter and apply its values to a 3d point parameter. However the value always returns as 16pbc (0-255 range).
In After Effects the colour is being stored correctly, it's obviously just reading back as 16pbc in my code.
Here's how I'm approaching it currently (inside UserChangedParam()):
if (which_hitP->param_index == MATTE_PICKER){
params[MATTE_POINT]->u.point3d_d.x_value = params[MATTE_PICKER]->u.cd.value.red;
params[MATTE_POINT]->u.point3d_d.y_value = params[MATTE_PICKER]->u.cd.value.green;
params[MATTE_POINT]->u.point3d_d.z_value = params[MATTE_PICKER]->u.cd.value.blue;
params[MATTE_POINT]->uu.change_flags = PF_ChangeFlag_CHANGED_VALUE;
}
In this thread (Re: CCU Render Example 16bit / 32bit) I saw reference to PF_GetFloatingPointColorFromColorDef(), however I can't seem to find any documentation on that particular function.
Any help would be amazing.
Thanks.
Hey guys,
So I've added a PF_Cmd_DO_DIALOGUE to my plugin thusly:
case PF_Cmd_DO_DIALOG:
err = Register(in_data, out_data);
break;
The problem is that the Register() command runs constantly instead of only when clicking the "Register" button.
It opens a dialogue box and that box, when closed, will reopen when clicking anywhere at all in the After Effects window.
Anyone else had this issue?
Hello, I am writing a plugin using the c++ SDK which takes the fonts names of the current selected composition.
Get the font name is done by executing a java script and this code is a part of the idle hook.
My problem is that when a model window of after effects is open, i get popup messages telling me that it is not allowed to execute a script while a model window is open.
Also, when i try to edit a text i get a strange message saying: "need to focus on ourselves".
Is there any way to ask after effect if it is OK to run a script?
Thanks!
Hi,
There is a mismatch between SDK documentation and actual API function.
SDK Documentation:
Creates a new folder in the project. The newly created
folder is allocated and owned by After Effects. Passing
NULL for parent_folderH0 creates the folder at the
project’s root.
AEGP_CreateNewFolder(
const A_UTF16Char *nameZ,
AEGP_ProjectH projH),
AEGP_ItemH parentH0),
AEGP_ItemH *new_folderPH);
On the other side, the callback declaration looks slightly different:
SPAPI A_Err (*AEGP_CreateNewFolder)(
const A_UTF16Char *nameZ, /* >> null terminated UTF16 */
AEGP_ItemH parent_folderH0, /* >> */
AEGP_ItemH *new_folderPH); /* << allocated and owned by AE */
So the question is: what's teh parent_FolderH0 and how do I get it?
Best regards,
Yuri
hi,everyone!
I'm now face a problem about memory management. what I want to do is extract feature points between video frames, I use OpenCV api,and get error message "Crash in progress. Last logged message was <6476><DynamicLink><5> Adobe Premiere Pro.exe". the following is my code
static PF_Err Render( PF_InData *in_data, PF_OutData *out_data, PF_ParamDef *params[], PF_LayerDef *output) { PF_Err err = PF_Err_NONE, err2 = PF_Err_NONE; int32_t num_channelsL = 0; PF_ParamDef checkout; MyData *mystable = NULL; AEFX_CLR_STRUCT(checkout); AEGP_SuiteHandler suites(in_data->pica_basicP); // set the checked-out rect to be the top half of the layer long frame_num = in_data->total_time / in_data->time_step; vector<cv::Mat> image; image.resize(0); for (long i = 0; i < frame_num; i++) { PF_ParamDef checkout; AEFX_CLR_STRUCT(checkout); ERR(PF_CHECKOUT_PARAM(in_data, CHECK_LAYER, (in_data->current_time + i * in_data->time_step), in_data->time_step, in_data->time_scale, &checkout)); cv::Mat I = EffectWorld2cvMat(&(checkout.u.ld), 640, 360); image.push_back(I); ERR2(PF_CHECKIN_PARAM(in_data, &checkout)); // ALWAYS check in, // even if invalid param. } if (!out_data->sequence_data) { PF_STRCPY(out_data->return_msg, "no data"); out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; err = PF_Err_INTERNAL_STRUCT_DAMAGED; } if (!err){ mystable = *(MyData **)out_data->sequence_data; mystable->s->m_frames = image; double hessianThreshold(4000.0); vector<cv::KeyPoint> keypoints1; vector<cv::KeyPoint> keypoints2; cv::SurfFeatureDetector SURF(hessianThreshold); cv::SurfDescriptorExtractor surfDesc; cv::Mat descriptors1; cv::Mat descriptors2; cv::BruteForceMatcher<cv::L2<float>> matcher; cv::vector<Point2f> feature1; cv::vector<Point2f> feature2; cv::Mat I1_gray(360,640,CV_8UC1,Scalar::all(0)); cv::Mat I2_gray(360, 640, CV_8UC1, Scalar::all(0)); for (int i(0); i <frame_num-1; ++i) { cvtColor(image[i], I1_gray, CV_BGR2GRAY); cvtColor(image[i + 1], I2_gray, CV_BGR2GRAY); //detect surf features SURF.detect(I1_gray, keypoints1); SURF.detect(I2_gray, keypoints2); //describe surf features surfDesc.compute(I1_gray, keypoints1, descriptors1); surfDesc.compute(I2_gray, keypoints2, descriptors2); std::vector<cv::DMatch> matches; matcher.match(descriptors1, descriptors2, matches); matches2points(keypoints1, keypoints2, matches, feature1, feature2); //the programe run to here,all things work well, and if I continue run the following code,i will get error message vector<uchar>inliers(feature1.size(), 0); cv::findHomography(cv::Mat(feature1), cv::Mat(feature2), inliers, CV_RANSAC); mystable->s->m_FList.push_back(H_prev); } } return err; }
myData structure is
typedef struct { A_Boolean flatB; Stabilizer* s; AEGP_MemHandle sH; } MyData;
Stabilizer
For effects plug-ins, After Effects sends command selectors (and relevant information) to the plug-in entry point function designated in the effects’ PiPL resource.
what is "selector "
Hi All,
I try to understand the sample project resizer, and I have some problem.
when I apply the effect "resizer" ,I find that I can only get a canvas which size is customer defined, but the layer size didn't change at all?
So how can I change the size of layer or composition size?
Thanks & Regards,
Hi all,
I'd like to ask whether is it possible to create puppet pins programmatically...
I have tried to copy stream structure ("ADBE FreePin3", "ADBE FreePin3 Mesh", "ADBE FreePin3 PosPin Position", ...) of manually created pins with
corresponding values, but when I create streams this way they are disabled (AEGP_DynStreamFlag_DISABLED - and greyed out in UI).
I suppose that the vertex index "ADBE FreePin3 PosPin Vtx Index" is just an index to the array stored internally as arbitrary data so the mesh and pins must be created somehow before setting these values.
I've found this thread where they try to do the same thing using scripting (also without success )Create Puppet Pin on existing mesh via scripting
I have some ideas about how this could be done using SDK, but all of them involve diving in very dark waters..
- call the EffectSuite::AEGP_EffectCallGeneric method with fake mouse click events (PF_Cmd_EVENT) or some direct PF_Cmd_COMPLETELY_GENERAL commands if the FreePin effect supports it
- use "FreePin Suite" - which is not a part of public SDK but can be aquired using AquireSuite... - but as it's not public I suppose it operates with memory which is not so safe to touch even if I managed to get/create proper header file for this suite
Maybe there is a simple elegant way of creating these pins which I completely overlooked, so I would be really thankful for any suggestions
Thanks a lot!
Martin
Hi !
I wonder if an AEGP plugin can read and/or modify AE Preferences.
Not a self-plugin-preference like described in the Persisto example, but let's say i would like to modify a property which is in Adobe After Effects 13.5 Prefs-indep-general.txt
(the property is not in Prefs.txt, it's really in Prefs-indep-general.txt)
Hi,
I have been trying for days to get OpenCV to work with After Effects.
The code compiles, but this simple line of code (or any other line of OpenCV code) makes the program crash straight away :
cv::Mat(rows, cols, CV_8UC4, data);
(where rows and cols are integers and data is a void*)
The code is in a function and I'm not even calling that function yet.
This is the full function:
cv::Mat GetMat(int rows, int cols, void * data)
{
return cv::Mat(rows, cols, CV_8UC4, data);
}
Has anyone got an idea?
Thanks.
Hi,
We have an After Effects plugin (filter) with a custom ECW UI (arbitrary, PF_PUI_CONTROL | PF_PUI_DONT_ERASE_CONTROL UI flags). All works fine in After Effects and Premiere Pro, but in Premiere Elements 10 the plugin not get any PF_Cmd_EVENT calls. Any ideas what is wrong? Does the PE 10 (11) support custom ECW UI? Is there any PE specifics not described in SDK?
Thanks in advance.
Hi,everybody!
Firstly,i have to admit that I did a 'stupid' thing...I am trying to do a simple plugin for 'play'...
Now,i am getting in the trouble. So i come here for some help.
I want to konw how i can let my plugin put a picture(i have edited) into composition window.(like the plugin'Optical Flares', but i just let my plugin put one picture.)
And i can do some simple adjustment(such as width,height,center).
I am puzzled about the code.If someone can provide an example or way,it will be very helpful.
(I am a CS5 user)
Thank You!
Hi,
I'm baking some keyframes during PF_Cmd_USER_CHANGED_PARAM.
When the workArea duration is long, the process can take a while, and I'd like the user to be able to abort the process.
I've tried with PF_ABORT and/or PF_PROGRESS, but didn't get any result...
here's the bake function:
static PF_Err
Bake (
PF_InData *in_data,
PF_OutData *out_data,
PF_ParamDef *params[],
bool localKey,
int vIndex)
{
//BAKE my keys
return err;
}
and how I call it during PF_Cmd_USER_CHANGED_PARAM:
err = Bake( in_data, out_data, params, true, vIndex); // I also tried this way ERR(Bake( in_data, out_data, params, true, vIndex));
Any idea will be welcome!
Cheers,
François
Hello,
I just started to develop plug-ins for after effects because of a big project in my company, and I experience an issue when I try to use the plug-in I developped whith Visual Studio 2012 and the AE CS6 SDK. AE can't find the entrypoint of the plug-in. Here is the code of my project, if it can help:
Warbler.cpp
#include "Warbler.h"
static PF_Err About (
PF_InData *in_data,
PF_OutData *out_data,
PF_ParamDef *params[],
PF_LayerDef *output )
{
PF_SPRINTF(out_data->return_msg, "%s,v%d.%d\r%s",
NAME, MAJOR_VERSION, MINOR_VERSION, DESCRIPTION);
return PF_Err_NONE;
}
static PF_Err GlobalSetup (
PF_InData *in_data,
PF_OutData *out_data,
PF_ParamDef *params[],
PF_LayerDef *output )
{
PF_Err err = PF_Err_NONE;
// We need to let AE know what version we are:
out_data->my_version =
PF_VERSION(MAJOR_VERSION,
MINOR_VERSION,
BUG_VERSION,
STAGE_VERSION,
BUILD_VERSION);
// We are going to iterate over the output extent,
// so we need to specify that flag...
out_data->out_flags |=
PF_OutFlag_USE_OUTPUT_EXTENT;
return err;
}
static PF_Err ParamsSetup (
PF_InData *in_data,
PF_OutData *out_data,
PF_ParamDef *params[],
PF_LayerDef *output)
{
PF_Err err = PF_Err_NONE;
PF_ParamDef def;
// Always clear out the PF_ParamDef
// before adding your parameters.
AEFX_CLR_STRUCT(def);
// Create the LAYER parameter...
def.param_type = PF_Param_LAYER;
PF_STRCPY(def.name, "Displacement Layer:");
def.u.ld.dephault = PF_LayerDefault_NONE;
if (err = PF_ADD_PARAM(in_data, -1, &def))
return err;
// Create the ANGLE parameter...
def.param_type = PF_Param_ANGLE;
PF_STRCPY(def.name, "Angle of Displacement");
def.flags = 0;
def.u.fd.value_str[0] =
def.u.fd.value_desc[0] = '\0';
def.u.fd.value = def.u.fd.dephault = 0;
def.u.fd.valid_min =
def.u.fd.slider_min = ANGLE_MIN;
def.u.fd.valid_max =
def.u.fd.slider_max = ANGLE_MAX;
def.u.fd.precision = 0;
def.u.fd.display_flags = 0;
if (err = PF_ADD_PARAM(in_data, -1, &def))
return err;
// Create the DISPLACEMENT SLIDER...
def.param_type = PF_Param_FIX_SLIDER;
PF_STRCPY(def.name, "Amount of Displacement");
def.flags = 0;
def.u.fd.value_str[0] =
def.u.fd.value_desc[0] = '\0';
def.u.fd.value =
def.u.fd.dephault = SHIFT_BLEND_DFLT;
def.u.fd.valid_min =
def.u.fd.slider_min = SHIFT_BLEND_MIN;
def.u.fd.valid_max =
def.u.fd.slider_max = SHIFT_BLEND_MAX;
def.u.fd.precision = 1;
def.u.fd.display_flags = 1; // display as percent
if (err = PF_ADD_PARAM(in_data, -1, &def))
return err;
// GAMMA slider...
AEFX_CLR_STRUCT(def);
def.param_type = PF_Param_FIX_SLIDER;
PF_STRCPY(def.name, "Source Gamma");
def.u.fd.value_str[0] =
def.u.fd.value_desc[0] = '\0';
def.u.fd.value =
def.u.fd.dephault = BIAS_DFLT;
def.u.fd.valid_min =
def.u.fd.slider_min = BIAS_MIN;
def.u.fd.slider_max = BIAS_MAX;
def.u.fd.valid_max = BIAS_BIG_MAX;
def.u.fd.precision = 1;
def.u.fd.display_flags = 0;
if (err = PF_ADD_PARAM(in_data, -1, &def))
return err;
// Create the FIXED SLIDER parameter...
def.param_type = PF_Param_FIX_SLIDER;
PF_STRCPY(def.name, "Blend With Original");
def.flags = 0;
def.u.fd.value_str[0] =
def.u.fd.value_desc[0] = '\0';
def.u.fd.value =
def.u.fd.dephault = SHIFT_BLEND_DFLT;
def.u.fd.valid_min =
def.u.fd.slider_min = SHIFT_BLEND_MIN;
def.u.fd.valid_max =
def.u.fd.slider_max = SHIFT_BLEND_MAX;
def.u.fd.precision = 1;
def.u.fd.display_flags = 1; // display as percent
if (err = PF_ADD_PARAM(in_data, -1, &def))
return err;
// Set number of parameters...
out_data->num_params = SHIFT_NUM_PARAMS;
return err;
}
static PF_Err GlobalSetdown (
PF_InData *in_data,
PF_OutData *out_data,
PF_ParamDef *params[],
PF_LayerDef *output )
{
return PF_Err_NONE;
}
static PF_Err Render (
PF_InData *in_data,
PF_OutData *out_data,
PF_ParamDef *params[],
PF_LayerDef *output )
{
PF_Err err = PF_Err_NONE;
return err;
}
PF_Err EntryPointFunc (
PF_Cmd cmd,
PF_InData *in_data,
PF_OutData *out_data,
PF_ParamDef *params[],
PF_LayerDef *output,
void *extra )
{
PF_Err err = PF_Err_NONE;
switch (cmd) {
case PF_Cmd_ABOUT:
err = About(in_data,out_data,params,output);
break;
case PF_Cmd_GLOBAL_SETUP:
err = GlobalSetup(in_data,out_data,params,output);
break;
case PF_Cmd_PARAMS_SETUP:
err = ParamsSetup(in_data,out_data,params,output);
break;
case PF_Cmd_GLOBAL_SETDOWN:
err = GlobalSetdown(in_data,out_data,params,output);
break;
case PF_Cmd_RENDER:
err = Render(in_data,out_data,params,output);
break;
default:
break;
}
return err;
}
Warbler.h
// INCLUDES
#include "AE_EffectCB.h"
#include "AE_Macros.h"
#include "entry.h"
// DEFINES
#define NAME "Warbler"
#define MAJOR_VERSION 1
#define MINOR_VERSION 0
#define BUG_VERSION 0
#define STAGE_VERSION PF_Stage_RELEASE
#define BUILD_VERSION 1
#define LONG2FIX(x) (((long)x)<<16)
#define LUMA(p) \
(double)(p->red + 2*p->green + p->blue)/(255. * 4.)
#define bias(a,b) \
PF_POW( (a), PF_LOG(b) / PF_LOG(0.5) )
#define ANGLE_MIN (-180L << 16)
#define ANGLE_MAX ( 180L << 16)
#define BIAS_MIN (655) // 0.01 Fixed
#define BIAS_MAX (1L << 16)
#define BIAS_BIG_MAX (10L << 16)
#define BIAS_DFLT (6553*5) // about 0.5 Fixed
#define SHIFT_BLEND_MIN 0L
#define SHIFT_BLEND_MAX (1L << 16)
#define SHIFT_BLEND_DFLT 0L
// PARAMETER DEFINITION CONSTANTS
enum {
BASE=0,
DISP_LAYER,
DISP_ANGLE,
SHIFT_DISPLACE_AMT,
SHIFT_GAMMA,
SHIFT_BLEND,
SHIFT_NUM_PARAMS
};
#define DESCRIPTION \
"Displacement mapping based on luminance."
PF_Err EntryPointFunc (
PF_Cmd cmd,
PF_InData *in_data,
PF_OutData *out_data,
PF_ParamDef *params[],
PF_LayerDef *output,
void *extra );
WarblerPiPL.r
#include "AEConfig.h"
#include "AE_EffectVers.h"
#ifndef AE_OS_WIN
#include <AE_General.r>
#endif
resource 'PiPL' (16000) {
{ /* array properties: 12 elements */
/* [1] */
Kind {
AEEffect
},
/* [2] */
Name {
"Warbler"
},
/* [3] */
Category {
"Sample Plug-ins"
},
#ifdef AE_OS_WIN
#ifdef AE_PROC_INTELx64
CodeWin64X86 {"EntryPointFunc"},
#else
CodeWin32X86 {"EntryPointFunc"},
#endif
#else
#ifdef AE_OS_MAC
CodeMachOPowerPC {"EntryPointFunc"},
CodeMacIntel32 {"EntryPointFunc"},
CodeMacIntel64 {"EntryPointFunc"},
#endif
#endif
/* [6] */
AE_PiPL_Version {
2,
0
},
/* [7] */
AE_Effect_Spec_Version {
PF_PLUG_IN_VERSION,
PF_PLUG_IN_SUBVERS
},
/* [8] */
AE_Effect_Version {
524289 /* 1.0 */
},
/* [9] */
AE_Effect_Info_Flags {
0
},
/* [10] */
AE_Effect_Global_OutFlags {
0x02000000 //50332160
},
AE_Effect_Global_OutFlags_2 {
0x00000000
},
/* [11] */
AE_Effect_Match_Name {
"ADBE Warbler"
},
/* [12] */
AE_Reserved_Info {
0
}
}
};
This plug-in is made by following the tutorial of Kas Thomas.
http://www.mactech.com/articles/mactech/Vol.15/15.09/AfterEffectsPlugins/index.html
Any idea of where can be the problem? I tried to find some doc on the PiPLs but so far, nothing really interesting...
I have created a plug-in and tested it sucessfully on my computers, both Mac and PC, 32 and 64-bit, and everything has worked fine. However, when I put the plug-in my website for download, one user has told me they got an error:
AFter Effects error: plug-in \"C:\\Program Files\\Adobe\\Adobe After Effects CS5\\Support Files\\Plug-ins\\BatchFrame\\
I'm developing another Premiere Pro plugin based on AE effects SDK.
The plugin manipulates pixels in a very simple way - based on lift/gamma/gain controls it changes the values as such:
colorRGB->blue = PF_POW( colorRGB->blue , gamma) * gain + lift
And so on for the red, and green. All in floating point, PF_FpShort. I even tried doing calculations in PF_FpLong, but the results were the same.
Later the values can be clipped using MAX and MIN macros.
In After Effects everything works perfectly. In Premiere Pro, once certain gamma treshold (less than about 0.5, more than about 1.4) is reached, I start getting weird artifacts. Either green pixels or black squares in random patterns, usually, but not always, corresponding to the darker parts of the image.
I have no idea why, and how to correct it.
Please help.
EDIT: Actually any gamma that is different than 1 results in these weird artifacts, and only in the BGRA_32f mode. BGRA_8u works fine.
Hallo there,
i’ve managed successfully to programm a Lens-Distortion Plugin, using the Skeleton Template as a base.
So far, every function from this Plugin is functioning like it should be. The single problem that I have, is that the Image is like “Pixelated“ on the edges maybe a Subpixel-rendering or antialiasing problem.
This can be seen at example foto down here. 1 is the original image and the 2 foto is the distorted image with my plugin. The subpixeling is really on each corner of the box.
I thought first, that i was rounding the variables, but i’ve checked my algorithmus and am using doubles for the parameters, so it can’t be round.
Do you have any Idea, what i am missing ?
Thanks in advanced,
Boban
The main function looks like this:
static PF_Err
MySimpleGainFunc16(
void *refcon,
A_long xL,
A_long yL,
PF_Pixel16 *inP,
PF_Pixel16 *outP)
{
PF_Err err = PF_Err_NONE;
DistInfo *giP = reinterpret_cast<DistInfo*>(refcon);
AEGP_SuiteHandler suites(giP->in_data.pica_basicP);
PF_FpLong tempF = 0;
PFBarrelCommon *barrel = NULL;
PF_Fixed new_xFi = 0, new_yFi = 0;
double offset_x_ = 0, offset_y_ = 0;
double //GUI PARAMETERN
c3_ = giP->low, // Low Order par
c5_ = giP->high, // High Order par
xp_ = (double)((giP->centerX)), // Lens center X
yp_ = (double)((giP->centerY)), // Lens center Y
in_width_ = giP->orig_width, // Undistored x giP->footage_width;
in_height_ = giP->orig_height, // Undistored y giP->footage_height;
orig_width_ = giP->orig_width + giP->footage_width, // Undistored x giP->footage_width;
orig_height_ = giP->orig_height + giP->footage_height,
squeeze_ = giP->anaS, // Ana... Squezze
invSqueeze_ = 1 / squeeze_,
f1 = orig_width_ / in_width_,
f2 = orig_height_ / in_height_;
Point2
DistortPoint = Point2(1, 1),
UnDistortPoint = Point2(1, 1),
C3C5_ = Point2(c3_, c5_),
outputAbsCent = barrel->calcAbsCent((float)xp_, (int)orig_width_, (float)yp_, (int)orig_height_),
absCent_ = barrel->calcAbsCent((float)xp_, (int)in_width_, (float)yp_, (int)in_height_);
offset_x_ = absCent_.x - outputAbsCent.x,
offset_y_ = absCent_.y - outputAbsCent.y;
Point2
pt_ = Point2(((double)xL_*f1 + offset_x_), ((double)yL_*f2 + offset_y_)),
norm_ = barrel->calcNorm((int)in_width_, (int)in_height_);
switch (giP->distortion_mode)
{
case DM_DISTORT:
DistortPoint = barrel->PFBarrelCommon::solveDistort(C3C5_, absCent_, squeeze_, invSqueeze_, norm_, pt_);
break;
case DM_UNDISTORT:
DistortPoint = barrel->PFBarrelCommon::solveUndistort(C3C5_, absCent_, squeeze_, invSqueeze_, norm_, pt_);
break;
default:
break;
}
new_xFi = (A_long)(DistortPoint.x) << 16;
new_yFi = (A_long)(DistortPoint.y) << 16;
ERR(suites.Sampling16Suite1()->subpixel_sample16(giP->in_data.effect_ref,
new_xFi,
new_yFi,
&giP->samp_pb,
outP));
return err;
Hi,
I'm writing a plugin where I use OpenGL VAOs. Everything works fine, also RAM preview, but when I cancel full screen RAM preview and render a new frame the VAO is somehow deleted. I called glGenVertexArrays for testing and the handle it returns is 1, which was previously the handle of my valid VAO.
Has anyone had this problem? It only happens when using full screen RAM preview. I also tested this in the GLator sample by generating dummy VAOs and it's exactly the same.