Revision: 51365
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51365
Author:   nazgul
Date:     2012-10-16 11:57:46 +0000 (Tue, 16 Oct 2012)
Log Message:
-----------
Cycles: non-camera viewport render border support

This makes it possible to do a border render inside a viewport even
when not looking through the camera.

Render border could be defined by Ctrl-B shortcut (works for both
camera render border and viewport render border).

Camera render border could still be defined using Shift-B (so no
muscule memory would be broken). Currently used a special flag of
operator to do this, otherwise you'll need to either two operators
with different poll callback or it could go into conflict with a
border zoom,

Border render of a viewport could be enabled/disabled in View
panel using "Render Border" option.

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/blender_camera.cpp
    trunk/blender/intern/cycles/blender/blender_session.cpp
    trunk/blender/intern/cycles/blender/blender_sync.h
    trunk/blender/release/scripts/startup/bl_ui/space_view3d.py
    trunk/blender/source/blender/blenkernel/BKE_blender.h
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
    trunk/blender/source/blender/editors/space_view3d/view3d_intern.h
    trunk/blender/source/blender/editors/space_view3d/view3d_ops.c
    trunk/blender/source/blender/makesdna/DNA_view3d_types.h
    trunk/blender/source/blender/makesrna/intern/rna_space.c

Modified: trunk/blender/intern/cycles/blender/blender_camera.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_camera.cpp      2012-10-16 
10:59:35 UTC (rev 51364)
+++ trunk/blender/intern/cycles/blender/blender_camera.cpp      2012-10-16 
11:57:46 UTC (rev 51365)
@@ -425,12 +425,26 @@
        BL::RegionView3D b_rv3d, int width, int height)
 {
        BL::RenderSettings r = b_scene.render();
+       bool is_camera_view;
 
-       if(!r.use_border())
-               return;
+       /* camera view? */
+       is_camera_view = b_rv3d.view_perspective() == 
BL::RegionView3D::view_perspective_CAMERA;
 
-       /* camera view? */
-       if(!(b_rv3d && b_rv3d.view_perspective() == 
BL::RegionView3D::view_perspective_CAMERA))
+       if(!is_camera_view) {
+               /* for non-camera view check whether render border is enabled 
for viewport
+                * and if so use border from 3d viewport
+                * assume viewport has got correctly clamped border already
+                */
+               if(b_v3d.use_render_border()) {
+                       bcam->border_left = b_v3d.render_border_min_x();
+                       bcam->border_right = b_v3d.render_border_max_x();
+                       bcam->border_bottom = b_v3d.render_border_min_y();
+                       bcam->border_top = b_v3d.render_border_max_y();
+
+                       return;
+               }
+       }
+       else if(!r.use_border())
                return;
 
        BL::Object b_ob = (b_v3d.lock_camera_and_layers())? b_scene.camera(): 
b_v3d.camera();
@@ -504,14 +518,20 @@
        blender_camera_sync(scene->camera, &bcam, width, height);
 }
 
-BufferParams BlenderSync::get_buffer_params(BL::Scene b_scene, Camera *cam, 
int width, int height)
+BufferParams BlenderSync::get_buffer_params(BL::Scene b_scene, BL::SpaceView3D 
b_v3d, BL::RegionView3D b_rv3d, Camera *cam, int width, int height)
 {
        BufferParams params;
+       bool use_border = false;
 
        params.full_width = width;
        params.full_height = height;
 
-       if(b_scene.render().use_border()) {
+       if(b_v3d && b_rv3d && b_rv3d.view_perspective() != 
BL::RegionView3D::view_perspective_CAMERA)
+               use_border = b_v3d.use_render_border();
+       else
+               use_border = b_scene.render().use_border();
+
+       if(use_border) {
                /* border render */
                params.full_x = cam->border_left*width;
                params.full_y = cam->border_bottom*height;

Modified: trunk/blender/intern/cycles/blender/blender_session.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_session.cpp     2012-10-16 
10:59:35 UTC (rev 51364)
+++ trunk/blender/intern/cycles/blender/blender_session.cpp     2012-10-16 
11:57:46 UTC (rev 51365)
@@ -105,7 +105,7 @@
                sync->sync_camera(b_engine.camera_override(), width, height);
 
        /* set buffer parameters */
-       BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, 
scene->camera, width, height);
+       BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, 
b_v3d, b_rv3d, scene->camera, width, height);
        session->reset(buffer_params, session_params.samples);
 }
 
@@ -239,7 +239,7 @@
 
        /* get buffer parameters */
        SessionParams session_params = 
