[Bf-blender-cvs] [ca134581a2a] temp-xr-virtual-camera-experiment: First setup of rv3d.
Jeroen Bakker
noreply at git.blender.org
Wed Nov 9 14:33:01 CET 2022
Commit: ca134581a2a312ebb27f8f79ffb3cc757421a816
Author: Jeroen Bakker
Date: Wed Nov 9 14:32:56 2022 +0100
Branches: temp-xr-virtual-camera-experiment
https://developer.blender.org/rBca134581a2a312ebb27f8f79ffb3cc757421a816
First setup of rv3d.
===================================================================
M source/blender/editors/space_view3d/view3d_draw.cc
===================================================================
diff --git a/source/blender/editors/space_view3d/view3d_draw.cc b/source/blender/editors/space_view3d/view3d_draw.cc
index 9ca181e2683..2da8e86b043 100644
--- a/source/blender/editors/space_view3d/view3d_draw.cc
+++ b/source/blender/editors/space_view3d/view3d_draw.cc
@@ -1550,20 +1550,56 @@ static void view3d_virtual_camera_update(const bContext *C, ARegion *region, Obj
Scene *scene = CTX_data_scene(C);
View3D *v3d = CTX_wm_view3d(C);
int2 resolution(1920 / 2, 1080 / 2);
- Camera *camera = static_cast<Camera *>(object->data);
- RenderEngineType *engine_type = ED_view3d_engine_type(scene, OB_RENDER);
+ RegionView3D *rv3d = static_cast<RegionView3D *>(region->regiondata);
+ int old_persp = rv3d->persp;
+ Object *old_camera = v3d->camera;
+ v3d->camera = object;
+ rv3d->persp = RV3D_CAMOB;
+
+ Camera *camera = static_cast<Camera *>(object->data);
if (camera->runtime.virtual_display_texture == nullptr) {
camera->runtime.virtual_display_texture = GPU_offscreen_create(
UNPACK2(resolution), true, GPU_RGBA16F, nullptr);
}
+
+ float4x4 winmat;
+
+ // TODO: Multi view support?
+ CameraParams params;
+ BKE_camera_params_init(¶ms);
+ /* fallback for non camera objects */
+ params.clip_start = v3d->clip_start;
+ params.clip_end = v3d->clip_end;
+ BKE_camera_params_from_object(¶ms, object);
+ BKE_camera_params_compute_viewplane(¶ms, UNPACK2(resolution), scene->r.xasp, scene->r.yasp);
+ BKE_camera_params_compute_matrix(¶ms);
+ copy_m4_m4(winmat.ptr(), params.winmat);
+
GPUOffScreen *offscreen = camera->runtime.virtual_display_texture;
+
GPU_offscreen_bind(offscreen, true);
- DRW_draw_render_loop_offscreen(
- depsgraph, engine_type, region, v3d, true, false, false, offscreen, nullptr);
+ ED_view3d_draw_offscreen(depsgraph,
+ scene,
+ OB_MATERIAL,
+ v3d,
+ region,
+ UNPACK2(resolution),
+ nullptr,
+ winmat.ptr(),
+ false,
+ true,
+ nullptr,
+ false,
+ true,
+ offscreen,
+ nullptr);
GPU_offscreen_unbind(offscreen, true);
camera->runtime.gpu_texture = GPU_offscreen_color_texture(
camera->runtime.virtual_display_texture);
+
+ v3d->camera = old_camera;
+ rv3d->persp = old_persp;
}
static void view3d_draw_virtual_camera(const bContext *C, ARegion *region)
More information about the Bf-blender-cvs
mailing list