Depsgraph: remove engine type from evaluation context.

This was only used for viewport rendering, where we can just pass the engine
type directly. There is no technical reason why we can't draw the same depsgrpah
with different render engines.

It also led to some weird things like requiring a render engine for snapping
and raycast API functions.

Differential Revision: https://developer.blender.org/D3145
This commit is contained in:
Brecht Van Lommel
2018-04-06 10:55:11 +02:00
parent 340bfdef2e
commit eec5d3a8a8
22 changed files with 67 additions and 66 deletions

View File

@@ -40,6 +40,7 @@ struct GPUFX;
struct ImBuf;
struct Main;
struct Mask;
struct RenderEngineType;
struct Scene;
struct Sequence;
struct SequenceModifierData;
@@ -435,7 +436,8 @@ enum {
typedef struct ImBuf *(*SequencerDrawView)(
const struct EvaluationContext *eval_ctx, struct Scene *scene,
struct ViewLayer *view_layer, struct Object *camera, int width, int height,
struct ViewLayer *view_layer, struct RenderEngineType *engine_type,
struct Object *camera, int width, int height,
unsigned int flag, unsigned int draw_flags, int drawtype, int alpha_mode,
int samples, const char *viewname,
struct GPUOffScreen *ofs, char err_out[256]);

View File

@@ -1273,9 +1273,8 @@ void CTX_data_eval_ctx(const bContext *C, EvaluationContext *eval_ctx)
Scene *scene = CTX_data_scene(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
RenderEngineType *engine_type = CTX_data_engine_type(C);
DEG_evaluation_context_init_from_scene(
eval_ctx,
scene, view_layer, engine_type,
scene, view_layer,
DAG_EVAL_VIEWPORT);
}

View File

@@ -3332,12 +3332,13 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, Sequence *seq
context->scene->r.seq_prev_type = 3 /* == OB_SOLID */;
/* opengl offscreen render */
context->eval_ctx->engine_type = RE_engines_find(scene->view_render.engine_id);
RenderEngineType *engine_type = RE_engines_find(scene->view_render.engine_id);
depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
BKE_scene_graph_update_for_newframe(context->eval_ctx, depsgraph, context->bmain, scene, view_layer);
ibuf = sequencer_view3d_cb(
/* set for OpenGL render (NULL when scrubbing) */
context->eval_ctx, scene, view_layer, camera, width, height, IB_rect,
context->eval_ctx, scene, view_layer, engine_type,
camera, width, height, IB_rect,
draw_flags, context->scene->r.seq_prev_type,
scene->r.alphamode, context->gpu_samples, viewname,
context->gpu_offscreen, err_out);

View File

@@ -86,7 +86,6 @@ typedef struct EvaluationContext {
struct Depsgraph *depsgraph;
struct ViewLayer *view_layer;
struct RenderEngineType *engine_type;
} EvaluationContext;
/* DagNode->eval_flags */
@@ -219,7 +218,6 @@ void DEG_evaluation_context_init_from_scene(
struct EvaluationContext *eval_ctx,
struct Scene *scene,
struct ViewLayer *view_layer,
struct RenderEngineType *engine_type,
eEvaluationMode mode);
void DEG_evaluation_context_init_from_view_layer_for_render(

View File

@@ -83,13 +83,11 @@ void DEG_evaluation_context_init_from_scene(
EvaluationContext *eval_ctx,
Scene *scene,
ViewLayer *view_layer,
RenderEngineType *engine_type,
eEvaluationMode mode)
{
DEG_evaluation_context_init(eval_ctx, mode);
eval_ctx->depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
eval_ctx->view_layer = view_layer;
eval_ctx->engine_type = engine_type;
eval_ctx->ctime = BKE_scene_frame_get(scene);
}
@@ -107,7 +105,6 @@ void DEG_evaluation_context_init_from_view_layer_for_render(
eval_ctx->ctime = BKE_scene_frame_get(scene);
eval_ctx->depsgraph = depsgraph;
eval_ctx->view_layer = view_layer_original;
eval_ctx->engine_type = NULL;
}
void DEG_evaluation_context_init_from_depsgraph(
@@ -120,7 +117,6 @@ void DEG_evaluation_context_init_from_depsgraph(
eval_ctx->ctime = (float)scene->r.cfra + scene->r.subframe;
eval_ctx->depsgraph = depsgraph;
eval_ctx->view_layer = DEG_get_evaluated_view_layer(depsgraph);
eval_ctx->engine_type = NULL;
}
/* Free evaluation context. */

View File

@@ -357,7 +357,6 @@ static void drw_state_eval_ctx_init(DRWManager *dst)
&draw_ctx->eval_ctx,
draw_ctx->scene,
draw_ctx->view_layer,
draw_ctx->engine_type,
DST.options.is_scene_render ? DAG_EVAL_RENDER : DAG_EVAL_VIEWPORT);
}

View File

@@ -998,7 +998,7 @@ static int sk_getStrokeSnapPoint(bContext *C, SK_Point *pt, SK_Sketch *sketch, S
* the ideal would be to call this function only at the beginning of the snap operation,
* or at the beginning of the operator itself */
struct SnapObjectContext *snap_context = ED_transform_snap_object_context_create_view3d(
CTX_data_main(C), CTX_data_scene(C), CTX_data_view_layer(C), CTX_data_engine_type(C), 0,
CTX_data_main(C), CTX_data_scene(C), CTX_data_view_layer(C), 0,
CTX_wm_region(C), CTX_wm_view3d(C));
float mvalf[2] = {UNPACK2(dd->mval)};

View File

@@ -5013,8 +5013,7 @@ static int add_vertex_invoke(bContext *C, wmOperator *op, const wmEvent *event)
const float mval[2] = {UNPACK2(event->mval)};
struct SnapObjectContext *snap_context = ED_transform_snap_object_context_create_view3d(
CTX_data_main(C), vc.scene, vc.view_layer, vc.engine_type, 0,
vc.ar, vc.v3d);
CTX_data_main(C), vc.scene, vc.view_layer, 0, vc.ar, vc.v3d);
ED_transform_snap_object_project_view3d_mixed(
snap_context,

View File

@@ -30,7 +30,6 @@ struct BMEdge;
struct BMFace;
struct ListBase;
struct RenderEngineType;
struct Scene;
struct ViewLayer;
struct Main;
@@ -76,9 +75,9 @@ struct SnapObjectParams {
typedef struct SnapObjectContext SnapObjectContext;
SnapObjectContext *ED_transform_snap_object_context_create(
struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct RenderEngineType *engine_type, int flag);
struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, int flag);
SnapObjectContext *ED_transform_snap_object_context_create_view3d(
struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct RenderEngineType *engine_type, int flag,
struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, int flag,
/* extra args for view3d */
const struct ARegion *ar, const struct View3D *v3d);
void ED_transform_snap_object_context_destroy(SnapObjectContext *sctx);

View File

@@ -383,10 +383,12 @@ void ED_draw_object_facemap(const struct EvaluationContext *eval_ctx, struct Sc
bool ED_view3d_context_activate(struct bContext *C);
void ED_view3d_draw_offscreen_init(
const struct EvaluationContext *eval_ctx, struct Scene *scene,
struct ViewLayer *view_layer, struct View3D *v3d);
struct ViewLayer *view_layer, struct RenderEngineType *engine_type,
struct View3D *v3d);
void ED_view3d_draw_offscreen(
const struct EvaluationContext *eval_ctx, struct Scene *scene,
struct ViewLayer *view_layer, struct View3D *v3d, struct ARegion *ar, int winx, int winy, float viewmat[4][4],
struct ViewLayer *view_layer, struct RenderEngineType *engine_type,
struct View3D *v3d, struct ARegion *ar, int winx, int winy, float viewmat[4][4],
float winmat[4][4], bool do_bgpic, bool do_sky, bool is_persp, const char *viewname,
struct GPUFXSettings *fx_settings,
struct GPUOffScreen *ofs, struct GPUViewport *viewport);
@@ -408,13 +410,15 @@ enum {
struct ImBuf *ED_view3d_draw_offscreen_imbuf(
const struct EvaluationContext *eval_ctx, struct Scene *scene,
struct ViewLayer *view_layer, struct View3D *v3d, struct ARegion *ar,
struct ViewLayer *view_layer, struct RenderEngineType *engine_type,
struct View3D *v3d, struct ARegion *ar,
int sizex, int sizey, unsigned int flag, unsigned int draw_flags,
int alpha_mode, int samples, const char *viewname,
struct GPUOffScreen *ofs, char err_out[256]);
struct ImBuf *ED_view3d_draw_offscreen_imbuf_simple(
const struct EvaluationContext *eval_ctx, struct Scene *scene,
struct ViewLayer *view_layer, struct Object *camera, int width, int height,
struct ViewLayer *view_layer, struct RenderEngineType *engine_type,
struct Object *camera, int width, int height,
unsigned int flag, unsigned int draw_flags, int drawtype, int alpha_mode,
int samples, const char *viewname,
struct GPUOffScreen *ofs, char err_out[256]);

View File

@@ -326,7 +326,7 @@ void EMBM_project_snap_verts(bContext *C, ARegion *ar, BMEditMesh *em)
ED_view3d_init_mats_rv3d(obedit, ar->regiondata);
struct SnapObjectContext *snap_context = ED_transform_snap_object_context_create_view3d(
CTX_data_main(C), CTX_data_scene(C), CTX_data_view_layer(C), CTX_data_engine_type(C), 0,
CTX_data_main(C), CTX_data_scene(C), CTX_data_view_layer(C), 0,
ar, CTX_wm_view3d(C));
BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {

View File

@@ -353,6 +353,7 @@ static void screen_opengl_render_doit(const bContext *C, OGLRender *oglrender, R
char err_out[256] = "unknown";
ImBuf *ibuf_view;
const int alpha_mode = (draw_sky) ? R_ADDSKY : R_ALPHAPREMUL;
struct RenderEngineType *engine_type = CTX_data_engine_type(C);
unsigned int draw_flags = V3D_OFSDRAW_NONE;
draw_flags |= (oglrender->ofs_full_samples) ? V3D_OFSDRAW_USE_FULL_SAMPLE : 0;
@@ -361,7 +362,8 @@ static void screen_opengl_render_doit(const bContext *C, OGLRender *oglrender, R
draw_flags |= (draw_bgpic) ? V3D_OFSDRAW_USE_BACKGROUND : 0;
ibuf_view = ED_view3d_draw_offscreen_imbuf(
&eval_ctx, scene, view_layer, v3d, ar, sizex, sizey,
&eval_ctx, scene, view_layer, engine_type,
v3d, ar, sizex, sizey,
IB_rectfloat, draw_flags, alpha_mode, oglrender->ofs_samples, viewname,
oglrender->ofs, err_out);
@@ -373,7 +375,8 @@ static void screen_opengl_render_doit(const bContext *C, OGLRender *oglrender, R
else {
draw_flags |= (V3D_OFSDRAW_USE_GPENCIL | V3D_OFSDRAW_USE_BACKGROUND);
ibuf_view = ED_view3d_draw_offscreen_imbuf_simple(
&eval_ctx, scene, view_layer, scene->camera, oglrender->sizex, oglrender->sizey,
&eval_ctx, scene, view_layer, engine_type,
scene->camera, oglrender->sizex, oglrender->sizey,
IB_rectfloat, draw_flags, OB_SOLID,
alpha_mode, oglrender->ofs_samples, viewname,
oglrender->ofs, err_out);

View File

@@ -5459,6 +5459,7 @@ static int texture_paint_image_from_view_exec(bContext *C, wmOperator *op)
Scene *scene = CTX_data_scene(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
struct RenderEngineType *engine_type = CTX_data_engine_type(C);
EvaluationContext eval_ctx;
ToolSettings *settings = scene->toolsettings;
int w = settings->imapaint.screen_grab_size[0];
@@ -5476,7 +5477,8 @@ static int texture_paint_image_from_view_exec(bContext *C, wmOperator *op)
if (h > maxsize) h = maxsize;
ibuf = ED_view3d_draw_offscreen_imbuf(
&eval_ctx, scene, view_layer, CTX_wm_view3d(C), CTX_wm_region(C),
&eval_ctx, scene, view_layer, engine_type,
CTX_wm_view3d(C), CTX_wm_region(C),
w, h, IB_rect, V3D_OFSDRAW_NONE, R_ALPHAPREMUL, 0, NULL,
NULL, err_out);
if (!ibuf) {

View File

@@ -1957,9 +1957,12 @@ static void view3d_stereo3d_setup_offscreen(
}
}
void ED_view3d_draw_offscreen_init(const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer, View3D *v3d)
void ED_view3d_draw_offscreen_init(const EvaluationContext *eval_ctx,
Scene *scene,
ViewLayer *view_layer,
RenderEngineType *engine_type,
View3D *v3d)
{
RenderEngineType *engine_type = eval_ctx->engine_type;
if (engine_type->flag & RE_USE_LEGACY_PIPELINE) {
/* shadow buffers, before we setup matrices */
if (draw_glsl_material(scene, view_layer, NULL, v3d, v3d->drawtype)) {
@@ -1987,7 +1990,8 @@ static void view3d_main_region_clear(Scene *scene, View3D *v3d, ARegion *ar)
* stuff like shadow buffers
*/
void ED_view3d_draw_offscreen(
const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer,
const EvaluationContext *eval_ctx, Scene *scene,
ViewLayer *view_layer, RenderEngineType *engine_type,
View3D *v3d, ARegion *ar, int winx, int winy,
float viewmat[4][4], float winmat[4][4],
bool do_bgpic, bool do_sky, bool UNUSED(is_persp), const char *viewname,
@@ -2034,7 +2038,6 @@ void ED_view3d_draw_offscreen(
Depsgraph *depsgraph = eval_ctx->depsgraph;
/* main drawing call */
RenderEngineType *engine_type = eval_ctx->engine_type;
if (engine_type->flag & RE_USE_LEGACY_PIPELINE) {
VP_deprecated_view3d_draw_objects(NULL, eval_ctx, scene, v3d, ar, NULL, do_bgpic, true);
@@ -2053,7 +2056,7 @@ void ED_view3d_draw_offscreen(
}
else {
DRW_draw_render_loop_offscreen(
depsgraph, eval_ctx->engine_type, ar, v3d,
depsgraph, engine_type, ar, v3d,
do_sky, ofs, viewport);
}
@@ -2077,7 +2080,8 @@ void ED_view3d_draw_offscreen(
* (avoids re-creating when doing multiple GL renders).
*/
ImBuf *ED_view3d_draw_offscreen_imbuf(
const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer,
const EvaluationContext *eval_ctx, Scene *scene,
ViewLayer *view_layer, RenderEngineType *engine_type,
View3D *v3d, ARegion *ar, int sizex, int sizey,
unsigned int flag, unsigned int draw_flags,
int alpha_mode, int samples, const char *viewname,
@@ -2112,7 +2116,7 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(
}
}
ED_view3d_draw_offscreen_init(eval_ctx, scene, view_layer, v3d);
ED_view3d_draw_offscreen_init(eval_ctx, scene, view_layer, engine_type, v3d);
GPU_offscreen_bind(ofs, true);
@@ -2154,7 +2158,8 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(
if ((samples && use_full_sample) == 0) {
/* Single-pass render, common case */
ED_view3d_draw_offscreen(
eval_ctx, scene, view_layer, v3d, ar, sizex, sizey, NULL, winmat,
eval_ctx, scene, view_layer, engine_type,
v3d, ar, sizex, sizey, NULL, winmat,
draw_background, draw_sky, !is_ortho, viewname,
&fx_settings, ofs, NULL);
@@ -2178,7 +2183,8 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(
/* first sample buffer, also initializes 'rv3d->persmat' */
ED_view3d_draw_offscreen(
eval_ctx, scene, view_layer, v3d, ar, sizex, sizey, NULL, winmat,
eval_ctx, scene, view_layer, engine_type,
v3d, ar, sizex, sizey, NULL, winmat,
draw_background, draw_sky, !is_ortho, viewname,
&fx_settings, ofs, viewport);
GPU_offscreen_read_pixels(ofs, GL_FLOAT, accum_buffer);
@@ -2192,7 +2198,8 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(
(jit_ofs[j][1] * 2.0f) / sizey);
ED_view3d_draw_offscreen(
eval_ctx, scene, view_layer, v3d, ar, sizex, sizey, NULL, winmat_jitter,
eval_ctx, scene, view_layer, engine_type,
v3d, ar, sizex, sizey, NULL, winmat_jitter,
draw_background, draw_sky, !is_ortho, viewname,
&fx_settings, ofs, viewport);
GPU_offscreen_read_pixels(ofs, GL_FLOAT, rect_temp);
@@ -2255,7 +2262,8 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(
* \note used by the sequencer
*/
ImBuf *ED_view3d_draw_offscreen_imbuf_simple(
const EvaluationContext *eval_ctx, Scene *scene, ViewLayer *view_layer,
const EvaluationContext *eval_ctx, Scene *scene,
ViewLayer *view_layer, RenderEngineType *engine_type,
Object *camera, int width, int height,
unsigned int flag, unsigned int draw_flags, int drawtype,
int alpha_mode, int samples, const char *viewname,
@@ -2317,7 +2325,8 @@ ImBuf *ED_view3d_draw_offscreen_imbuf_simple(
invert_m4_m4(rv3d.persinv, rv3d.viewinv);
return ED_view3d_draw_offscreen_imbuf(
eval_ctx, scene, view_layer, &v3d, &ar, width, height, flag,
eval_ctx, scene, view_layer, engine_type,
&v3d, &ar, width, height, flag,
draw_flags, alpha_mode, samples, viewname, ofs, err_out);
}

View File

@@ -1420,9 +1420,12 @@ static void gpu_update_lamps_shadows_world(const EvaluationContext *eval_ctx, Sc
mul_m4_m4m4(rv3d.persmat, rv3d.winmat, rv3d.viewmat);
invert_m4_m4(rv3d.persinv, rv3d.viewinv);
RenderEngineType *engine_type = RE_engines_find(scene->view_render.engine_id);
/* no need to call ED_view3d_draw_offscreen_init since shadow buffers were already updated */
ED_view3d_draw_offscreen(
eval_ctx, scene, eval_ctx->view_layer, v3d, &ar, winsize, winsize, viewmat, winmat,
eval_ctx, scene, eval_ctx->view_layer, engine_type,
v3d, &ar, winsize, winsize, viewmat, winmat,
false, false, true,
NULL, NULL, NULL, NULL);
GPU_lamp_shadow_buffer_unbind(shadow->lamp);

View File

@@ -277,7 +277,7 @@ static void ruler_state_set(bContext *C, RulerInfo *ruler_info, int state)
}
else if (state == RULER_STATE_DRAG) {
ruler_info->snap_context = ED_transform_snap_object_context_create_view3d(
CTX_data_main(C), CTX_data_scene(C), CTX_data_view_layer(C), CTX_data_engine_type(C), 0,
CTX_data_main(C), CTX_data_scene(C), CTX_data_view_layer(C), 0,
ruler_info->ar, CTX_wm_view3d(C));
}
else {

View File

@@ -282,7 +282,7 @@ static void ruler_state_set(bContext *C, RulerInfo *ruler_info, int state)
}
else if (state == RULER_STATE_DRAG) {
ruler_info->snap_context = ED_transform_snap_object_context_create_view3d(
CTX_data_main(C), CTX_data_scene(C), CTX_data_view_layer(C), CTX_data_engine_type(C), 0,
CTX_data_main(C), CTX_data_scene(C), CTX_data_view_layer(C), 0,
ruler_info->ar, CTX_wm_view3d(C));
}
else {

View File

@@ -58,8 +58,6 @@
#include "GPU_immediate.h"
#include "RE_engine.h"
#include "DEG_depsgraph.h"
#include "view3d_intern.h" /* own include */
@@ -254,7 +252,6 @@ typedef struct WalkInfo {
const struct Depsgraph *depsgraph;
Scene *scene;
ViewLayer *view_layer;
RenderEngineType *engine_type;
wmTimer *timer; /* needed for redraws */
@@ -522,7 +519,6 @@ static bool initWalkInfo(bContext *C, WalkInfo *walk, wmOperator *op)
walk->depsgraph = CTX_data_depsgraph(C);
walk->scene = CTX_data_scene(C);
walk->view_layer = CTX_data_view_layer(C);
walk->engine_type = CTX_data_engine_type(C);
#ifdef NDOF_WALK_DEBUG
puts("\n-- walk begin --");
@@ -611,7 +607,7 @@ static bool initWalkInfo(bContext *C, WalkInfo *walk, wmOperator *op)
walk->rv3d->rflag |= RV3D_NAVIGATING;
walk->snap_context = ED_transform_snap_object_context_create_view3d(
CTX_data_main(C), walk->scene, walk->view_layer, walk->engine_type, 0,
CTX_data_main(C), walk->scene, walk->view_layer, 0,
walk->ar, walk->v3d);
walk->v3d_camera_control = ED_view3d_cameracontrol_acquire(

View File

@@ -584,8 +584,7 @@ static void initSnappingMode(TransInfo *t)
if (t->spacetype == SPACE_VIEW3D) {
if (t->tsnap.object_context == NULL) {
t->tsnap.object_context = ED_transform_snap_object_context_create_view3d(
G.main, t->scene, t->view_layer, t->engine_type, 0,
t->ar, t->view);
G.main, t->scene, t->view_layer, 0, t->ar, t->view);
ED_transform_snap_object_context_set_editmesh_callbacks(
t->tsnap.object_context,

View File

@@ -2079,7 +2079,7 @@ static bool snapObjectsRay(
* \{ */
SnapObjectContext *ED_transform_snap_object_context_create(
Main *bmain, Scene *scene, ViewLayer *view_layer, RenderEngineType *engine_type, int flag)
Main *bmain, Scene *scene, ViewLayer *view_layer, int flag)
{
SnapObjectContext *sctx = MEM_callocN(sizeof(*sctx), __func__);
@@ -2089,7 +2089,7 @@ SnapObjectContext *ED_transform_snap_object_context_create(
sctx->scene = scene;
DEG_evaluation_context_init_from_scene(
&sctx->eval_ctx, scene, view_layer, engine_type, DAG_EVAL_VIEWPORT);
&sctx->eval_ctx, scene, view_layer, DAG_EVAL_VIEWPORT);
sctx->cache.object_map = BLI_ghash_ptr_new(__func__);
sctx->cache.mem_arena = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, __func__);
@@ -2098,11 +2098,11 @@ SnapObjectContext *ED_transform_snap_object_context_create(
}
SnapObjectContext *ED_transform_snap_object_context_create_view3d(
Main *bmain, Scene *scene, ViewLayer *view_layer, RenderEngineType *engine_type, int flag,
Main *bmain, Scene *scene, ViewLayer *view_layer, int flag,
/* extra args for view3d */
const ARegion *ar, const View3D *v3d)
{
SnapObjectContext *sctx = ED_transform_snap_object_context_create(bmain, scene, view_layer, engine_type, flag);
SnapObjectContext *sctx = ED_transform_snap_object_context_create(bmain, scene, view_layer, flag);
sctx->use_v3d = true;
sctx->v3d_data.ar = ar;

View File

@@ -171,24 +171,15 @@ static void rna_SceneRender_get_frame_path(RenderData *rd, int frame, int previe
}
static void rna_Scene_ray_cast(
Scene *scene, ViewLayer *view_layer, const char *engine_id,
Scene *scene, ViewLayer *view_layer,
float origin[3], float direction[3], float ray_dist,
int *r_success, float r_location[3], float r_normal[3], int *r_index,
Object **r_ob, float r_obmat[16])
{
RenderEngineType *engine_type;
if (engine_id == NULL || engine_id[0] == '\0') {
engine_type = RE_engines_find(scene->view_render.engine_id);
}
else {
engine_type = RE_engines_find(engine_id);
}
normalize_v3(direction);
SnapObjectContext *sctx = ED_transform_snap_object_context_create(
G.main, scene, view_layer, engine_type, 0);
G.main, scene, view_layer, 0);
bool ret = ED_transform_snap_object_project_ray_ex(
sctx,
@@ -322,7 +313,6 @@ void RNA_api_scene(StructRNA *srna)
RNA_def_function_ui_description(func, "Cast a ray onto in object space");
parm = RNA_def_pointer(func, "view_layer", "ViewLayer", "", "Scene Layer");
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
parm = RNA_def_string(func, "engine", NULL, MAX_NAME, "Engine", "Render engine, use scene one by default");
/* ray start and end */
parm = RNA_def_float_vector(func, "origin", 3, NULL, -FLT_MAX, FLT_MAX, "", "", -1e4, 1e4);
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);

View File

@@ -1052,16 +1052,18 @@ static ImBuf *blend_file_thumb(const bContext *C, Scene *scene, ViewLayer *view_
}
/* gets scaled to BLEN_THUMB_SIZE */
RenderEngineType *engine_type = CTX_data_engine_type(C);
if (scene->camera) {
ibuf = ED_view3d_draw_offscreen_imbuf_simple(
&eval_ctx, scene, view_layer, scene->camera,
&eval_ctx, scene, view_layer, engine_type, scene->camera,
BLEN_THUMB_SIZE * 2, BLEN_THUMB_SIZE * 2,
IB_rect, V3D_OFSDRAW_NONE, OB_SOLID, R_ALPHAPREMUL, 0, NULL,
NULL, err_out);
}
else {
ibuf = ED_view3d_draw_offscreen_imbuf(
&eval_ctx, scene, view_layer, v3d, ar,
&eval_ctx, scene, view_layer, engine_type, v3d, ar,
BLEN_THUMB_SIZE * 2, BLEN_THUMB_SIZE * 2,
IB_rect, V3D_OFSDRAW_NONE, R_ALPHAPREMUL, 0, NULL,
NULL, err_out);