[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(&params);
+  /* fallback for non camera objects */
+  params.clip_start = v3d->clip_start;
+  params.clip_end = v3d->clip_end;
+  BKE_camera_params_from_object(&params, object);
+  BKE_camera_params_compute_viewplane(&params, UNPACK2(resolution), scene->r.xasp, scene->r.yasp);
+  BKE_camera_params_compute_matrix(&params);
+  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