Commit Graph

1284 Commits

Author SHA1 Message Date
Joshua Leung
5196c4fd12 Fix uninitialised var warning 2014-01-15 14:45:45 +13:00
Sergey Sharybin
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
Campbell Barton
8901701808 UI: Display alpha checkers in image info's color swatch. 2013-12-24 17:20:37 +11:00
Brecht Van Lommel
f92bb64505 Fix T37843: area split widget missing in python console editor.
Python was indirectly causing redraw tags during drawing, which interfered
with the ARegion.drawrct, now ignore these during draw.
2013-12-18 12:02:31 +01:00
Sergey Sharybin
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
Campbell Barton
e68144aed7 Fix for crash in toolbar tabs with only one tab defined 2013-12-17 19:16:44 +11:00
Campbell Barton
a621d1e488 UI: Tabs categories for panels (D75)
- works by defining panel categories, currently restricted to the toolbar.
- no panels define bl_categories yet, so no user visible changes since tabs only show when there are multiple.
- panel pinning is available in rmb menu or alt+lmb.
2013-12-17 03:55:45 +11:00
Sergey Sharybin
cacd7c725b Disable region overlap in movie clip editor
Before it was giving weird behavior with timeline in MCE
and track preview widgets. But there's also no much benefit
of having transparent toolbox there.

Requested by our motrack guru Sebastian ages ago.
2013-12-16 17:17:59 +06:00
Sergey Sharybin
5a91df3271 Implement GPU-side dither
Summary:
Uses some magic pseudo-random which is actually a
texture coordinate hashing function.

TODOs:
- Dither noise is the same for all the frames.
- It's different from Floyd's dither we've been
  using before.
- Currently CPU and GPU dithering used different
  implementation. Ideally we need to use the same
  dither in CPU.

Reviewers: brecht

Reviewed By: brecht

Differential Revision: http://developer.blender.org/D58
2013-12-13 12:36:45 +06:00
Campbell Barton
7658f7acff Fix for off by one error noted by Anthony Edlin 2013-12-12 19:02:51 +11:00
Brecht Van Lommel
9c6fc9f15e Fix T37777: layout.column_flow() not working correct with retina / DPI. 2013-12-11 17:06:49 +01:00
Campbell Barton
5afc2a9a44 Code cleanup: assign win size to const vars and some renaming 2013-12-11 13:07:00 +11:00
Campbell Barton
91d8519c47 Fix T37463: Increasing window size would add space around menu header 2013-12-10 23:54:33 +11:00
Campbell Barton
d07fea2439 Screen Resize: minor code cleanup 2013-12-10 23:52:19 +11:00
Campbell Barton
e140024f2e Fix for off-by-one regression in D41
making the window larger was using incorrect factor leaving a black bar
on the window edge.
2013-12-10 22:19:17 +11:00
Campbell Barton
8dc80e9d73 Style Cleanup 2013-12-10 13:45:17 +11:00
Campbell Barton
90e7be4710 Fix T37727: z-offset problems with camera view 2013-12-09 21:20:08 +11:00
Joshua Leung
9b932c12c8 Fix T37722 - Can't undo deleting a screen layout
Operations on screen and UI stuff is not actually saved in the undo
files/buffers. Therefore, these shouldn't have the flags set for
getting included for undo and in the last operator settings.
2013-12-07 13:23:51 +13:00
Campbell Barton
6976866d5a User Interface: Ctrl+C over a menu copies the py command
also use bools rather then ints
2013-12-05 17:26:03 +11:00
Campbell Barton
c2a518461c Add alloca include for MSVC 2013-12-05 03:45:14 +11:00
Campbell Barton
a9b97dcf22 User interface: internal change, collect panels to draw before drawing.
avoids calling poll twice, in some cases
2013-12-04 11:57:19 +11:00
Campbell Barton
f3d13bec6d Code Cleanup: correct fabsf/fabs/abs use 2013-12-04 09:24:38 +11:00
Campbell Barton
1815225faa Blender Font (BLF): add length argument to string width/height functions
This also fixes a crash editing buttons longer then UI_MAX_DRAW_STR
2013-12-02 21:10:07 +11:00
Campbell Barton
596b6e207e Code Cleanup: make cpack into a function. 2013-12-01 14:30:22 +11:00
Campbell Barton
ac38f2584f Code Cleanup: replace ABS() with fabsf() when used with float expressions. 2013-12-01 13:11:12 +11:00
Campbell Barton
63caaa2b12 Code Cleanup: rename vars for detecting change to be more consistent
rename change/is_change/is_changed/modified -> changed
also use bools over int/short/char and once accidental float.
2013-11-26 06:39:14 +11:00
Brecht Van Lommel
5928af11ef Fix: jump to next/previous marker shortcut keys conflicted with others in clip editor.
Disable them for now and leave to for keymap revamp to assign them shortcut keys or not.
2013-11-25 19:14:12 +01:00
Anthony Edlin
e626998a26 UI: fix errors in screen edge drawing, moving and region hiding.
Summary:
- Fixes an off-by-one error in screen_test_scale() which causes the areas and
  regions to draw one pixel bigger on the right and top side of the window,
  therefor hiding one line of pixels.
- Fixes an off-by-one error in rct_fits() which causes regions to incorrectly
  hide even though it would fit inside the area.
- Correctly set the limits for the screen edge move operator so it will always
  go up to AREAMINX and headery.
- Change screen_find_active_scredge() so it doesn't show the arrows cursor on
  the screen edges along the window border.

The import thing to understand is how integer rects are used in this part of the
code. They are constructed as a lower left and top right point and are INCLUSIVE.
Meaning that if you have a rect's xmin = 10 and xmax = 30 then the total number
of pixels is 21. So to get the size of a rect you have to do xmax - xmin + 1,
which is easy to forget and result in off-by-one errors.