BlenderSync::get_session_params(b_engine, b_userpref, b_scene, background);
-       BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, 
scene->camera, width, height);
+       BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, 
b_v3d, b_rv3d, scene->camera, width, height);
 
        /* render each layer */
        BL::RenderSettings r = b_scene.render();
@@ -399,7 +399,7 @@
 
        /* reset if needed */
        if(scene->need_reset()) {
-               BufferParams buffer_params = 
BlenderSync::get_buffer_params(b_scene, scene->camera, width, height);
+               BufferParams buffer_params = 
BlenderSync::get_buffer_params(b_scene, b_v3d, b_rv3d, scene->camera, width, 
height);
                session->reset(buffer_params, session_params.samples);
        }
 }
@@ -437,7 +437,7 @@
                /* reset if requested */
                if(reset) {
                        SessionParams session_params = 
BlenderSync::get_session_params(b_engine, b_userpref, b_scene, background);
-                       BufferParams buffer_params = 
BlenderSync::get_buffer_params(b_scene, scene->camera, w, h);
+                       BufferParams buffer_params = 
BlenderSync::get_buffer_params(b_scene, b_v3d, b_rv3d, scene->camera, w, h);
 
                        session->reset(buffer_params, session_params.samples);
                }
@@ -447,7 +447,7 @@
        update_status_progress();
 
        /* draw */
-       BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, 
scene->camera, width, height);
+       BufferParams buffer_params = BlenderSync::get_buffer_params(b_scene, 
b_v3d, b_rv3d, scene->camera, width, height);
 
        return !session->draw(buffer_params);
 }

Modified: trunk/blender/intern/cycles/blender/blender_sync.h
===================================================================
--- trunk/blender/intern/cycles/blender/blender_sync.h  2012-10-16 10:59:35 UTC 
(rev 51364)
+++ trunk/blender/intern/cycles/blender/blender_sync.h  2012-10-16 11:57:46 UTC 
(rev 51365)
@@ -63,7 +63,7 @@
        static SceneParams get_scene_params(BL::Scene b_scene, bool background);
        static SessionParams get_session_params(BL::RenderEngine b_engine, 
BL::UserPreferences b_userpref, BL::Scene b_scene, bool background);
        static bool get_session_pause(BL::Scene b_scene, bool background);
-       static BufferParams get_buffer_params(BL::Scene b_scene, Camera *cam, 
int width, int height);
+       static BufferParams get_buffer_params(BL::Scene b_scene, 
BL::SpaceView3D b_v3d, BL::RegionView3D b_rv3d, Camera *cam, int width, int 
height);
 
 private:
        /* sync */

Modified: trunk/blender/release/scripts/startup/bl_ui/space_view3d.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_view3d.py 2012-10-16 
10:59:35 UTC (rev 51364)
+++ trunk/blender/release/scripts/startup/bl_ui/space_view3d.py 2012-10-16 
11:57:46 UTC (rev 51365)
@@ -2312,7 +2312,10 @@
         subcol.label(text="Local Camera:")
         subcol.prop(view, "camera", text="")
 
+        col = layout.column(align=True)
+        col.prop(view, "use_render_border")
 
+
 class VIEW3D_PT_view3d_cursor(Panel):
     bl_space_type = 'VIEW_3D'
     bl_region_type = 'UI'

Modified: trunk/blender/source/blender/blenkernel/BKE_blender.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_blender.h       2012-10-16 
10:59:35 UTC (rev 51364)
+++ trunk/blender/source/blender/blenkernel/BKE_blender.h       2012-10-16 
11:57:46 UTC (rev 51365)
@@ -42,7 +42,7 @@
  * and keep comment above the defines.
  * Use STRINGIFY() rather than defining with quotes */
 #define BLENDER_VERSION         264
-#define BLENDER_SUBVERSION      2
+#define BLENDER_SUBVERSION      3
 
 /* 262 was the last editmesh release but its has compatibility code for bmesh 
data,
  * so set the minversion to 2.61 */

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c   2012-10-16 
10:59:35 UTC (rev 51364)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c   2012-10-16 
11:57:46 UTC (rev 51365)
@@ -8046,40 +8046,63 @@
                }
        }
 
