Cleanup: move public doc-strings into headers for 'render'

Ref T92709
This commit is contained in:
Campbell Barton 2021-12-08 17:12:43 +11:00
parent 7e92717439
commit 93ba5e2375
15 changed files with 228 additions and 120 deletions

View File

@ -120,6 +120,10 @@ void RE_bake_normal_world_to_object(const BakePixel pixel_array[],
float result[],
struct Object *ob,
const eBakeNormalSwizzle normal_swizzle[3]);
/**
* This function converts an object space normal map
* to a tangent space normal map for a given low poly mesh.
*/
void RE_bake_normal_world_to_tangent(const BakePixel pixel_array[],
const size_t num_pixels,
const int depth,

View File

@ -180,6 +180,10 @@ typedef struct RenderEngine {
RenderEngine *RE_engine_create(RenderEngineType *type);
void RE_engine_free(RenderEngine *engine);
/**
* Loads in image into a result, size must match
* x/y offsets are only used on a partial copy when dimensions don't match.
*/
void RE_layer_load_from_file(
struct RenderLayer *layer, struct ReportList *reports, const char *filename, int x, int y);
void RE_result_load_from_file(struct RenderResult *result,

View File

@ -167,8 +167,10 @@ typedef struct RenderStats {
/* *********************** API ******************** */
/* the name is used as identifier, so elsewhere in blender the result can retrieved */
/* calling a new render with same name, frees automatic existing render */
/**
* The name is used as identifier, so elsewhere in blender the result can retrieved.
* Calling a new render with same name, frees automatic existing render.
*/
struct Render *RE_NewRender(const char *name);
struct Render *RE_GetRender(const char *name);
@ -176,36 +178,80 @@ struct Scene;
struct Render *RE_NewSceneRender(const struct Scene *scene);
struct Render *RE_GetSceneRender(const struct Scene *scene);
/* assign default dummy callbacks */
/* Assign default dummy callbacks. */
/**
* Called for new renders and when finishing rendering
* so we always have valid callbacks on a render.
*/
void RE_InitRenderCB(struct Render *re);
/* use free render as signal to do everything over (previews) */
/**
* Use free render as signal to do everything over (previews).
*
* Only call this while you know it will remove the link too.
*/
void RE_FreeRender(struct Render *re);
/* only called on exit */
/**
* Only called on exit.
*/
void RE_FreeAllRender(void);
/* On file load, free render results. */
/**
* On file load, free render results.
*/
void RE_FreeAllRenderResults(void);
/* On file load or changes engines, free persistent render data.
* Assumes no engines are currently rendering. */
/**
* On file load or changes engines, free persistent render data.
* Assumes no engines are currently rendering.
*/
void RE_FreeAllPersistentData(void);
/* Free persistent render data, optionally only for the given scene. */
/**
* Free persistent render data, optionally only for the given scene.
*/
void RE_FreePersistentData(const Scene *scene);
/* get results and statistics */
/**
* Get results and statistics.
*/
void RE_FreeRenderResult(struct RenderResult *rr);
/**
* If you want to know exactly what has been done.
*/
struct RenderResult *RE_AcquireResultRead(struct Render *re);
struct RenderResult *RE_AcquireResultWrite(struct Render *re);
void RE_ReleaseResult(struct Render *re);
/**
* Same as #RE_AcquireResultImage but creating the necessary views to store the result
* fill provided result struct with a copy of thew views of what is done so far the
* #RenderResult.views #ListBase needs to be freed after with #RE_ReleaseResultImageViews
*/
void RE_AcquireResultImageViews(struct Render *re, struct RenderResult *rr);
/**
* Clear temporary #RenderResult struct.
*/
void RE_ReleaseResultImageViews(struct Render *re, struct RenderResult *rr);
/**
* Fill provided result struct with what's currently active or done.
* This #RenderResult struct is the only exception to the rule of a #RenderResult
* always having at least one #RenderView.
*/
void RE_AcquireResultImage(struct Render *re, struct RenderResult *rr, const int view_id);
void RE_ReleaseResultImage(struct Render *re);
void RE_SwapResult(struct Render *re, struct RenderResult **rr);
void RE_ClearResult(struct Render *re);
struct RenderStats *RE_GetStats(struct Render *re);
/**
* Caller is responsible for allocating `rect` in correct size!
*/
void RE_ResultGet32(struct Render *re, unsigned int *rect);
/**
* Only for acquired results, for lock.
*
* \note The caller is responsible for allocating `rect` in correct size!
*/
void RE_AcquiredResultGet32(struct Render *re,
struct RenderResult *result,
unsigned int *rect,
@ -223,7 +269,10 @@ float *RE_RenderLayerGetPass(volatile struct RenderLayer *rl,
bool RE_HasSingleLayer(struct Render *re);
/* add passes for grease pencil */
/**
* Add passes for grease pencil.
* Create a render-layer and render-pass for grease-pencil layer.
*/
struct RenderPass *RE_create_gp_pass(struct RenderResult *rr,
const char *layername,
const char *viewname);
@ -236,7 +285,10 @@ void RE_create_render_pass(struct RenderResult *rr,
const char *viewname,
const bool allocate);
/* obligatory initialize call, disprect is optional */
/**
* Obligatory initialize call, doesn't change during entire render sequence.
* \param disprect: is optional. if NULL it assumes full window render.
*/
void RE_InitState(struct Render *re,
struct Render *source,
struct RenderData *rd,
@ -246,15 +298,28 @@ void RE_InitState(struct Render *re,
int winy,
rcti *disprect);
/* set up the viewplane/perspective matrix, three choices */
struct Object *RE_GetCamera(struct Render *re); /* return camera override if set */
/**
* Set up the view-plane/perspective matrix, three choices.
*
* \return camera override if set.
*/
struct Object *RE_GetCamera(struct Render *re);
void RE_SetOverrideCamera(struct Render *re, struct Object *cam_ob);
/**
* Per render, there's one persistent view-plane. Parts will set their own view-planes.
*
* \note call this after #RE_InitState().
*/
void RE_SetCamera(struct Render *re, struct Object *cam_ob);
/* get current view and window transform */
/**
* Get current view and window transform.
*/
void RE_GetViewPlane(struct Render *re, rctf *r_viewplane, rcti *r_disprect);
/* Set the render threads based on the command-line and auto-threads setting. */
/**
* Set the render threads based on the command-line and auto-threads setting.
*/
void RE_init_threadcount(Render *re);
bool RE_WriteRenderViewsImage(struct ReportList *reports,
@ -271,7 +336,11 @@ bool RE_WriteRenderViewsMovie(struct ReportList *reports,
const int totvideos,
bool preview);
/* only RE_NewRender() needed, main Blender render calls */
/**
* Only #RE_NewRender() needed, main Blender render calls.
*
* General Blender frame render call.
*/
void RE_RenderFrame(struct Render *re,
struct Main *bmain,
struct Scene *scene,
@ -279,6 +348,9 @@ void RE_RenderFrame(struct Render *re,
struct Object *camera_override,
int frame,
const bool write_still);
/**
* Saves images to disk.
*/
void RE_RenderAnim(struct Render *re,
struct Main *bmain,
struct Scene *scene,
@ -298,13 +370,24 @@ void RE_RenderFreestyleExternal(struct Render *re);
void RE_SetActiveRenderView(struct Render *re, const char *viewname);
const char *RE_GetActiveRenderView(struct Render *re);
/* error reporting */
/**
* Error reporting.
*/
void RE_SetReports(struct Render *re, struct ReportList *reports);
/* main preview render call */
/**
* Main preview render call.
*/
void RE_PreviewRender(struct Render *re, struct Main *bmain, struct Scene *scene);
/**
* Only the temp file!
*/
bool RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode);
/**
* Called from the UI and render pipeline, to save multi-layer and multi-view
* images, optionally isolating a specific, view, layer or RGBA/Z pass.
*/
bool RE_WriteRenderResult(struct ReportList *reports,
RenderResult *rr,
const char *filename,
@ -314,7 +397,11 @@ bool RE_WriteRenderResult(struct ReportList *reports,
struct RenderResult *RE_MultilayerConvert(
void *exrhandle, const char *colorspace, bool predivide, int rectx, int recty);
/* display and event callbacks */
/* Display and event callbacks. */
/**
* Image and movie output has to move to either imbuf or kernel.
*/
void RE_display_init_cb(struct Render *re,
void *handle,
void (*f)(void *handle, RenderResult *rr));
@ -337,17 +424,27 @@ void RE_gl_context_destroy(Render *re);
void *RE_gl_context_get(Render *re);
void *RE_gpu_context_get(Render *re);
/* should move to kernel once... still unsure on how/where */
/**
* \param x: ranges from -1 to 1.
*
* TODO: Should move to kernel once... still unsure on how/where.
*/
float RE_filter_value(int type, float x);
int RE_seq_render_active(struct Scene *scene, struct RenderData *rd);
/**
* Used in the interface to decide whether to show layers or passes.
*/
bool RE_layers_have_name(struct RenderResult *result);
bool RE_passes_have_name(struct RenderLayer *rl);
struct RenderPass *RE_pass_find_by_name(volatile struct RenderLayer *rl,
const char *name,
const char *viewname);
/**
* Only provided for API compatibility, don't use this in new code!
*/
struct RenderPass *RE_pass_find_by_type(volatile struct RenderLayer *rl,
int passtype,
const char *viewname);
@ -358,8 +455,14 @@ struct RenderPass *RE_pass_find_by_type(volatile struct RenderLayer *rl,
#define RE_BAKE_AO 2
void RE_GetCameraWindow(struct Render *re, struct Object *camera, float mat[4][4]);
/**
* Must be called after #RE_GetCameraWindow(), does not change `re->winmat`.
*/
void RE_GetCameraWindowWithOverscan(struct Render *re, float overscan, float r_winmat[4][4]);
void RE_GetCameraModelMatrix(struct Render *re, struct Object *camera, float r_modelmat[4][4]);
/* displist.c utility. */
struct Scene *RE_GetScene(struct Render *re);
void RE_SetScene(struct Render *re, struct Scene *sce);

View File

@ -18,16 +18,14 @@
*/
/** \file
* \ingroup render
*
* This include is for non-render pipeline exports (still old cruft here).
*/
#pragma once
#include "BLI_compiler_attrs.h"
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* this include is for non-render pipeline exports (still old cruft here) */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* called by meshtools */
struct Depsgraph;
struct ImagePool;
@ -39,6 +37,12 @@ extern "C" {
#endif
/* texture_procedural.c */
/**
* \param pool: Thread pool, may be NULL.
*
* \return True if the texture has color, otherwise false.
*/
bool RE_texture_evaluate(const struct MTex *mtex,
const float vec[3],
const int thread,
@ -49,6 +53,13 @@ bool RE_texture_evaluate(const struct MTex *mtex,
float *r_intensity,
float r_rgba[4]) ATTR_NONNULL(1, 2, 7, 8);
/**
* \param in: Destination
* \param tex: Texture.
* \param out: Previous color.
* \param fact Texture strength.
* \param facg: Button strength value.
*/
void texture_rgb_blend(
float in[3], const float tex[3], const float out[3], float fact, float facg, int blendtype);
float texture_value_blend(float tex, float out, float fact, float facg, int blendtype);
@ -57,9 +68,11 @@ void RE_texture_rng_init(void);
void RE_texture_rng_exit(void);
/* texture_image.c */
void ibuf_sample(struct ImBuf *ibuf, float fx, float fy, float dx, float dy, float result[4]);
/* texture_pointdensity.c */
struct PointDensity;
void RE_point_density_cache(struct Depsgraph *depsgraph, struct PointDensity *pd);
@ -69,6 +82,10 @@ void RE_point_density_minmax(struct Depsgraph *depsgraph,
float r_min[3],
float r_max[3]);
/**
* \note Requires #RE_point_density_cache() to be called first.
* \note Frees point density structure after sampling.
*/
void RE_point_density_sample(struct Depsgraph *depsgraph,
struct PointDensity *pd,
const int resolution,
@ -80,8 +97,10 @@ void RE_point_density_fix_linking(void);
/* texture_procedural.c */
/* Texture evaluation result.
* NOTE: tr tg tb ta has to remain in this order for array access. */
/**
* Texture evaluation result.
* \note `tr tg tb ta` have to remain in this order for array access.
*/
typedef struct TexResult {
float tin, tr, tg, tb, ta;
int talpha;
@ -89,6 +108,14 @@ typedef struct TexResult {
} TexResult;
/* This one uses nodes. */
/**
* \warning if the texres's values are not declared zero,
* check the return value to be sure the color values are set before using the r/g/b values,
* otherwise you may use uninitialized values - Campbell
*
* Use it for stuff which is out of render pipeline.
*/
int multitex_ext(struct Tex *tex,
float texvec[3],
float dxt[3],
@ -99,14 +126,26 @@ int multitex_ext(struct Tex *tex,
struct ImagePool *pool,
bool scene_color_manage,
const bool skip_load_image);
/* Nodes disabled. */
/**
* Nodes disabled.
* extern-tex doesn't support nodes (#ntreeBeginExec() can't be called when rendering is going on).
*
* Use it for stuff which is out of render pipeline.
*/
int multitex_ext_safe(struct Tex *tex,
const float texvec[3],
struct TexResult *texres,
struct ImagePool *pool,
bool scene_color_manage,
const bool skip_load_image);
/* Only for internal node usage. */
/**
* Only for internal node usage.
*
* this is called from the shader and texture nodes
* Use it from render pipeline only!
*/
int multitex_nodes(struct Tex *tex,
const float texvec[3],
float dxt[3],

View File

@ -814,10 +814,6 @@ static void normal_compress(float out[3],
}
}
/**
* This function converts an object space normal map
* to a tangent space normal map for a given low poly mesh.
*/
void RE_bake_normal_world_to_tangent(const BakePixel pixel_array[],
const size_t num_pixels,
const int depth,

View File

@ -784,6 +784,7 @@ void RE_engine_frame_set(RenderEngine *engine, int frame, float subframe)
}
/* Bake */
void RE_bake_engine_set_engine_parameters(Render *re, Main *bmain, Scene *scene)
{
re->scene = scene;

View File

@ -121,7 +121,6 @@ static float filt_mitchell(float x) /* Mitchell & Netravali's two-param cubic */
return 0.0f;
}
/* x ranges from -1 to 1 */
float RE_filter_value(int type, float x)
{
float gaussfac = 1.6f;
@ -163,6 +162,7 @@ float RE_filter_value(int type, float x)
}
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
struct Object *RE_GetCamera(Render *re)
{
Object *camera = re->camera_override ? re->camera_override : re->scene->camera;
@ -174,11 +174,6 @@ void RE_SetOverrideCamera(Render *re, Object *cam_ob)
re->camera_override = cam_ob;
}
/**
* Per render, there's one persistent view-plane. Parts will set their own view-planes.
*
* \note call this after #RE_InitState().
*/
void RE_SetCamera(Render *re, Object *cam_ob)
{
CameraParams params;
@ -205,7 +200,6 @@ void RE_GetCameraWindow(struct Render *re, struct Object *camera, float r_winmat
copy_m4_m4(r_winmat, re->winmat);
}
/* Must be called after RE_GetCameraWindow(), does not change re->winmat. */
void RE_GetCameraWindowWithOverscan(struct Render *re, float overscan, float r_winmat[4][4])
{
CameraParams params;

View File

@ -338,7 +338,6 @@ Render *RE_GetRender(const char *name)
return re;
}
/* if you want to know exactly what has been done */
RenderResult *RE_AcquireResultRead(Render *re)
{
if (re) {
@ -383,7 +382,6 @@ void RE_ReleaseResult(Render *re)
}
}
/* displist.c util.... */
Scene *RE_GetScene(Render *re)
{
if (re) {
@ -399,11 +397,6 @@ void RE_SetScene(Render *re, Scene *sce)
}
}
/**
* Same as #RE_AcquireResultImage but creating the necessary views to store the result
* fill provided result struct with a copy of thew views of what is done so far the
* #RenderResult.views #ListBase needs to be freed after with #RE_ReleaseResultImageViews
*/
void RE_AcquireResultImageViews(Render *re, RenderResult *rr)
{
memset(rr, 0, sizeof(RenderResult));
@ -449,7 +442,6 @@ void RE_AcquireResultImageViews(Render *re, RenderResult *rr)
}
}
/* clear temporary renderresult struct */
void RE_ReleaseResultImageViews(Render *re, RenderResult *rr)
{
if (re) {
@ -460,9 +452,6 @@ void RE_ReleaseResultImageViews(Render *re, RenderResult *rr)
}
}
/* fill provided result struct with what's currently active or done */
/* this RenderResult struct is the only exception to the rule of a RenderResult */
/* always having at least one RenderView */
void RE_AcquireResultImage(Render *re, RenderResult *rr, const int view_id)
{
memset(rr, 0, sizeof(RenderResult));
@ -516,7 +505,6 @@ void RE_ReleaseResultImage(Render *re)
}
}
/* caller is responsible for allocating rect in correct size! */
void RE_ResultGet32(Render *re, unsigned int *rect)
{
RenderResult rres;
@ -533,8 +521,6 @@ void RE_ResultGet32(Render *re, unsigned int *rect)
RE_ReleaseResultImageViews(re, &rres);
}
/* caller is responsible for allocating rect in correct size! */
/* Only for acquired results, for lock */
void RE_AcquiredResultGet32(Render *re,
RenderResult *result,
unsigned int *rect,
@ -603,8 +589,6 @@ Render *RE_NewSceneRender(const Scene *scene)
return RE_NewRender(render_name);
}
/* called for new renders and when finishing rendering so
* we always have valid callbacks on a render */
void RE_InitRenderCB(Render *re)
{
/* set default empty callbacks */
@ -624,7 +608,6 @@ void RE_InitRenderCB(Render *re)
re->dih = re->dch = re->duh = re->sdh = re->prh = re->tbh = NULL;
}
/* only call this while you know it will remove the link too */
void RE_FreeRender(Render *re)
{
if (re->engine) {
@ -655,7 +638,6 @@ void RE_FreeRender(Render *re)
MEM_freeN(re);
}
/* exit blender */
void RE_FreeAllRender(void)
{
while (RenderGlobal.renderlist.first) {
@ -668,7 +650,6 @@ void RE_FreeAllRender(void)
#endif
}
/* on file load, free all re */
void RE_FreeAllRenderResults(void)
{
Render *re;
@ -769,8 +750,6 @@ void render_copy_renderdata(RenderData *to, RenderData *from)
BKE_curvemapping_copy_data(&to->mblur_shutter_curve, &from->mblur_shutter_curve);
}
/* what doesn't change during entire render sequence */
/* disprect is optional, if NULL it assumes full window render */
void RE_InitState(Render *re,
Render *source,
RenderData *rd,
@ -874,8 +853,6 @@ void RE_InitState(Render *re,
RE_point_density_fix_linking();
}
/* update some variables that can be animated, and otherwise wouldn't be due to
* RenderData getting copied once at the start of animation render */
void render_update_anim_renderdata(Render *re, RenderData *rd, ListBase *render_layers)
{
/* filter */
@ -897,7 +874,6 @@ void render_update_anim_renderdata(Render *re, RenderData *rd, ListBase *render_
BLI_duplicatelist(&re->r.views, &rd->views);
}
/* image and movie output has to move to either imbuf or kernel */
void RE_display_init_cb(Render *re, void *handle, void (*f)(void *handle, RenderResult *rr))
{
re->display_init = f;
@ -1834,7 +1810,6 @@ static void render_pipeline_free(Render *re)
}
}
/* general Blender frame render call */
void RE_RenderFrame(Render *re,
Main *bmain,
Scene *scene,
@ -2280,7 +2255,6 @@ static void re_movie_free_all(Render *re, bMovieHandle *mh, int totvideos)
MEM_SAFE_FREE(re->movie_ctx_arr);
}
/* saves images to disk */
void RE_RenderAnim(Render *re,
Main *bmain,
Scene *scene,
@ -2583,7 +2557,6 @@ void RE_PreviewRender(Render *re, Main *bmain, Scene *sce)
/* NOTE: repeated win/disprect calc... solve that nicer, also in compo. */
/* only the temp file! */
bool RE_ReadRenderResult(Scene *scene, Scene *scenode)
{
Render *re;
@ -2635,8 +2608,6 @@ void RE_init_threadcount(Render *re)
re->r.threads = BKE_render_num_threads(&re->r);
}
/* loads in image into a result, size must match
* x/y offsets are only used on a partial copy when dimensions don't match */
void RE_layer_load_from_file(
RenderLayer *layer, ReportList *reports, const char *filename, int x, int y)
{
@ -2712,7 +2683,6 @@ void RE_result_load_from_file(RenderResult *result, ReportList *reports, const c
}
}
/* Used in the interface to decide whether to show layers or passes. */
bool RE_layers_have_name(struct RenderResult *rr)
{
switch (BLI_listbase_count_at_most(&rr->layers, 2)) {
@ -2754,7 +2724,6 @@ RenderPass *RE_pass_find_by_name(volatile RenderLayer *rl, const char *name, con
return rp;
}
/* Only provided for API compatibility, don't use this in new code! */
RenderPass *RE_pass_find_by_type(volatile RenderLayer *rl, int passtype, const char *viewname)
{
#define CHECK_PASS(NAME) \
@ -2793,7 +2762,6 @@ RenderPass *RE_pass_find_by_type(volatile RenderLayer *rl, int passtype, const c
return NULL;
}
/* create a renderlayer and renderpass for grease pencil layer */
RenderPass *RE_create_gp_pass(RenderResult *rr, const char *layername, const char *viewname)
{
RenderLayer *rl = BLI_findstring(&rr->layers, layername, offsetof(RenderLayer, name));

View File

@ -34,6 +34,10 @@ extern "C" {
#endif
struct RenderLayer *render_get_active_layer(struct Render *re, struct RenderResult *rr);
/**
* Update some variables that can be animated, and otherwise wouldn't be due to
* #RenderData getting copied once at the start of animation render.
*/
void render_update_anim_renderdata(struct Render *re,
struct RenderData *rd,
struct ListBase *render_layers);

View File

@ -126,7 +126,6 @@ void render_result_free(RenderResult *rr)
MEM_freeN(rr);
}
/** Version that's compatible with full-sample buffers. */
void render_result_free_list(ListBase *lb, RenderResult *rr)
{
RenderResult *rrnext;
@ -144,7 +143,6 @@ void render_result_free_list(ListBase *lb, RenderResult *rr)
/********************************* multiview *************************************/
/* create a new views Listbase in rr without duplicating the memory pointers */
void render_result_views_shallowcopy(RenderResult *dst, RenderResult *src)
{
RenderView *rview;
@ -166,7 +164,6 @@ void render_result_views_shallowcopy(RenderResult *dst, RenderResult *src)
}
}
/* free the views created temporarily */
void render_result_views_shallowdelete(RenderResult *rr)
{
if (rr == NULL) {
@ -286,10 +283,6 @@ RenderPass *render_layer_add_pass(RenderResult *rr,
return rpass;
}
/* called by main render as well for parts */
/* will read info from Render *re to define layers */
/* called in threads */
/* re->winx,winy is coordinate space of entire image, partrct the part within */
RenderResult *render_result_new(Render *re,
rcti *partrct,
const char *layername,
@ -733,10 +726,6 @@ static int order_render_passes(const void *a, const void *b)
return (rpa->view_id < rpb->view_id);
}
/**
* From imbuf, if a handle was returned and
* it's not a single-layer multi-view we convert this to render result.
*/
RenderResult *render_result_new_from_exr(
void *exrhandle, const char *colorspace, bool predivide, int rectx, int recty)
{
@ -837,9 +826,6 @@ static void do_merge_tile(
}
}
/* used when rendering to a full buffer, or when reading the exr part-layer-pass file */
/* no test happens here if it fits... we also assume layers are in sync */
/* is used within threads */
void render_result_merge(RenderResult *rr, RenderResult *rrpart)
{
RenderLayer *rl, *rlp;
@ -869,8 +855,6 @@ void render_result_merge(RenderResult *rr, RenderResult *rrpart)
}
}
/* Called from the UI and render pipeline, to save multilayer and multiview
* images, optionally isolating a specific, view, layer or RGBA/Z pass. */
bool RE_WriteRenderResult(ReportList *reports,
RenderResult *rr,
const char *filename,
@ -1040,7 +1024,6 @@ void render_result_single_layer_begin(Render *re)
re->result = NULL;
}
/* if scemode is R_SINGLE_LAYER, at end of rendering, merge the both render results */
void render_result_single_layer_end(Render *re)
{
ViewLayer *view_layer;
@ -1085,7 +1068,6 @@ void render_result_single_layer_end(Render *re)
re->pushedresult = NULL;
}
/* called for reading temp files, and for external engines */
int render_result_exr_file_read_path(RenderResult *rr,
RenderLayer *rl_single,
const char *filepath)
@ -1184,7 +1166,6 @@ void render_result_exr_file_cache_write(Render *re)
RE_WriteRenderResult(NULL, rr, str, NULL, NULL, -1);
}
/* For cache, makes exact copy of render result */
bool render_result_exr_file_cache_read(Render *re)
{
/* File path to cache. */

View File

@ -46,6 +46,12 @@ extern "C" {
/* New */
/**
* Called by main render as well for parts will read info from Render *re to define layers.
* \note Called in threads.
*
* `re->winx`, `re->winy` is coordinate space of entire image, `partrct` the part within.
*/
struct RenderResult *render_result_new(struct Render *re,
struct rcti *partrct,
const char *layername,
@ -53,6 +59,10 @@ struct RenderResult *render_result_new(struct Render *re,
void render_result_passes_allocated_ensure(struct RenderResult *rr);
/**
* From imbuf, if a handle was returned and
* it's not a single-layer multi-view we convert this to render result.
*/
struct RenderResult *render_result_new_from_exr(
void *exrhandle, const char *colorspace, bool predivide, int rectx, int recty);
@ -61,6 +71,11 @@ void render_result_views_new(struct RenderResult *rr, const struct RenderData *r
/* Merge */
/**
* Used when rendering to a full buffer, or when reading the EXR part-layer-pass file.
* no test happens here if it fits... we also assume layers are in sync.
* \note Is used within threads.
*/
void render_result_merge(struct RenderResult *rr, struct RenderResult *rrpart);
/* Add Passes */
@ -70,14 +85,22 @@ void render_result_clone_passes(struct Render *re, struct RenderResult *rr, cons
/* Free */
void render_result_free(struct RenderResult *rr);
/**
* Version that's compatible with full-sample buffers.
*/
void render_result_free_list(struct ListBase *lb, struct RenderResult *rr);
/* Single Layer Render */
void render_result_single_layer_begin(struct Render *re);
/**
* If #RenderData.scemode is #R_SINGLE_LAYER, at end of rendering, merge the both render results.
*/
void render_result_single_layer_end(struct Render *re);
/* render pass wrapper for gpencil */
/**
* Render pass wrapper for grease-pencil.
*/
struct RenderPass *render_layer_add_pass(struct RenderResult *rr,
struct RenderLayer *rl,
int channels,
@ -86,6 +109,9 @@ struct RenderPass *render_layer_add_pass(struct RenderResult *rr,
const char *chan_id,
const bool allocate);
/**
* Called for reading temp files, and for external engines.
*/
int render_result_exr_file_read_path(struct RenderResult *rr,
struct RenderLayer *rl_single,
const char *filepath);
@ -93,6 +119,9 @@ int render_result_exr_file_read_path(struct RenderResult *rr,
/* EXR cache */
void render_result_exr_file_cache_write(struct Render *re);
/**
* For cache, makes exact copy of render result.
*/
bool render_result_exr_file_cache_read(struct Render *re);
/* Combined Pixel Rect */
@ -110,7 +139,13 @@ void render_result_rect_get_pixels(struct RenderResult *rr,
const struct ColorManagedDisplaySettings *display_settings,
const int view_id);
/**
* Create a new views #ListBase in rr without duplicating the memory pointers.
*/
void render_result_views_shallowcopy(struct RenderResult *dst, struct RenderResult *src);
/**
* Free the views created temporarily.
*/
void render_result_views_shallowdelete(struct RenderResult *rr);
bool render_result_has_views(const struct RenderResult *rr);

View File

@ -928,9 +928,6 @@ static void point_density_sample_func(void *__restrict data_v,
}
}
/* NOTE 1: Requires RE_point_density_cache() to be called first.
* NOTE 2: Frees point density structure after sampling.
*/
void RE_point_density_sample(Depsgraph *depsgraph,
PointDensity *pd,
const int resolution,

View File

@ -1399,9 +1399,6 @@ static int multitex_nodes_intern(Tex *tex,
use_nodes);
}
/* this is called from the shader and texture nodes
* Use it from render pipeline only!
*/
int multitex_nodes(Tex *tex,
const float texvec[3],
float dxt[3],
@ -1429,13 +1426,6 @@ int multitex_nodes(Tex *tex,
true);
}
/**
* \warning if the texres's values are not declared zero,
* check the return value to be sure the color values are set before using the r/g/b values,
* otherwise you may use uninitialized values - Campbell
*
* Use it for stuff which is out of render pipeline.
*/
int multitex_ext(Tex *tex,
float texvec[3],
float dxt[3],
@ -1463,10 +1453,6 @@ int multitex_ext(Tex *tex,
true);
}
/* extern-tex doesn't support nodes (ntreeBeginExec() can't be called when rendering is going on)\
*
* Use it for stuff which is out of render pipeline.
*/
int multitex_ext_safe(Tex *tex,
const float texvec[3],
TexResult *texres,
@ -1492,8 +1478,6 @@ int multitex_ext_safe(Tex *tex,
/* ------------------------------------------------------------------------- */
/* in = destination, tex = texture, out = previous color */
/* fact = texture strength, facg = button strength value */
void texture_rgb_blend(
float in[3], const float tex[3], const float out[3], float fact, float facg, int blendtype)
{
@ -1722,11 +1706,6 @@ float texture_value_blend(float tex, float out, float fact, float facg, int blen
/* ------------------------------------------------------------------------- */
/**
* \param pool: Thread pool, may be NULL.
*
* \return True if the texture has color, otherwise false.
*/
bool RE_texture_evaluate(const MTex *mtex,
const float vec[3],
const int thread,

View File

@ -41,7 +41,6 @@
/* ****************** Spans ******************************* */
/* each zbuffer has coordinates transformed to local rect coordinates, so we can simply clip */
void zbuf_alloc_span(ZSpan *zspan, int rectx, int recty)
{
memset(zspan, 0, sizeof(ZSpan));
@ -170,9 +169,6 @@ static void zbuf_add_to_span(ZSpan *zspan, const float v1[2], const float v2[2])
/* Functions */
/*-----------------------------------------------------------*/
/* Scan-convert for strand triangles, calls function for each x, y coordinate
* and gives UV barycentrics and z. */
void zspan_scanconvert(ZSpan *zspan,
void *handle,
float *v1,

View File

@ -33,9 +33,16 @@ typedef struct ZSpan {
float *span1, *span2;
} ZSpan;
/**
* Each Z-buffer has coordinates transformed to local rect coordinates, so we can simply clip.
*/
void zbuf_alloc_span(struct ZSpan *zspan, int rectx, int recty);
void zbuf_free_span(struct ZSpan *zspan);
/**
* Scan-convert for strand triangles, calls function for each x, y coordinate
* and gives UV barycentrics and z.
*/
void zspan_scanconvert(struct ZSpan *zspan,
void *handle,
float *v1,