Reviewed By: brecht

Differential Revision: http://developer.blender.org/D41
2013-11-25 14:26:45 +01:00
Emanuel Claesson
3ca4387bc8 UI: remove unnecessary confirmation popups
This makes a number of operators no longer ask for confirmation, rather it will
show an info message after performing the operation. Ref T37422 for decision. In
particular, these were changed:

* Delete objects, bones, keyframes, masks, mask curves, motion tracks, markers.
* Clear and delete keyframes in the 3D view.
* Align bone to parents.
* Separate bones from armature.
* Group/ungroup metastrips in sequencer.
* Copy/paste objects to/from buffer.

Reviewed By: brecht, dingto

Differential Revision: http://developer.blender.org/D35
2013-11-25 12:21:45 +01:00
Campbell Barton
67aff56c01 Fix T37506: Duplicate Area into New, was disabled on fullscreen but works ok. 2013-11-19 02:52:34 +11:00
Campbell Barton
7267221715 remove return argument from wmOperatorType->cancel, was only ever returning OPERATOR_CANCELLED. 2013-10-30 23:08:53 +00:00
Campbell Barton
7c8c49a34a style cleanup 2013-10-21 23:35:08 +00:00
Brecht Van Lommel
efe2b1edf1 Jump to Next/Previous Marker operators in the timeline menu, shortcuts are
ctrl + shift + left/right arrow key.

Patch #37142 by Henrik Aarnio, thanks!
2013-10-21 15:00:22 +00:00
Campbell Barton
ecf2eeef23 style cleanup 2013-10-16 04:08:20 +00:00
Sergey Sharybin
d7983e3638 Option to overlay mask over the footage
Currently supports only two modes:
- Show alpha channel of the mask
- Multiply footage by the mask, which will give
  you final-looking combined image.

TODO: Currently rasterization happens on every
      redraw, need to cache rasterized mask
      somewhere to make redraw more realtime.
2013-10-12 14:09:05 +00:00
Sergey Sharybin
6e1fe4ddd9 Implementation of curve mapping in GLSL
The title says it all, now having curve mapping
enabled in color management settings wouldn't
force fallback from GLSL to CPU based color space
conversion.
2013-10-09 15:57:32 +00:00
Sergey Sharybin
865fe764dc Code cleanup: remove unused function 2013-10-04 12:22:54 +00:00
Campbell Barton
4627f9d92c style edits and use macro for prefix check 2013-10-01 16:40:11 +00:00
Bastien Montagne
4829cf9cd0 Fix [#36830] 'Reset to Default Value' on Current Area Type button causes crash
Default default value for space types (0, i.e. SPACE_EMPTY) is not valid, use SPACE_VIEW3D instead.
2013-09-29 13:25:42 +00:00
Brecht Van Lommel
25509ba8af Fix #36826: make screencast with quicktime output gave black flickering areas.
Problem was OpenGL buffer alpha channel, it's not used in most places and so
not set to any meaningful value while drawing.
2013-09-27 20:29:07 +00:00
Brecht Van Lommel
74828cc609 Fix #36783: click outside splash screen to close it would not highlight the
button under the mouse, and so clicking the button failed without first
moving the mouse. Similar issues could happen with popups and switching
windows.

The problem is that a notifier was being used to deactivate possible other
activated buttons, but as notifiers are delayed it could undo the correct
activation too. If anyone notices hanging tooltips or other issues after this
fix, please report them.
2013-09-23 23:31:42 +00:00
Campbell Barton
811669c14e minor style clanup and use more meaningful name for 3DCONNEXION source code. 2013-09-14 12:04:10 +00:00
Brecht Van Lommel
ed2343270c Related to #36710: add a "use_viewport" option to the render operator, to specify
if the layers and camera of the 3d viewport should be used. Python scripts don't
always want this behavior.
2013-09-13 13:34:12 +00:00
Campbell Barton
35cd649c66 rename cursor setting functions to make modal set/restore more clearly related functions. 2013-09-06 22:34:29 +00:00
Sergey Sharybin
d4b8a6cb85 Code cleanup: use boolean instead of int for colormanagement 2013-09-05 17:13:43 +00:00
Campbell Barton
1dc470dc8d better fix for r59794, register a gesture when the mouse goes outside the actionzone. 2013-09-04 05:25:29 +00:00
Campbell Barton
cd324bd43e fix for window join action being interpreted as a split.
The limit for dragging a gesture on an area corner was smaller then the area hot-spot,
so you could click on the right-most side of the bottom-left corner, drag left - pass the gesture threshold and still be in the same area. so a motion intended as a join would register as a split.
Happened more with high DPI values. fix by ensuring the drag limit is always higher then the hotspot.
2013-09-04 05:06:38 +00:00
Campbell Barton
064bf204f3 fix for glitch splitting horizontally with a high dpi, could make areas smaller then the header which pushed the original view out of the screen. 2013-09-04 03:52:25 +00:00
Brecht Van Lommel
60ff60dcdc RenderEngine API: add viewport draw utility functions to bind a GLSL fragment
shader for converting colors from linear to display space, based on the scene
color management settings.

if engine.support_display_space_shader(scene): # test graphics card support
	engine.bind_display_space_shader(scene)
	# draw pixels ..
	engine.unbind_display_space_shader()
2013-08-30 23:49:35 +00:00
Brecht Van Lommel
d2d9004991 Fix #36243: one screen should never be used by multiple windows, but this could
happen when a screen was maximized to a single editor, now that case is disabled
too.
2013-08-08 17:05:09 +00:00