Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_view3d/view3d_view.c
| Show First 20 Lines • Show All 62 Lines • ▼ Show 20 Lines | |||||
| #include "WM_api.h" | #include "WM_api.h" | ||||
| #include "WM_types.h" | #include "WM_types.h" | ||||
| #include "ED_screen.h" | #include "ED_screen.h" | ||||
| #include "ED_armature.h" | #include "ED_armature.h" | ||||
| #include "DRW_engine.h" | #include "DRW_engine.h" | ||||
| #include "DEG_depsgraph_query.h" | |||||
| #ifdef WITH_GAMEENGINE | #ifdef WITH_GAMEENGINE | ||||
| # include "BLI_listbase.h" | # include "BLI_listbase.h" | ||||
| # include "BLI_callbacks.h" | # include "BLI_callbacks.h" | ||||
| # include "GPU_draw.h" | # include "GPU_draw.h" | ||||
| # include "BL_System.h" | # include "BL_System.h" | ||||
| ▲ Show 20 Lines • Show All 841 Lines • ▼ Show 20 Lines | void ED_view3d_dist_range_get( | ||||
| float r_dist_range[2]) | float r_dist_range[2]) | ||||
| { | { | ||||
| r_dist_range[0] = v3d->grid * 0.001f; | r_dist_range[0] = v3d->grid * 0.001f; | ||||
| r_dist_range[1] = v3d->far * 10.0f; | r_dist_range[1] = v3d->far * 10.0f; | ||||
| } | } | ||||
| /* copies logic of get_view3d_viewplane(), keep in sync */ | /* copies logic of get_view3d_viewplane(), keep in sync */ | ||||
| bool ED_view3d_clip_range_get( | bool ED_view3d_clip_range_get( | ||||
| const Depsgraph *depsgraph, | |||||
| const View3D *v3d, const RegionView3D *rv3d, | const View3D *v3d, const RegionView3D *rv3d, | ||||
| float *r_clipsta, float *r_clipend, | float *r_clipsta, float *r_clipend, | ||||
| const bool use_ortho_factor) | const bool use_ortho_factor) | ||||
| { | { | ||||
| CameraParams params; | CameraParams params; | ||||
| BKE_camera_params_init(¶ms); | BKE_camera_params_init(¶ms); | ||||
| BKE_camera_params_from_view3d(¶ms, v3d, rv3d); | BKE_camera_params_from_view3d(¶ms, depsgraph, v3d, rv3d); | ||||
| if (use_ortho_factor && params.is_ortho) { | if (use_ortho_factor && params.is_ortho) { | ||||
| const float fac = 2.0f / (params.clipend - params.clipsta); | const float fac = 2.0f / (params.clipend - params.clipsta); | ||||
| params.clipsta *= fac; | params.clipsta *= fac; | ||||
| params.clipend *= fac; | params.clipend *= fac; | ||||
| } | } | ||||
| if (r_clipsta) *r_clipsta = params.clipsta; | if (r_clipsta) *r_clipsta = params.clipsta; | ||||
| if (r_clipend) *r_clipend = params.clipend; | if (r_clipend) *r_clipend = params.clipend; | ||||
| return params.is_ortho; | return params.is_ortho; | ||||
| } | } | ||||
| bool ED_view3d_viewplane_get( | bool ED_view3d_viewplane_get( | ||||
| const Depsgraph *depsgraph, | |||||
| const View3D *v3d, const RegionView3D *rv3d, int winx, int winy, | const View3D *v3d, const RegionView3D *rv3d, int winx, int winy, | ||||
| rctf *r_viewplane, float *r_clipsta, float *r_clipend, float *r_pixsize) | rctf *r_viewplane, float *r_clipsta, float *r_clipend, float *r_pixsize) | ||||
| { | { | ||||
| CameraParams params; | CameraParams params; | ||||
| BKE_camera_params_init(¶ms); | BKE_camera_params_init(¶ms); | ||||
| BKE_camera_params_from_view3d(¶ms, v3d, rv3d); | BKE_camera_params_from_view3d(¶ms, depsgraph, v3d, rv3d); | ||||
| BKE_camera_params_compute_viewplane(¶ms, winx, winy, 1.0f, 1.0f); | BKE_camera_params_compute_viewplane(¶ms, winx, winy, 1.0f, 1.0f); | ||||
| if (r_viewplane) *r_viewplane = params.viewplane; | if (r_viewplane) *r_viewplane = params.viewplane; | ||||
| if (r_clipsta) *r_clipsta = params.clipsta; | if (r_clipsta) *r_clipsta = params.clipsta; | ||||
| if (r_clipend) *r_clipend = params.clipend; | if (r_clipend) *r_clipend = params.clipend; | ||||
| if (r_pixsize) *r_pixsize = params.viewdx; | if (r_pixsize) *r_pixsize = params.viewdx; | ||||
| return params.is_ortho; | return params.is_ortho; | ||||
| Show All 22 Lines | void ED_view3d_polygon_offset(const RegionView3D *rv3d, const float dist) | ||||
| } | } | ||||
| bglPolygonOffset(viewdist, dist); | bglPolygonOffset(viewdist, dist); | ||||
| } | } | ||||
| /** | /** | ||||
| * \param rect optional for picking (can be NULL). | * \param rect optional for picking (can be NULL). | ||||
| */ | */ | ||||
| void view3d_winmatrix_set(ARegion *ar, const View3D *v3d, const rcti *rect) | void view3d_winmatrix_set(const Depsgraph *depsgraph, ARegion *ar, const View3D *v3d, const rcti *rect) | ||||
| { | { | ||||
| RegionView3D *rv3d = ar->regiondata; | RegionView3D *rv3d = ar->regiondata; | ||||
| rctf viewplane; | rctf viewplane; | ||||
| float clipsta, clipend; | float clipsta, clipend; | ||||
| bool is_ortho; | bool is_ortho; | ||||
| is_ortho = ED_view3d_viewplane_get(v3d, rv3d, ar->winx, ar->winy, &viewplane, &clipsta, &clipend, NULL); | is_ortho = ED_view3d_viewplane_get(depsgraph, v3d, rv3d, ar->winx, ar->winy, &viewplane, &clipsta, &clipend, NULL); | ||||
| rv3d->is_persp = !is_ortho; | rv3d->is_persp = !is_ortho; | ||||
| #if 0 | #if 0 | ||||
| printf("%s: %d %d %f %f %f %f %f %f\n", __func__, winx, winy, | printf("%s: %d %d %f %f %f %f %f %f\n", __func__, winx, winy, | ||||
| viewplane.xmin, viewplane.ymin, viewplane.xmax, viewplane.ymax, | viewplane.xmin, viewplane.ymin, viewplane.xmax, viewplane.ymax, | ||||
| clipsta, clipend); | clipsta, clipend); | ||||
| #endif | #endif | ||||
| ▲ Show 20 Lines • Show All 97 Lines • ▼ Show 20 Lines | bool ED_view3d_lock(RegionView3D *rv3d) | ||||
| return ED_view3d_quat_from_axis_view(rv3d->view, rv3d->viewquat); | return ED_view3d_quat_from_axis_view(rv3d->view, rv3d->viewquat); | ||||
| } | } | ||||
| /* don't set windows active in here, is used by renderwin too */ | /* don't set windows active in here, is used by renderwin too */ | ||||
| void view3d_viewmatrix_set(const EvaluationContext *eval_ctx, Scene *scene, const View3D *v3d, RegionView3D *rv3d) | void view3d_viewmatrix_set(const EvaluationContext *eval_ctx, Scene *scene, const View3D *v3d, RegionView3D *rv3d) | ||||
| { | { | ||||
| if (rv3d->persp == RV3D_CAMOB) { /* obs/camera */ | if (rv3d->persp == RV3D_CAMOB) { /* obs/camera */ | ||||
| if (v3d->camera) { | if (v3d->camera) { | ||||
| BKE_object_where_is_calc(eval_ctx, scene, v3d->camera); | const Depsgraph *depsgraph = eval_ctx->depsgraph; | ||||
| obmat_to_viewmat(rv3d, v3d->camera); | Object *camera_object = DEG_get_evaluated_object(depsgraph, v3d->camera); | ||||
| BKE_object_where_is_calc(eval_ctx, scene, camera_object); | |||||
| obmat_to_viewmat(rv3d, camera_object); | |||||
| } | } | ||||
| else { | else { | ||||
| quat_to_mat4(rv3d->viewmat, rv3d->viewquat); | quat_to_mat4(rv3d->viewmat, rv3d->viewquat); | ||||
| rv3d->viewmat[3][2] -= rv3d->dist; | rv3d->viewmat[3][2] -= rv3d->dist; | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| bool use_lock_ofs = false; | bool use_lock_ofs = false; | ||||
| ▲ Show 20 Lines • Show All 402 Lines • ▼ Show 20 Lines | #ifdef WITH_GAMEENGINE | ||||
| view3d_operator_needs_opengl(C); | view3d_operator_needs_opengl(C); | ||||
| game_set_commmandline_options(&startscene->gm); | game_set_commmandline_options(&startscene->gm); | ||||
| if ((rv3d->persp == RV3D_CAMOB) && | if ((rv3d->persp == RV3D_CAMOB) && | ||||
| (startscene->gm.framing.type == SCE_GAMEFRAMING_BARS) && | (startscene->gm.framing.type == SCE_GAMEFRAMING_BARS) && | ||||
| (startscene->gm.stereoflag != STEREO_DOME)) | (startscene->gm.stereoflag != STEREO_DOME)) | ||||
| { | { | ||||
| const Depsgraph *depsgraph = CTX_data_depsgraph(C); | |||||
| /* Letterbox */ | /* Letterbox */ | ||||
| rctf cam_framef; | rctf cam_framef; | ||||
| ED_view3d_calc_camera_border(startscene, ar, CTX_wm_view3d(C), rv3d, &cam_framef, false); | ED_view3d_calc_camera_border(startscene, depsgraph, ar, CTX_wm_view3d(C), rv3d, &cam_framef, false); | ||||
| cam_frame.xmin = cam_framef.xmin + ar->winrct.xmin; | cam_frame.xmin = cam_framef.xmin + ar->winrct.xmin; | ||||
| cam_frame.xmax = cam_framef.xmax + ar->winrct.xmin; | cam_frame.xmax = cam_framef.xmax + ar->winrct.xmin; | ||||
| cam_frame.ymin = cam_framef.ymin + ar->winrct.ymin; | cam_frame.ymin = cam_framef.ymin + ar->winrct.ymin; | ||||
| cam_frame.ymax = cam_framef.ymax + ar->winrct.ymin; | cam_frame.ymax = cam_framef.ymax + ar->winrct.ymin; | ||||
| BLI_rcti_isect(&ar->winrct, &cam_frame, &cam_frame); | BLI_rcti_isect(&ar->winrct, &cam_frame, &cam_frame); | ||||
| } | } | ||||
| else { | else { | ||||
| cam_frame.xmin = ar->winrct.xmin; | cam_frame.xmin = ar->winrct.xmin; | ||||
| ▲ Show 20 Lines • Show All 209 Lines • Show Last 20 Lines | |||||