I used an example on writingshaders.com to create framebuffers like this:
If I want to extend the interface like this:Code:/* Input parameter for each framebuffer is a struct: */ typedef struct { miInteger name; miTag type; miBoolean filtering; miTag filename; } named_framebuffer; /* Parameter struct for shader function: */ struct make_named_framebuffers { int i_fb; int n_fb; named_framebuffer fb[1]; }; extern "C" DLLEXPORT int make_named_framebuffers_version(void) { return 1; } /* Struct to store evaluated parameters: */ typedef struct { char* name; char* type; miBoolean filtering; char* filename; } fb_args; /* Evaluate the parameters required to define framebuffers: */ std::vector<fb_args> get_named_framebuffer_args( miState *state, struct make_named_framebuffers *params) { int n_fb = *mi_eval_integer(¶ms->n_fb); int i_fb = *mi_eval_integer(¶ms->i_fb); mi_info("Making %i user framebuffers:", n_fb); std::vector<fb_args> args(n_fb); for (int i = 0; i < n_fb; ++i) { named_framebuffer p = params->fb[i + i_fb]; args[i].name = miaux_tag_to_string(*mi_eval_tag(&p.name), NULL); args[i].type = miaux_tag_to_string(*mi_eval_tag(&p.type), NULL); args[i].filtering = *mi_eval_boolean(&p.filtering); args[i].filename = miaux_tag_to_string(*mi_eval_tag(&p.filename), NULL); mi_progress(" Buffer %s: filename '%s', type '%s', filtering %s", args[i].name, args[i].filename, args[i].type, args[i].filtering ? "on" : "off"); } return args; }
I get fatal errors during rendering.Code:struct make_named_framebuffers { miBoolean contrast; int i_fb; int n_fb; named_framebuffer fb[1]; };
The problem is this line:
named_framebuffer p = params->fb[i + i_fb];
It only works if I use
named_framebuffer *p = ¶ms->fb[i + i_fb];


Reply With Quote