-       /* WATCH IT!!!: pointers from libdata have not been converted yet here! 
*/
-       /* WATCH IT 2!: Userdef struct init has to be in 
editors/interface/resources.c! */
+       if (main->versionfile < 264 || (main->versionfile == 264 && 
main->subversionfile < 3)) {
+               /* smoke branch */
+               {
+                       Object *ob;
 
-       {
-               Object *ob;
-
-               for (ob = main->object.first; ob; ob = ob->id.next) {
-                       ModifierData *md;
-                       for (md = ob->modifiers.first; md; md = md->next) {
-                               if (md->type == eModifierType_Smoke) {
-                                       SmokeModifierData *smd = 
(SmokeModifierData *)md;
-                                       if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) 
&& smd->domain) {
-                                               /* keep branch saves if 
possible */
-                                               if 
(!smd->domain->flame_max_temp) {
-                                                       
smd->domain->burning_rate = 0.75f;
-                                                       
smd->domain->flame_smoke = 1.0f;
-                                                       
smd->domain->flame_vorticity = 0.5f;
-                                                       
smd->domain->flame_ignition = 1.25f;
-                                                       
smd->domain->flame_max_temp = 1.75f;
-                                                       
smd->domain->adapt_threshold = 0.02f;
-                                                       
smd->domain->adapt_margin = 4;
-                                                       
smd->domain->flame_smoke_color[0] = 0.7f;
-                                                       
smd->domain->flame_smoke_color[1] = 0.7f;
-                                                       
smd->domain->flame_smoke_color[2] = 0.7f;
+                       for (ob = main->object.first; ob; ob = ob->id.next) {
+                               ModifierData *md;
+                               for (md = ob->modifiers.first; md; md = 
md->next) {
+                                       if (md->type == eModifierType_Smoke) {
+                                               SmokeModifierData *smd = 
(SmokeModifierData *)md;
+                                               if ((smd->type & 
MOD_SMOKE_TYPE_DOMAIN) && smd->domain) {
+                                                       /* keep branch saves if 
possible */
+                                                       if 
(!smd->domain->flame_max_temp) {
+                                                               
smd->domain->burning_rate = 0.75f;
+                                                               
smd->domain->flame_smoke = 1.0f;
+                                                               
smd->domain->flame_vorticity = 0.5f;
+                                                               
smd->domain->flame_ignition = 1.25f;
+                                                               
smd->domain->flame_max_temp = 1.75f;
+                                                               
smd->domain->adapt_threshold = 0.02f;
+                                                               
smd->domain->adapt_margin = 4;
+                                                               
smd->domain->flame_smoke_color[0] = 0.7f;
+                                                               
smd->domain->flame_smoke_color[1] = 0.7f;
+                                                               
smd->domain->flame_smoke_color[2] = 0.7f;
+                                                       }
                                                }
+                                               else if ((smd->type & 
MOD_SMOKE_TYPE_FLOW) && smd->flow) {
+                                                       if 
(!smd->flow->texture_size) {
+                                                               
smd->flow->fuel_amount = 1.0;
+                                                               
smd->flow->surface_distance = 1.5;
+                                                               
smd->flow->color[0] = 0.7f;
+                                                               
smd->flow->color[1] = 0.7f;
+                                                               
smd->flow->color[2] = 0.7f;
+                                                               
smd->flow->texture_size = 1.0f;
+                                                       }
+                                               }
                                        }
-                                       else if ((smd->type & 
MOD_SMOKE_TYPE_FLOW) && smd->flow) {
-                                               if (!smd->flow->texture_size) {
-                                                       smd->flow->fuel_amount 
= 1.0;
-                                                       
smd->flow->surface_distance = 1.5;
-                                                       smd->flow->color[0] = 
0.7f;
-                                                       smd->flow->color[1] = 
0.7f;
-                                                       smd->flow->color[2] = 
0.7f;
-                                                       smd->flow->texture_size 
= 1.0f;
+                               }
+                       }
+               }
+
+               /* render border for viewport */
+               {
+                       bScreen *sc;
+
+                       for (sc = main->screen.first; sc; sc = sc->id.next) {
+                               ScrArea *sa;
+                               for (sa = sc->areabase.first; sa; sa = 
sa->next) {
+                                       SpaceLink *sl;
+                                       for (sl = sa->spacedata.first; sl; sl = 
sl->next) {
+                                               if (sl->spacetype == 
SPACE_VIEW3D) {
+                                                       View3D *v3d = (View3D 
*)sl;
+                                                       if 
(v3d->render_border.xmin == 0.0f && v3d->render_border.ymin == 0.0f &&
+                                                           
v3d->render_border.xmax == 0.0f && v3d->render_border.ymax == 0.0f)
+                                                       {
+                                                               
v3d->render_border.xmax = 1.0f;
+                                                               
v3d->render_border.ymax = 1.0f;
+                                                       }
                                                }
                                        }
                                }
@@ -8087,6 +8110,9 @@
                }
        }
 

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to