Commit Graph

655 Commits

Author SHA1 Message Date
a856b123ff Fix T38726: missing rendered viewport update when removing render layer. 2014-02-26 17:29:50 +01:00
4cfca0adfe Nicer solution to T38846: Split off the render layer forcing from the
validity check for render operator.

This way scene DNA can stay read-only there, cleaner and we don't have
to pass an awkward bool pointer around.
2014-02-26 14:56:27 +01:00
ecbae4ab46 Fix T38846: Render layer checkbox is not refreshed.
The render operator invoke checks render layers, which can force the
render layer to be activated. This requires a notifier, which has to be
done in the operator itself (can't do this inside pipeline code).
2014-02-26 14:39:14 +01:00
b7fa08f88a Code cleanup: style 2014-02-22 11:14:15 +11:00
1a79abdad2 Fix more of T38726: there still was a crash when deleting render layers. 2014-02-21 16:38:19 +01:00
277126881d Fix T38726: blender internal viewport render crash when deleting render layer. 2014-02-21 15:10:47 +01:00
1687023776 Fix T38340 and T38473: fixed Scene pointers in Composite and Defocus nodes don't get updated based on context.
As discussed in T38340 the solution is to use the current scene from
context whenever feasible.

Composite does not use node->id at all now, the scene which owns the
compositing node tree is retrieved from context instead.

Defocus node->id is made editable by the user. By default it is not set,
which also will make it use the contextual scene and camera info.
The node->id pointer in Defocus is **not** cleared in older blend files.
This is done for backward compatibility: the node will then behave as
before in untouched scenes.

File Output nodes also don't store scene in node->id. This is only needed
when creating a new node for initializing the file format.

Reviewers: brecht, jbakker, mdewanchand

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D290
2014-02-05 13:51:51 +01:00
d900f5be55 Code cleanup: use bools where possible 2014-02-03 19:35:44 +11:00
a68ceb0af8 Option to lock the interface while rendering
Added function called WM_set_locked_interface which does
two things:

- Prevents event queue from being handled, so no operators
  (see below) or values are even possible to run or change.
  This prevents any kind of "destructive" action performed
  from user while rendering.

- Locks interface refresh for regions which does have lock
  set to truth in their template. Currently it's just a 3D
  viewport, but in the future more regions could be considered
  unsafe, or we could want to lock different parts of
  interface when doing different jobs.

  This is needed because 3D viewport could be using or changing
  the same data as renderer currently uses, leading to threading
  conflict.

  Notifiers are still allowed to handle, so render progress is
  seen on the screen, but would need to doublecheck on this, in
  terms some notifiers could be changing the data.

  For now interface locking happens for render job only in case
  "Lock Interface" checkbox is enabled.

  Other tools like backing would also benefit of this option.

  It is possible to mark operator as safe to be used in locked
  interface mode by adding OPTYPE_ALLOW_LOCKED bit to operator
  template flags.

  This bit is completely handled by wm_evem_system, not
  with operator run routines, so it's still possible to
  run operators from drivers and handlers.

  Currently allowed image editor navigation and zooming.

Reviewers: brecht, campbellbarton

Reviewed By: campbellbarton

Differential Revision: https://developer.blender.org/D142
2014-01-29 16:07:14 +06:00
e983ed6aaa Revert the removal of Blender Internal Edge rendering, after artist feedback.
This reverts commit fb91a602c7.
2014-01-27 19:59:06 +01:00
7da44effe9 Fix T38319: no camera error message for render not showing correctly. 2014-01-22 17:45:29 +01:00
f6624b84cf Send sequencer render context as const pointer rather than as value
No functional changes just creepy to send rather huge structure by value.
2014-01-19 00:18:36 +06:00
61c9cacbd7 Fix T38074: sequence rendering gave "No camera" warning for other scenes that
didn't need a camera because they use only compositing nodes.
2014-01-08 18:29:16 +01:00
9939ec06dd Fix T37994: crash in preview render after recent color management changes.
Reviewed By: brecht
2013-12-31 15:03:06 +01:00
873c6e5479 Fix movie output when using render border
Reported by @plasmasolutions in IRC.
2013-12-29 17:25:56 +06:00
709041ed0b Threaded object update and EvaluationContext
Summary:
Made objects update happening from multiple threads. It is a task-based
scheduling system which uses current dependency graph for spawning new
tasks. This means threading happens on object level, but the system is
flexible enough for higher granularity.

Technical details:

- Uses task scheduler which was recently committed to trunk
  (that one which Brecht ported from Cycles).

- Added two utility functions to dependency graph:
  * DAG_threaded_update_begin, which is called to  initialize threaded
    objects update. It will also schedule root DAG node to the queue,
    hence starting evaluation process.

    Initialization will calculate how much parents are to be evaluation
    before current DAG node can be scheduled. This value is used by task
    threads for faster detecting which nodes might be scheduled.

  * DAG_threaded_update_handle_node_updated which is  called from task
    thread function when node was fully handled.

	This function decreases num_pending_parents of node children and
	schedules children with zero valency.

    As it might have become clear, task thread receives DAG nodes and
    decides which callback to call for it.

    Currently only BKE_object_handle_update is called for object nodes.

    In the future it'll call node->callback() from Ali's new DAG.

- This required adding some workarounds to the render pipeline.
  Mainly to stop using get_object_dm() from modifiers' apply callback.
  Such a call was only a workaround for dependency graph glitch when
  rendering scene with, say, boolean modifiers before displaying
  this scene.

  Such change moves workaround from one place to another, so overall
  hackentropy remains the same.

- Added paradigm of EvaluaitonContext. Currently it's more like just a
  more reliable replacement for G.is_rendering which fails in some
  circumstances.

  Future idea of this context is to also store all the local data needed
  for objects evaluation such as local time, Copy-on-Write data and so.

  There're two types of EvaluationContext:

  * Context used for viewport updated and owned by Main. In the future
    this context might be easily moved to Window or Screen to allo
    per-window/per-screen local time.

  * Context used by render engines to evaluate objects for render purposes.
    Render engine is an owner of this context.

  This context is passed to all object update routines.

Reviewers: brecht, campbellbarton

Reviewed By: brecht

CC: lukastoenne

Differential Revision: https://developer.blender.org/D94
2013-12-26 17:24:42 +06:00
c5d7ea091f Changes to partial update during rendering
Summary:
Mainly addressed to solve old TODO with color managed fallback
to CPU mode when displaying render result during rendering.

That fallback was caused by the fact that partial image update
was always acquiring image buffer for composite output and was
only modifying display buffer directly.

This was a big issue for Cycles rendering which renders layers
one by one and wanted to display progress of each individual
layer. This lead to situations when display buffer was based on
what Cycles passes via RenderResult and didn't take layer/pass
from image editor header into account.

Now made it so image buffer which partial update is operating
with always corresponds to what is set in image editor header.

To make Cycles displaying progress of all the layers one by one
made it so image_rect_update switches image editor user to
newly rendering render layer. It happens only once when render
engine starts rendering next render layer, so should not be
annoying for navigation during rendering.

Additional change to render engines was done to make it so
they're able to merge composite output to final result
without marking tile as done. This is done via do_merge_result
argument to end_result() callback. This argument is optional
so should not break script compatibility.

Additional changes:

- Partial display update for Blender Internal now happens from
  the same thread as tile rendering. This makes it so display
  conversion (which could be pretty heavy actually) is done in
  separate threads. Also gives better UI feedback when rendering
  easy scene with small tiles.

- Avoid freeing/allocating byte buffer for render result
  if it's owned by the image buffer. Only mark it as invalid
  for color management.

  Saves loads of buffer re-allocations in cases when having
  several image editors opened with render result. This change
  in conjunction with the rest of the patch gave around
  50%-100% speedup of render time when displaying non-combined
  pass during rendering on my laptop.

- Partial display buffer update was wrong for buffers with number
  of channels different from 4.

- Remove unused window from RenderJob.

- Made image_buffer_rect_update static since it's only used
  in single file.

Reviewers: brecht

Reviewed By: brecht

CC: dingto

Differential Revision: http://developer.blender.org/D98
2013-12-17 23:42:38 +06:00
fb91a602c7 Blender Internal:
* Remove "Edge" post processing effect and the corresponding render layer.

Since we have freestyle, this is not needed anymore and was a very simple effect anyway (Zbuffer filter effect, could be added to the compositor if really needed again).

Reviewed By: brecht, ton
Differential Revision: http://developer.blender.org/D14
2013-11-19 20:30:49 +01:00
beae4f498d code cleanup: spelling 2013-10-31 14:10:01 +00:00
3718c04844 Fix compositor rendering scenes multiple times in some cases
Issue was caused by Blender Internal changing LIB_DOIT flag
for scene when it gets updated for new frame. This leads into
conflict with flag used for tagging scenes fr render,

For now made it so nodes are being tagged instead of scene.
Only none node from those who're sharing the scene will be
tagged. And rendering scenes for node tree now checks for
node flag instead of scene's datablock one.

Ideally this tag would be replaced with scenes stored in an
array, but then it's not so clear how to check which node
to update.
2013-10-20 01:09:25 +00:00
Lukas Toenne
c1541a940d Fix #36991, After rendering with Sampled Motion Blur, the moving objects place is wrong.
With mblur the render function was setting scene frame for each blur sample and calling DAG update, but not after the last sample is finished, leaving the scene in the wrong frame.
2013-10-09 16:49:13 +00:00
c41bb7961f Different implementation of patch #36430: use layer froms scene directly for
rendering, in case some script wants to set it in the render_pre callback. In
case of decoupled 3d view layers or local view it will still override this
though.
2013-09-12 12:09:14 +00:00
d4b8a6cb85 Code cleanup: use boolean instead of int for colormanagement 2013-09-05 17:13:43 +00:00
03bd670f82 Fix #36649 and #36650: animation of freestyle line thickness and linestyle did
not render correct in animations, due to missing updates.
2013-09-05 15:47:52 +00:00
16a36f320f Fix #36602: crash with freestyle and full sample render of empty render layer. 2013-08-29 20:53:29 +00:00
e7d725eefd Fix #36598: blender render crash baking and then doing a full sample render. 2013-08-29 00:14:57 +00:00
44376a322f Frame reporting to console was wrong when not using Render Layers in compo
This is because render info's current frame is either happens in
conversion stage (when using Render Layers node) or in sequencer's
rendering (which you don't usually have).

Now made it so when only compositor is used, proper current frame
is being set to re->i stats structure.
2013-08-06 02:34:50 +00:00
3ce280e825 Fix #35960, #36044: blender internal viewport rendering crash while editing data.
Now the viewport rendering thread will lock the main thread while it is exporting
objects to render data. This is not ideal if you have big scenes that might block
the UI, but Cycles does the same, and it's fairly quick because the same evaluated
mesh can be used as for viewport drawing. It's the only way to get things stable
until the thread safe dependency graph is here.

This adds a mechanism to the job system for jobs to lock the main thread, using a
new 'ticket mutex lock' which is a mutex lock that gives priority to the first
thread that tries to lock the mutex.

Still to solve: undo/redo crashes.
2013-07-08 17:56:51 +00:00
22f26b2ce4 Fix for Bug #35970: Freestyle + Particles = Crash.
The crash was caused by a reference of freed memory in add_halo_flare() that relied
on the global variable R to retrieve a list of objects.  The value of this variable
is invalidated by a nested execution of the Blender Internal renderer for Freestyle
stroke rendering, leading to the documented memory reference issue.
2013-07-07 17:24:30 +00:00
721237cf29 Fix #35986: "Full sample AA not supported without 3d rendering" message was
displayed even with antialiasing disabled.
2013-07-03 17:02:09 +00:00
929bba2bac fix for crash reading from a freed scene when exiting blender. 2013-06-27 06:16:31 +00:00
d3b6117068 Fix typo made back in svn rev35785
Callback handle was assigning to wrong storage in RE_draw_lock_cb.
So far it was completely harmless because all the callbacks are
using the same handle, so test_break_callback was using correct
handle, and since draw_lock_callback didn't use handle at all
nobody noticed this.

But this typo lead to draw_lock_callback using NULL instead of
real RenderJob, which is bad for the feature we're working in
GSoC branch.
2013-06-25 07:22:28 +00:00
0309f442bb Render stats text: show elapsed time for blender internal, hide useless "Single Layer"
at the start, more clearly indicate what the render time of the last frame was, some
other tweaks for consistency.
2013-06-24 22:41:24 +00:00
a384612cce Fix #35439: Render Border have weird influence on compositing
Issue was caused by render result passing to a compositor
was having a resolution of border when using a camera border
in cases there's no Render Layer nodes.

Made it so resolution in which compositor works does not
depend on whether Render Layers present or not.
2013-06-20 11:32:08 +00:00
94cb20ff4e when setting the subframe for large frames (250,000+) the precision was very poor.
now use double precision when combining the frame+subframe.
2013-06-16 04:06:38 +00:00
5520331215 Fix #35561: freestyle + read full sample layers = crash.
Now add_freestyle() in pipeline.c takes a second argument to enable/disable
stroke rendering.  When stroke rendering is disabled, the function allocates
data structures but does not perform stroke rendering.  The allocated data
structures (mostly left unpopulated with data elements) are intended to allow
for the Read Full Sample Layers (Shift-R) command in the compositor.
2013-06-11 02:32:01 +00:00
f47cb7e2d9 Fix for r56965 by Tamito:
* Panorama Camera was not working for Blender Internal and Cycles anymore.

Code checked for Freestyle render layer flag, but as the flag is enabled per default, it broke Panorama camera in all cases. It made no sense to check this on a render layer basis anyway... check if Freestyle is enabled in general now instead.
2013-06-01 02:14:07 +00:00
9e05f6571f Make sure bool will always have the same size in C and C++
There were an issues with data structures defined in headers
and being used by both C and C++ on systems with stdbool
unavailable.

This happened because bool in this case will be defined as
unsigned int, which is 4 bytes. But C++'s bool is only 1
byte and this lead to alignment issues.

Now bool is always 1 byte, also made sure there's no situation
like bool foo = BitField & BitFlag, which could give overflow
issues. Use (BitField & BitFlag) != 0 instead.

Fixes #35553: Compositor broken (Backdrop & Preview)
2013-05-29 11:49:39 +00:00
663f15cf2b Fix #35493: Blender crash when rendering in terminal mode
Use the same window manager for freestyle bmain as
real bmain uses. This is needed because freestyle's
bmain could be used to tag scenes for update, which
implies call of ED_render_scene_update in some cases
and that function requires proper windoew manager
to present.

Alternative would be to make render scene update does
nothing if there's no window manager, but we wanted
freestyle to be applied in rendered viewport once and
think current change is what we'll need to support
freestyle in viewport.

But a bit further, perhaps that'd make sense to not
register ED_render_scene_update as a scene update
callback when in background mode?
2013-05-24 07:56:32 +00:00
ba4fb6bf43 Temporary fix for [#35467] wrong lines with panoramic camera.
A warning message is shown when the panoramic camera is combined with Freestyle.
2013-05-22 19:21:42 +00:00
a4b5c05aad Fixes for blender internal viewport render:
* Particles did not render at viewport resolution like meshes.
* Properties editor preview render of hair was crashing, solution is to have
  two separate flags for this preview render and viewport preview render.
2013-05-15 17:09:45 +00:00
845376e8d3 Fix for missing finalization of memory blocks allocated in the Freestyle module.
Suitable for inclusion in 2.67a.
2013-05-15 17:06:56 +00:00
5fcf9b1d2f 3D viewport render preview:
- Put it available as a default now (no debug value needed)
- Fixed viewport size error, viewport was badly set
  (visible with border render, property regions)
- Fixed hanging lock in conflict between drawing and initialize
  new renders.
2013-05-12 13:15:41 +00:00
1c9a24b8ff Fix #35269: compositing setup with only file output node and no composite node
refused to render. It's not possible to actually see the compositing result
in the render result without that but might as well work.
2013-05-10 12:27:18 +00:00
a07dcd67eb Fix #35240: command line -t number of threads option did not work for cycles.
Now it works for blender internal, cycles and other multithreading code in
Blender in both background and UI mode.
2013-05-08 13:23:17 +00:00
656213e6b2 Fix freestyle crash due to freed memory access. The render data needs to be
freed first, and then the scene that it used.
2013-04-25 15:59:15 +00:00
ee6932aa89 Fix flickering black tiles in preview render, after viewport render commit, it's
nicer when the new preview draws over the old one.

The code was changed so that the render result is freed all the time because
freestyle manipulates render layers. Now it only does it when freestyle is
enabled so cycles and regular blender internal can still avoid it.
2013-04-24 19:21:16 +00:00
Lukas Toenne
6cdc12dc74 Fix for #34739 and #35060, avoid ambiguity in compositor viewer nodes.
The design changes coming with pynodes for the node editor allow editing multiple node groups or pinning. This is great for working on different node groups without switching between them all the time, but it causes a problem for viewer nodes: these nodes all write to the same Image data by design, causing access conflicts and in some cases memory corruption. This was not a problem before pynodes because the editor would only allow 1 edited node group at any time. With the new flexibility of node editors this restriction is gone.

In order to avoid concurrent write access to the viewer image buffer and resolve the ambiguity this patch adds an "active viewer key" to the scene->nodetree (added in bNodeTree instead of Scene due to otherwise circular DNA includes). This key identifies a specific node tree/group instance, which enables the compositor to selectively enable only 1 viewer node.

The active viewer key is switched when opening/closing node groups (push/pop on the snode->treepath stack) or when selecting a viewer node. This way only the "last edited" viewer will be active.

Eventually it would be nicer if each viewer had its own buffer per node space so one could actually compare viewers without switching. But that is a major redesign of viewer nodes and images, not a quick fix for bcon4 ...
2013-04-24 16:36:50 +00:00
a1ed1dd26b Fix for full-sample anti-aliasing (FSAA) not working with Freestyle.
Reverted the trunk revision 56136 and part of revision 56127 concerning the local Main
for Freestyle and temporary scene generation for stroke rendering.

The function do_merge_fullsample() in pipeline.c has access to the Scene of each Render,
so that the temporary Scene generated by Freestyle has to be kept for FSAA even after
stroke rendering has been done.  By the same token, the local Main has been moved from
the BlenderStrokeRenderer class to Render.  It is noted that free_all_freestyle_renders()
in pipeline.c is intended to get the temporary Scene of each Render released specifically
taking account of the FSAA case.
2013-04-23 22:40:13 +00:00
5725be6f08 Minor code clean-up & removal of unused code segments. 2013-04-20 23:00:27 +00:00