diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2015-06-29 17:41:00 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2015-06-29 18:18:11 +0300 |
commit | d140e70c496122915eb5c05aba83153e2e0d7998 (patch) | |
tree | 1e589247d69da64aa7b0e7802319237ec050b5d6 /source/blender/render/extern | |
parent | 147bd16ed1bb3415b30408b0eab110d0854eadd2 (diff) | |
parent | 295d0c52a26730edc6d4ed1276e4051cce006be5 (diff) |
Merge branch 'master' into temp-ghash-experimentstemp-ghash-experiments
Note that 'store hash' feature was removed for now - to complex to maintain (conflicts)
and relatively easy to re-add if we ever really want this one day.
Conflicts:
source/blender/blenlib/BLI_ghash.h
source/blender/blenlib/intern/BLI_ghash.c
source/blender/blenlib/intern/hash_mm2a.c
source/blender/bmesh/tools/bmesh_region_match.c
tests/gtests/blenlib/BLI_ghash_performance_test.cc
tests/gtests/blenlib/BLI_ghash_test.cc
tests/gtests/blenlib/CMakeLists.txt
Diffstat (limited to 'source/blender/render/extern')
-rw-r--r-- | source/blender/render/extern/include/RE_bake.h | 10 | ||||
-rw-r--r-- | source/blender/render/extern/include/RE_engine.h | 11 | ||||
-rw-r--r-- | source/blender/render/extern/include/RE_pipeline.h | 71 | ||||
-rw-r--r-- | source/blender/render/extern/include/RE_render_ext.h | 2 |
4 files changed, 77 insertions, 17 deletions
diff --git a/source/blender/render/extern/include/RE_bake.h b/source/blender/render/extern/include/RE_bake.h index 481da452529..0750ea1aa28 100644 --- a/source/blender/render/extern/include/RE_bake.h +++ b/source/blender/render/extern/include/RE_bake.h @@ -32,6 +32,7 @@ #ifndef __RE_BAKE_H__ #define __RE_BAKE_H__ +struct ImBuf; struct Render; struct Mesh; @@ -49,29 +50,28 @@ typedef struct BakeImages { } BakeImages; typedef struct BakePixel { - int primitive_id; + int primitive_id, object_id; float uv[2]; float du_dx, du_dy; float dv_dx, dv_dy; } BakePixel; typedef struct BakeHighPolyData { - struct BakePixel *pixel_array; struct Object *ob; struct ModifierData *tri_mod; struct Mesh *me; char restrict_flag; + bool is_flip_object; float obmat[4][4]; float imat[4][4]; - float rotmat[4][4]; } BakeHighPolyData; /* external_engine.c */ bool RE_bake_has_engine(struct Render *re); bool RE_bake_engine( - struct Render *re, struct Object *object, const BakePixel pixel_array[], + struct Render *re, struct Object *object, const int object_id, const BakePixel pixel_array[], const size_t num_pixels, const int depth, const ScenePassType pass_type, float result[]); /* bake.c */ @@ -81,7 +81,7 @@ bool RE_bake_internal( const size_t num_pixels, const int depth, const ScenePassType pass_type, float result[]); bool RE_bake_pixels_populate_from_objects( - struct Mesh *me_low, BakePixel pixel_array_from[], + struct Mesh *me_low, BakePixel pixel_array_from[], BakePixel pixel_array_to[], BakeHighPolyData highpoly[], const int tot_highpoly, const size_t num_pixels, const bool is_custom_cage, const float cage_extrusion, float mat_low[4][4], float mat_cage[4][4], struct Mesh *me_cage); diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h index 5edf970c129..4e48060c54f 100644 --- a/source/blender/render/extern/include/RE_engine.h +++ b/source/blender/render/extern/include/RE_engine.h @@ -61,6 +61,7 @@ struct BakePixel; #define RE_USE_EXCLUDE_LAYERS 32 #define RE_USE_SAVE_BUFFERS 64 #define RE_USE_TEXTURE_PREVIEW 128 +#define RE_USE_SHADING_NODES_CUSTOM 256 /* RenderEngine.flag */ #define RE_ENGINE_ANIMATION 1 @@ -88,7 +89,7 @@ typedef struct RenderEngineType { void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Scene *scene); void (*render)(struct RenderEngine *engine, struct Scene *scene); - void (*bake)(struct RenderEngine *engine, struct Scene *scene, struct Object *object, const int pass_type, const struct BakePixel *pixel_array, const int num_pixels, const int depth, void *result); + void (*bake)(struct RenderEngine *engine, struct Scene *scene, struct Object *object, const int pass_type, const int object_id, const struct BakePixel *pixel_array, const int num_pixels, const int depth, void *result); void (*view_update)(struct RenderEngine *engine, const struct bContext *context); void (*view_draw)(struct RenderEngine *engine, const struct bContext *context); @@ -135,10 +136,14 @@ void RE_engine_free(RenderEngine *engine); 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, struct ReportList *reports, const char *filename); -struct RenderResult *RE_engine_begin_result(RenderEngine *engine, int x, int y, int w, int h, const char *layername); +struct RenderResult *RE_engine_begin_result(RenderEngine *engine, int x, int y, int w, int h, const char *layername, const char *viewname); void RE_engine_update_result(RenderEngine *engine, struct RenderResult *result); void RE_engine_end_result(RenderEngine *engine, struct RenderResult *result, int cancel, int merge_results); +void RE_engine_active_view_set(RenderEngine *engine, const char *viewname); +float RE_engine_get_camera_shift_x(RenderEngine *engine, struct Object *camera); +void RE_engine_get_camera_model_matrix(RenderEngine *engine, struct Object *camera, float *r_modelmat); + int RE_engine_test_break(RenderEngine *engine); void RE_engine_update_stats(RenderEngine *engine, const char *stats, const char *info); void RE_engine_update_progress(RenderEngine *engine, float progress); @@ -159,7 +164,7 @@ void RE_engines_exit(void); RenderEngineType *RE_engines_find(const char *idname); -void RE_engine_get_current_tiles(struct Render *re, int *total_tiles_r, rcti **tiles_r); +rcti* RE_engine_get_current_tiles(struct Render *re, int *r_total_tiles, bool *r_needs_free); struct RenderData *RE_engine_get_render_data(struct Render *re); void RE_bake_engine_set_engine_parameters(struct Render *re, struct Main *bmain, struct Scene *scene); diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h index d1b6673c792..4b6004cea3d 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -35,8 +35,10 @@ #include "DNA_listBase.h" #include "DNA_vec_types.h" +struct bMovieHandle; struct bNodeTree; struct Image; +struct ImageFormatData; struct Main; struct NodeBlurData; struct Object; @@ -46,6 +48,8 @@ struct ReportList; struct Scene; struct SceneRenderLayer; struct EnvMap; +struct RenderResult; +struct StampData; /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* this include is what is exposed of render to outside world */ @@ -65,6 +69,19 @@ typedef struct Render Render; * and how it's converted */ +typedef struct RenderView { + struct RenderView *next, *prev; + char name[64]; /* EXR_VIEW_MAXNAME */ + + /* if this exists, result of composited layers */ + float *rectf; + /* if this exists, result of composited layers */ + float *rectz; + /* optional, 32 bits version of picture, used for sequencer, ogl render and image curves */ + int *rect32; + +} RenderView; + typedef struct RenderPass { struct RenderPass *next, *prev; int passtype, channels; @@ -72,16 +89,23 @@ typedef struct RenderPass { char chan_id[8]; /* amount defined in openexr_multi.h */ float *rect; int rectx, recty; + + char internal_name[64]; /* EXR_PASS_MAXNAME */ + char view[64]; /* EXR_VIEW_MAXNAME */ + int view_id; /* quick lookup */ + int debug_type; } RenderPass; enum { RENDER_PASS_DEBUG_BVH_TRAVERSAL_STEPS = 0, + RENDER_PASS_DEBUG_BVH_TRAVERSED_INSTANCES = 1, + RENDER_PASS_DEBUG_RAY_BOUNCES = 2, }; /* a renderlayer is a full image, but with all passes and samples */ /* size of the rects is defined in RenderResult */ -/* after render, the Combined pass is in rectf, for renderlayers read from files it is a real pass */ +/* after render, the Combined pass is in combined, for renderlayers read from files it is a real pass */ typedef struct RenderLayer { struct RenderLayer *next, *prev; @@ -92,8 +116,10 @@ typedef struct RenderLayer { struct Material *mat_override; struct Group *light_override; - - float *rectf; /* 4 float, standard rgba buffer (read not above!) */ + + /* MULTIVIEW_TODO: acolrect and scolrect are not supported by multiview at the moment. + * If they are really required they should be in RenderView instead */ + float *acolrect; /* 4 float, optional transparent buffer, needs storage for display updates */ float *scolrect; /* 4 float, optional strand buffer, needs storage for display updates */ int *display_buffer; /* 4 char, optional color managed display buffer which is used when @@ -114,6 +140,9 @@ typedef struct RenderResult { int rectx, recty; short crop, sample_nr; + /* the following rect32, rectf and rectz buffers are for temporary storage only, for RenderResult structs + * created in #RE_AcquireResultImage - which do not have RenderView */ + /* optional, 32 bits version of picture, used for ogl render and image curves */ int *rect32; /* if this exists, a copy of one of layers, or result of composited layers */ @@ -129,6 +158,9 @@ typedef struct RenderResult { /* the main buffers */ ListBase layers; + /* multiView maps to a StringVector in OpenEXR */ + ListBase views; + /* allowing live updates: */ volatile rcti renrect; volatile RenderLayer *renlay; @@ -145,6 +177,8 @@ typedef struct RenderResult { /* render info text */ char *text; char *error; + + struct StampData *stamp_data; } RenderResult; @@ -183,16 +217,18 @@ void RE_FreeRenderResult(struct RenderResult *rr); struct RenderResult *RE_AcquireResultRead(struct Render *re); struct RenderResult *RE_AcquireResultWrite(struct Render *re); void RE_ReleaseResult(struct Render *re); -void RE_AcquireResultImage(struct Render *re, struct RenderResult *rr); +void RE_AcquireResultImageViews(struct Render *re, struct RenderResult *rr); +void RE_ReleaseResultImageViews(struct Render *re, struct RenderResult *rr); +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); struct RenderStats *RE_GetStats(struct Render *re); void RE_ResultGet32(struct Render *re, unsigned int *rect); -void RE_AcquiredResultGet32(struct Render *re, struct RenderResult *result, unsigned int *rect); +void RE_AcquiredResultGet32(struct Render *re, struct RenderResult *result, unsigned int *rect, const int view_id); struct RenderLayer *RE_GetRenderLayer(struct RenderResult *rr, const char *name); -float *RE_RenderLayerGetPass(struct RenderLayer *rl, int passtype); +float *RE_RenderLayerGetPass(volatile struct RenderLayer *rl, int passtype, const char *viewname); /* obligatory initialize call, disprect is optional */ void RE_InitState(struct Render *re, struct Render *source, struct RenderData *rd, @@ -203,6 +239,7 @@ void RE_ChangeModeFlag(struct Render *re, int flag, bool clear); /* set up the viewplane/perspective matrix, three choices */ struct Object *RE_GetCamera(struct Render *re); /* return camera override if set */ +void RE_SetOverrideCamera(struct Render *re, struct Object *camera); void RE_SetCamera(struct Render *re, struct Object *camera); void RE_SetEnvmapCamera(struct Render *re, struct Object *cam_ob, float viewscale, float clipsta, float clipend); void RE_SetWindow(struct Render *re, rctf *viewplane, float clipsta, float clipend); @@ -232,6 +269,11 @@ void RE_init_threadcount(Render *re); /* the main processor, assumes all was set OK! */ void RE_TileProcessor(struct Render *re); +bool RE_WriteRenderViewsImage(struct ReportList *reports, struct RenderResult *rr, struct Scene *scene, const bool stamp, char *name); +bool RE_WriteRenderViewsMovie(struct ReportList *reports, struct RenderResult *rr, struct Scene *scene, struct RenderData *rd, + struct bMovieHandle *mh, const size_t width, const size_t height, void **movie_ctx_arr, + const size_t totvideos, bool preview); + /* only RE_NewRender() needed, main Blender render calls */ void RE_BlenderFrame(struct Render *re, struct Main *bmain, struct Scene *scene, struct SceneRenderLayer *srl, struct Object *camera_override, @@ -243,6 +285,9 @@ void RE_RenderFreestyleStrokes(struct Render *re, struct Main *bmain, struct Sce void RE_RenderFreestyleExternal(struct Render *re); #endif +void RE_SetActiveRenderView(struct Render *re, const char *viewname); +const char *RE_GetActiveRenderView(struct Render *re); + /* error reporting */ void RE_SetReports(struct Render *re, struct ReportList *reports); @@ -250,7 +295,7 @@ void RE_SetReports(struct Render *re, struct ReportList *reports); void RE_PreviewRender(struct Render *re, struct Main *bmain, struct Scene *scene); bool RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode); -bool RE_WriteRenderResult(struct ReportList *reports, RenderResult *rr, const char *filename, int compress); +bool RE_WriteRenderResult(struct ReportList *reports, RenderResult *rr, const char *filename, struct ImageFormatData *imf, const bool multiview, const char *view); struct RenderResult *RE_MultilayerConvert(void *exrhandle, const char *colorspace, bool predivide, int rectx, int recty); extern const float default_envmap_layout[]; @@ -276,6 +321,10 @@ void RE_zbuf_accumulate_vecblur(struct NodeBlurData *nbd, int xsize, int ysize, int RE_seq_render_active(struct Scene *scene, struct RenderData *rd); +bool RE_layers_have_name(struct RenderResult *result); + +struct RenderPass *RE_pass_find_by_type(volatile struct RenderLayer *rl, int passtype, const char *viewname); + /* shaded view or baking options */ #define RE_BAKE_LIGHT 0 /* not listed in rna_scene.c -> can't be enabled! */ #define RE_BAKE_ALL 1 @@ -297,6 +346,7 @@ void RE_Database_Baking(struct Render *re, struct Main *bmain, struct Scene *sce void RE_DataBase_GetView(struct Render *re, float mat[4][4]); void RE_GetCameraWindow(struct Render *re, struct Object *camera, int frame, float mat[4][4]); +void RE_GetCameraModelMatrix(struct Render *re, struct Object *camera, float r_mat[4][4]); struct Scene *RE_GetScene(struct Render *re); bool RE_force_single_renderlayer(struct Scene *scene); @@ -304,5 +354,12 @@ bool RE_is_rendering_allowed(struct Scene *scene, struct Object *camera_override bool RE_allow_render_generic_object(struct Object *ob); +/******* defined in render_result.c *********/ + +bool RE_HasFakeLayer(RenderResult *res); +bool RE_RenderResult_is_stereo(RenderResult *res); +struct RenderView *RE_RenderViewGetById(struct RenderResult *res, const int view_id); +struct RenderView *RE_RenderViewGetByName(struct RenderResult *res, const char *viewname); + #endif /* __RE_PIPELINE_H__ */ diff --git a/source/blender/render/extern/include/RE_render_ext.h b/source/blender/render/extern/include/RE_render_ext.h index d76d16a641e..6adbb6d0e62 100644 --- a/source/blender/render/extern/include/RE_render_ext.h +++ b/source/blender/render/extern/include/RE_render_ext.h @@ -39,10 +39,8 @@ /* called by meshtools */ struct DerivedMesh; struct ImagePool; -struct LinkNode; struct MTex; struct Scene; -struct View3D; /* particle.c, effect.c, editmesh_modes.c and brush.c, returns 1 if rgb, 0 otherwise */ int externtex(struct MTex *mtex, const float vec[3], float *tin, float *tr, float *tg, float *tb, float *ta, const int thread, struct ImagePool *pool, const bool skip_load_image); |