2011-02-23 10:52:22 +00:00
|
|
|
/*
|
2008-12-24 10:33:10 +00:00
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU General Public License
|
|
|
|
|
* as published by the Free Software Foundation; either version 2
|
2018-06-01 18:19:39 +02:00
|
|
|
* of the License, or (at your option) any later version.
|
2008-12-24 10:33:10 +00:00
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program; if not, write to the Free Software Foundation,
|
2010-02-12 13:34:04 +00:00
|
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
2008-12-24 10:33:10 +00:00
|
|
|
*
|
|
|
|
|
* The Original Code is Copyright (C) 2005 Blender Foundation.
|
|
|
|
|
* All rights reserved.
|
|
|
|
|
*/
|
|
|
|
|
|
2019-02-18 08:08:12 +11:00
|
|
|
/** \file
|
|
|
|
|
* \ingroup spnode
|
|
|
|
|
* \brief lower level node drawing for nodes (boarders, headers etc), also node layout.
|
2011-02-27 20:29:51 +00:00
|
|
|
*/
|
|
|
|
|
|
2019-08-27 08:13:23 -06:00
|
|
|
#include "BLI_system.h"
|
2021-01-25 12:44:18 +01:00
|
|
|
#include "BLI_threads.h"
|
2008-12-24 10:33:10 +00:00
|
|
|
|
|
|
|
|
#include "DNA_node_types.h"
|
|
|
|
|
#include "DNA_object_types.h"
|
|
|
|
|
#include "DNA_screen_types.h"
|
2020-03-19 09:33:03 +01:00
|
|
|
#include "DNA_space_types.h"
|
|
|
|
|
#include "DNA_userdef_types.h"
|
2008-12-24 10:33:10 +00:00
|
|
|
|
2008-12-29 00:55:23 +00:00
|
|
|
#include "BKE_context.h"
|
2009-02-07 14:03:34 +00:00
|
|
|
#include "BKE_curve.h"
|
2008-12-24 10:33:10 +00:00
|
|
|
#include "BKE_image.h"
|
|
|
|
|
#include "BKE_main.h"
|
2011-09-05 21:01:50 +00:00
|
|
|
#include "BKE_node.h"
|
2021-12-21 15:18:56 +01:00
|
|
|
#include "BKE_node_tree_update.h"
|
2021-11-09 15:06:18 +01:00
|
|
|
#include "BKE_scene.h"
|
2012-06-19 17:29:58 +00:00
|
|
|
#include "BKE_tracking.h"
|
2008-12-24 10:33:10 +00:00
|
|
|
|
2012-05-22 14:13:33 +00:00
|
|
|
#include "BLF_api.h"
|
2015-08-16 17:32:01 +10:00
|
|
|
#include "BLT_translation.h"
|
2012-05-22 14:13:33 +00:00
|
|
|
|
2008-12-24 10:33:10 +00:00
|
|
|
#include "BIF_glutil.h"
|
|
|
|
|
|
2018-04-05 15:41:17 +02:00
|
|
|
#include "GPU_batch.h"
|
2018-07-15 10:34:31 +02:00
|
|
|
#include "GPU_batch_presets.h"
|
2020-11-24 13:18:57 +01:00
|
|
|
#include "GPU_framebuffer.h"
|
2016-10-14 23:45:55 -04:00
|
|
|
#include "GPU_immediate.h"
|
2017-03-21 17:49:21 -04:00
|
|
|
#include "GPU_matrix.h"
|
2020-03-19 09:33:03 +01:00
|
|
|
#include "GPU_platform.h"
|
2022-01-17 14:45:22 +01:00
|
|
|
#include "GPU_shader_shared.h"
|
2018-06-27 19:07:23 -06:00
|
|
|
#include "GPU_state.h"
|
2022-01-17 14:45:22 +01:00
|
|
|
#include "GPU_uniform_buffer.h"
|
2016-10-14 23:45:55 -04:00
|
|
|
|
2020-11-24 13:18:57 +01:00
|
|
|
#include "DRW_engine.h"
|
|
|
|
|
|
2008-12-29 00:55:23 +00:00
|
|
|
#include "RNA_access.h"
|
2013-03-18 16:34:57 +00:00
|
|
|
#include "RNA_define.h"
|
2008-12-29 00:55:23 +00:00
|
|
|
|
2010-11-06 17:55:43 +00:00
|
|
|
#include "ED_node.h"
|
2019-04-23 09:15:45 -06:00
|
|
|
#include "ED_space_api.h"
|
2010-11-06 17:55:43 +00:00
|
|
|
|
2008-12-29 00:55:23 +00:00
|
|
|
#include "WM_api.h"
|
|
|
|
|
#include "WM_types.h"
|
|
|
|
|
|
2008-12-24 10:33:10 +00:00
|
|
|
#include "UI_resources.h"
|
2016-10-14 23:45:55 -04:00
|
|
|
#include "UI_view2d.h"
|
2008-12-24 10:33:10 +00:00
|
|
|
|
Color Management, Stage 2: Switch color pipeline to use OpenColorIO
Replace old color pipeline which was supporting linear/sRGB color spaces
only with OpenColorIO-based pipeline.
This introduces two configurable color spaces:
- Input color space for images and movie clips. This space is used to convert
images/movies from color space in which file is saved to Blender's linear
space (for float images, byte images are not internally converted, only input
space is stored for such images and used later).
This setting could be found in image/clip data block settings.
- Display color space which defines space in which particular display is working.
This settings could be found in scene's Color Management panel.
When render result is being displayed on the screen, apart from converting image
to display space, some additional conversions could happen.
This conversions are:
- View, which defines tone curve applying before display transformation.
These are different ways to view the image on the same display device.
For example it could be used to emulate film view on sRGB display.
- Exposure affects on image exposure before tone map is applied.
- Gamma is post-display gamma correction, could be used to match particular
display gamma.
- RGB curves are user-defined curves which are applying before display
transformation, could be used for different purposes.
All this settings by default are only applying on render result and does not
affect on other images. If some particular image needs to be affected by this
transformation, "View as Render" setting of image data block should be set to
truth. Movie clips are always affected by all display transformations.
This commit also introduces configurable color space in which sequencer is
working. This setting could be found in scene's Color Management panel and
it should be used if such stuff as grading needs to be done in color space
different from sRGB (i.e. when Film view on sRGB display is use, using VD16
space as sequencer's internal space would make grading working in space
which is close to the space using for display).
Some technical notes:
- Image buffer's float buffer is now always in linear space, even if it was
created from 16bit byte images.
- Space of byte buffer is stored in image buffer's rect_colorspace property.
- Profile of image buffer was removed since it's not longer meaningful.
- OpenGL and GLSL is supposed to always work in sRGB space. It is possible
to support other spaces, but it's quite large project which isn't so
much important.
- Legacy Color Management option disabled is emulated by using None display.
It could have some regressions, but there's no clear way to avoid them.
- If OpenColorIO is disabled on build time, it should make blender behaving
in the same way as previous release with color management enabled.
More details could be found at this page (more details would be added soon):
http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.64/Color_Management
--
Thanks to Xavier Thomas, Lukas Toene for initial work on OpenColorIO
integration and to Brecht van Lommel for some further development and code/
usecase review!
2012-09-15 10:05:07 +00:00
|
|
|
#include "IMB_colormanagement.h"
|
2008-12-26 18:00:38 +00:00
|
|
|
#include "IMB_imbuf_types.h"
|
2008-12-24 10:33:10 +00:00
|
|
|
|
2013-03-18 16:34:57 +00:00
|
|
|
#include "NOD_composite.h"
|
2020-12-02 13:25:25 +01:00
|
|
|
#include "NOD_geometry.h"
|
2021-10-22 11:56:05 +02:00
|
|
|
#include "NOD_node_declaration.hh"
|
2013-03-18 16:34:57 +00:00
|
|
|
#include "NOD_shader.h"
|
|
|
|
|
#include "NOD_texture.h"
|
2021-11-12 12:12:27 -06:00
|
|
|
#include "node_intern.hh" /* own include */
|
2008-12-29 00:55:23 +00:00
|
|
|
|
2022-01-20 10:36:56 -06:00
|
|
|
namespace blender::ed::space_node {
|
2021-12-03 16:25:17 -05:00
|
|
|
|
2020-05-01 15:21:41 +02:00
|
|
|
/* Default flags for uiItemR(). Name is kept short since this is used a lot in this file. */
|
|
|
|
|
#define DEFAULT_FLAGS UI_ITEM_R_SPLIT_EMPTY_NAME
|
|
|
|
|
|
2013-03-18 16:34:57 +00:00
|
|
|
/* ****************** SOCKET BUTTON DRAW FUNCTIONS ***************** */
|
|
|
|
|
|
2013-05-08 14:58:41 +00:00
|
|
|
static void node_socket_button_label(bContext *UNUSED(C),
|
|
|
|
|
uiLayout *layout,
|
|
|
|
|
PointerRNA *UNUSED(ptr),
|
|
|
|
|
PointerRNA *UNUSED(node_ptr),
|
|
|
|
|
const char *text)
|
2011-09-05 21:01:50 +00:00
|
|
|
{
|
2013-05-08 14:58:41 +00:00
|
|
|
uiItemL(layout, text, 0);
|
2012-05-02 07:18:51 +00:00
|
|
|
}
|
|
|
|
|
|
2008-12-24 10:33:10 +00:00
|
|
|
/* ****************** BUTTON CALLBACKS FOR ALL TREES ***************** */
|
|
|
|
|
|
2010-10-14 01:22:14 +00:00
|
|
|
static void node_buts_value(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
2008-12-24 10:33:10 +00:00
|
|
|
{
|
2021-06-02 17:19:36 +02:00
|
|
|
bNode *node = (bNode *)ptr->data;
|
2013-03-18 16:34:57 +00:00
|
|
|
/* first output stores value */
|
2021-06-02 17:19:36 +02:00
|
|
|
bNodeSocket *output = (bNodeSocket *)node->outputs.first;
|
2009-11-11 02:15:09 +00:00
|
|
|
PointerRNA sockptr;
|
2019-08-23 09:52:12 +02:00
|
|
|
RNA_pointer_create(ptr->owner_id, &RNA_NodeSocket, output, &sockptr);
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, &sockptr, "default_value", DEFAULT_FLAGS, "", ICON_NONE);
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
2010-10-14 01:22:14 +00:00
|
|
|
static void node_buts_rgb(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
2008-12-24 10:33:10 +00:00
|
|
|
{
|
2021-06-02 17:19:36 +02:00
|
|
|
bNode *node = (bNode *)ptr->data;
|
2013-03-18 16:34:57 +00:00
|
|
|
/* first output stores value */
|
2021-06-02 17:19:36 +02:00
|
|
|
bNodeSocket *output = (bNodeSocket *)node->outputs.first;
|
2009-11-11 02:15:09 +00:00
|
|
|
PointerRNA sockptr;
|
2013-03-18 16:34:57 +00:00
|
|
|
uiLayout *col;
|
2019-08-23 09:52:12 +02:00
|
|
|
RNA_pointer_create(ptr->owner_id, &RNA_NodeSocket, output, &sockptr);
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2014-04-01 11:34:00 +11:00
|
|
|
col = uiLayoutColumn(layout, false);
|
2021-06-02 17:19:36 +02:00
|
|
|
uiTemplateColorPicker(col, &sockptr, "default_value", true, false, false, false);
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(col, &sockptr, "default_value", DEFAULT_FLAGS | UI_ITEM_R_SLIDER, "", ICON_NONE);
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
2010-10-14 01:22:14 +00:00
|
|
|
static void node_buts_mix_rgb(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
2018-06-04 09:31:30 +02:00
|
|
|
{
|
2019-08-23 09:52:12 +02:00
|
|
|
bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
|
2008-12-24 10:33:10 +00:00
|
|
|
|
2020-09-08 15:20:07 +02:00
|
|
|
uiLayout *col = uiLayoutColumn(layout, false);
|
|
|
|
|
uiLayout *row = uiLayoutRow(col, true);
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(row, ptr, "blend_type", DEFAULT_FLAGS, "", ICON_NONE);
|
2019-03-26 21:16:47 +11:00
|
|
|
if (ELEM(ntree->type, NTREE_COMPOSIT, NTREE_TEXTURE)) {
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(row, ptr, "use_alpha", DEFAULT_FLAGS, "", ICON_IMAGE_RGB_ALPHA);
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2012-07-10 09:12:33 +00:00
|
|
|
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(col, ptr, "use_clamp", DEFAULT_FLAGS, nullptr, ICON_NONE);
|
2009-09-16 18:59:13 +00:00
|
|
|
}
|
|
|
|
|
|
2010-10-14 01:22:14 +00:00
|
|
|
static void node_buts_time(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
2009-09-16 18:59:13 +00:00
|
|
|
{
|
2018-08-23 10:25:54 +02:00
|
|
|
uiTemplateCurveMapping(layout, ptr, "curve", 's', false, false, false, false);
|
2009-09-16 18:59:13 +00:00
|
|
|
|
2021-12-29 11:16:18 -05:00
|
|
|
uiLayout *col = uiLayoutColumn(layout, true);
|
|
|
|
|
uiItemR(col, ptr, "frame_start", DEFAULT_FLAGS, IFACE_("Start"), ICON_NONE);
|
|
|
|
|
uiItemR(col, ptr, "frame_end", DEFAULT_FLAGS, IFACE_("End"), ICON_NONE);
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
2010-10-14 01:22:14 +00:00
|
|
|
static void node_buts_colorramp(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
2008-12-24 10:33:10 +00:00
|
|
|
{
|
2021-06-02 17:19:36 +02:00
|
|
|
uiTemplateColorRamp(layout, ptr, "color_ramp", false);
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
2010-10-14 01:22:14 +00:00
|
|
|
static void node_buts_curvevec(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
2008-12-24 10:33:10 +00:00
|
|
|
{
|
2018-08-23 10:25:54 +02:00
|
|
|
uiTemplateCurveMapping(layout, ptr, "mapping", 'v', false, false, false, false);
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
2021-09-30 19:05:08 +01:00
|
|
|
static void node_buts_curvefloat(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
|
|
|
|
{
|
|
|
|
|
uiTemplateCurveMapping(layout, ptr, "mapping", 0, false, false, false, false);
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-20 10:36:56 -06:00
|
|
|
} // namespace blender::ed::space_node
|
|
|
|
|
|
2012-06-21 14:12:14 +00:00
|
|
|
#define SAMPLE_FLT_ISNONE FLT_MAX
|
2021-07-27 14:02:22 +08:00
|
|
|
/* Bad bad, 2.5 will do better? ... no it won't! */
|
2019-01-15 23:24:20 +11:00
|
|
|
static float _sample_col[4] = {SAMPLE_FLT_ISNONE};
|
2012-06-21 14:12:14 +00:00
|
|
|
void ED_node_sample_set(const float col[4])
|
2008-12-24 10:33:10 +00:00
|
|
|
{
|
2012-06-21 14:12:14 +00:00
|
|
|
if (col) {
|
|
|
|
|
copy_v4_v4(_sample_col, col);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
copy_v4_fl(_sample_col, SAMPLE_FLT_ISNONE);
|
|
|
|
|
}
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
2022-01-20 10:36:56 -06:00
|
|
|
namespace blender::ed::space_node {
|
|
|
|
|
|
2010-10-14 01:22:14 +00:00
|
|
|
static void node_buts_curvecol(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
2008-12-24 10:33:10 +00:00
|
|
|
{
|
2021-06-02 17:19:36 +02:00
|
|
|
bNode *node = (bNode *)ptr->data;
|
|
|
|
|
CurveMapping *cumap = (CurveMapping *)node->storage;
|
2008-12-24 10:33:10 +00:00
|
|
|
|
2012-06-21 14:12:14 +00:00
|
|
|
if (_sample_col[0] != SAMPLE_FLT_ISNONE) {
|
2009-09-16 18:59:13 +00:00
|
|
|
cumap->flag |= CUMA_DRAW_SAMPLE;
|
2011-09-11 02:50:01 +00:00
|
|
|
copy_v3_v3(cumap->sample, _sample_col);
|
2009-09-16 18:59:13 +00:00
|
|
|
}
|
2012-06-21 14:12:14 +00:00
|
|
|
else {
|
2009-09-16 18:59:13 +00:00
|
|
|
cumap->flag &= ~CUMA_DRAW_SAMPLE;
|
2012-06-21 14:12:14 +00:00
|
|
|
}
|
2009-09-16 18:59:13 +00:00
|
|
|
|
2021-02-05 16:23:34 +11:00
|
|
|
/* "Tone" (Standard/Film-like) only used in the Compositor. */
|
2021-01-05 16:43:59 +01:00
|
|
|
bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
|
|
|
|
|
uiTemplateCurveMapping(
|
|
|
|
|
layout, ptr, "mapping", 'c', false, false, false, (ntree->type == NTREE_COMPOSIT));
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
2010-10-14 01:22:14 +00:00
|
|
|
static void node_buts_normal(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
2008-12-24 10:33:10 +00:00
|
|
|
{
|
2021-06-02 17:19:36 +02:00
|
|
|
bNode *node = (bNode *)ptr->data;
|
2013-03-18 16:34:57 +00:00
|
|
|
/* first output stores normal */
|
2021-06-02 17:19:36 +02:00
|
|
|
bNodeSocket *output = (bNodeSocket *)node->outputs.first;
|
2012-11-17 16:11:02 +00:00
|
|
|
PointerRNA sockptr;
|
2019-08-23 09:52:12 +02:00
|
|
|
RNA_pointer_create(ptr->owner_id, &RNA_NodeSocket, output, &sockptr);
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, &sockptr, "default_value", DEFAULT_FLAGS, "", ICON_NONE);
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
2013-03-18 16:34:57 +00:00
|
|
|
|
2010-10-14 01:22:14 +00:00
|
|
|
static void node_buts_texture(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
2008-12-24 10:33:10 +00:00
|
|
|
{
|
2021-06-02 17:19:36 +02:00
|
|
|
bNode *node = (bNode *)ptr->data;
|
2009-09-16 18:59:13 +00:00
|
|
|
|
2012-05-27 19:38:10 +00:00
|
|
|
short multi = (node->id && ((Tex *)node->id)->use_nodes && (node->type != CMP_NODE_TEXTURE) &&
|
|
|
|
|
(node->type != TEX_NODE_TEXTURE));
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, ptr, "texture", DEFAULT_FLAGS, "", ICON_NONE);
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2012-03-24 06:38:07 +00:00
|
|
|
if (multi) {
|
2021-06-26 21:35:18 +10:00
|
|
|
/* Number Drawing not optimal here, better have a list. */
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, ptr, "node_output", DEFAULT_FLAGS, "", ICON_NONE);
|
2009-09-16 18:59:13 +00:00
|
|
|
}
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
2010-10-14 01:22:14 +00:00
|
|
|
static void node_buts_math(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
2018-06-04 09:31:30 +02:00
|
|
|
{
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, ptr, "operation", DEFAULT_FLAGS, "", ICON_NONE);
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(layout, ptr, "use_clamp", DEFAULT_FLAGS, nullptr, ICON_NONE);
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
2021-12-05 16:45:41 -05:00
|
|
|
NodeResizeDirection node_get_resize_direction(const bNode *node, const int x, const int y)
|
2011-09-05 21:01:50 +00:00
|
|
|
{
|
2021-12-05 16:45:41 -05:00
|
|
|
if (node->type == NODE_FRAME) {
|
|
|
|
|
const float size = 10.0f;
|
|
|
|
|
NodeFrame *data = (NodeFrame *)node->storage;
|
|
|
|
|
|
|
|
|
|
/* shrinking frame size is determined by child nodes */
|
|
|
|
|
if (!(data->flag & NODE_FRAME_RESIZEABLE)) {
|
|
|
|
|
return NODE_RESIZE_NONE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
NodeResizeDirection dir = NODE_RESIZE_NONE;
|
|
|
|
|
|
|
|
|
|
const rctf &totr = node->totr;
|
|
|
|
|
if (x >= totr.xmax - size && x < totr.xmax && y >= totr.ymin && y < totr.ymax) {
|
|
|
|
|
dir |= NODE_RESIZE_RIGHT;
|
|
|
|
|
}
|
|
|
|
|
if (x >= totr.xmin && x < totr.xmin + size && y >= totr.ymin && y < totr.ymax) {
|
|
|
|
|
dir |= NODE_RESIZE_LEFT;
|
|
|
|
|
}
|
|
|
|
|
if (x >= totr.xmin && x < totr.xmax && y >= totr.ymax - size && y < totr.ymax) {
|
|
|
|
|
dir |= NODE_RESIZE_TOP;
|
|
|
|
|
}
|
|
|
|
|
if (x >= totr.xmin && x < totr.xmax && y >= totr.ymin && y < totr.ymin + size) {
|
|
|
|
|
dir |= NODE_RESIZE_BOTTOM;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return dir;
|
|
|
|
|
}
|
|
|
|
|
|
2011-09-05 21:01:50 +00:00
|
|
|
if (node->flag & NODE_HIDDEN) {
|
|
|
|
|
/* right part of node */
|
2021-12-05 16:45:41 -05:00
|
|
|
rctf totr = node->totr;
|
2021-11-03 16:50:43 +01:00
|
|
|
totr.xmin = node->totr.xmax - 1.0f * U.widget_unit;
|
2019-03-26 21:16:47 +11:00
|
|
|
if (BLI_rctf_isect_pt(&totr, x, y)) {
|
2012-05-22 14:13:33 +00:00
|
|
|
return NODE_RESIZE_RIGHT;
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2020-07-03 17:20:08 +02:00
|
|
|
|
2021-12-03 11:05:59 -05:00
|
|
|
return NODE_RESIZE_NONE;
|
2011-09-05 21:01:50 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-07-03 17:20:08 +02:00
|
|
|
const float size = NODE_RESIZE_MARGIN;
|
2021-12-03 16:25:17 -05:00
|
|
|
const rctf &totr = node->totr;
|
2021-12-03 11:05:59 -05:00
|
|
|
NodeResizeDirection dir = NODE_RESIZE_NONE;
|
2020-07-03 17:20:08 +02:00
|
|
|
|
|
|
|
|
if (x >= totr.xmax - size && x < totr.xmax && y >= totr.ymin && y < totr.ymax) {
|
|
|
|
|
dir |= NODE_RESIZE_RIGHT;
|
2011-09-05 21:01:50 +00:00
|
|
|
}
|
2020-07-03 17:20:08 +02:00
|
|
|
if (x >= totr.xmin && x < totr.xmin + size && y >= totr.ymin && y < totr.ymax) {
|
|
|
|
|
dir |= NODE_RESIZE_LEFT;
|
|
|
|
|
}
|
|
|
|
|
return dir;
|
2011-09-05 21:01:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ****************** BUTTON CALLBACKS FOR COMMON NODES ***************** */
|
|
|
|
|
|
2013-10-10 11:33:20 +00:00
|
|
|
static void node_draw_buttons_group(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
2011-11-04 13:31:15 +00:00
|
|
|
{
|
2019-11-25 19:41:30 +01:00
|
|
|
uiTemplateIDBrowse(
|
2021-06-02 17:19:36 +02:00
|
|
|
layout, C, ptr, "node_tree", nullptr, nullptr, nullptr, UI_TEMPLATE_ID_FILTER_ALL, nullptr);
|
2011-11-04 13:31:15 +00:00
|
|
|
}
|
|
|
|
|
|
2013-10-10 11:33:20 +00:00
|
|
|
static void node_buts_frame_ex(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
2012-05-22 14:13:33 +00:00
|
|
|
{
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, ptr, "label_size", DEFAULT_FLAGS, IFACE_("Label Size"), ICON_NONE);
|
|
|
|
|
uiItemR(layout, ptr, "shrink", DEFAULT_FLAGS, IFACE_("Shrink"), ICON_NONE);
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(layout, ptr, "text", DEFAULT_FLAGS, nullptr, ICON_NONE);
|
2011-09-05 21:01:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void node_common_set_butfunc(bNodeType *ntype)
|
|
|
|
|
{
|
2012-04-28 06:31:57 +00:00
|
|
|
switch (ntype->type) {
|
2011-09-05 21:01:50 +00:00
|
|
|
case NODE_GROUP:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_draw_buttons_group;
|
2011-09-05 21:01:50 +00:00
|
|
|
break;
|
|
|
|
|
case NODE_FRAME:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons_ex = node_buts_frame_ex;
|
2011-09-05 21:01:50 +00:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2008-12-24 10:33:10 +00:00
|
|
|
/* ****************** BUTTON CALLBACKS FOR SHADER NODES ***************** */
|
2012-06-04 19:38:33 +00:00
|
|
|
|
2012-07-09 23:07:15 +00:00
|
|
|
static void node_buts_image_user(uiLayout *layout,
|
|
|
|
|
bContext *C,
|
|
|
|
|
PointerRNA *ptr,
|
2018-01-26 08:39:38 +01:00
|
|
|
PointerRNA *imaptr,
|
|
|
|
|
PointerRNA *iuserptr,
|
Compositor: Redesign Cryptomatte node for better usability
In the current implementation, cryptomatte passes are connected to the node
and elements are picked by using the eyedropper tool on a special pick channel.
This design has two disadvantages - both connecting all passes individually
and always having to switch to the picker channel are tedious.
With the new design, the user selects the RenderLayer or Image from which the
Cryptomatte layers are directly loaded (the type of pass is determined by an
enum). This allows the node to automatically detect all relevant passes.
Then, when using the eyedropper tool, the operator looks up the selected
coordinates from the picked Image, Node backdrop or Clip and reads the picked
object directly from the Renderlayer/Image, therefore allowing to pick in any
context (e.g. by clicking on the Combined pass in the Image Viewer). The
sampled color is looked up in the metadata and the actual name is stored
in the cryptomatte node. This also allows to remove a hash by just removing
the name from the matte id.
Technically there is some loss of flexibility because the Cryptomatte pass
inputs can no longer be connected to other nodes, but since any compositing
done on them is likely to break the Cryptomatte system anyways, this isn't
really a concern in practise.
In the future, this would also allow to automatically translate values to names
by looking up the value in the associated metadata of the input, or to get a
better visualization of overlapping areas in the Pick output since we could
blend colors now that the output doesn't have to contain the exact value.
Idea + Original patch: Lucas Stockner
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D3959
2021-03-16 07:37:30 +01:00
|
|
|
const bool show_layer_selection,
|
|
|
|
|
const bool show_color_management)
|
2012-06-04 19:38:33 +00:00
|
|
|
{
|
2019-03-26 21:16:47 +11:00
|
|
|
if (!imaptr->data) {
|
2012-06-04 19:38:33 +00:00
|
|
|
return;
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2012-06-04 19:38:33 +00:00
|
|
|
|
2020-09-08 15:20:07 +02:00
|
|
|
uiLayout *col = uiLayoutColumn(layout, false);
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(col, imaptr, "source", DEFAULT_FLAGS, "", ICON_NONE);
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2020-09-08 15:20:07 +02:00
|
|
|
const int source = RNA_enum_get(imaptr, "source");
|
2012-06-04 19:38:33 +00:00
|
|
|
|
|
|
|
|
if (source == IMA_SRC_SEQUENCE) {
|
2019-01-15 23:24:20 +11:00
|
|
|
/* don't use iuser->framenr directly
|
|
|
|
|
* because it may not be updated if auto-refresh is off */
|
2012-06-04 19:38:33 +00:00
|
|
|
Scene *scene = CTX_data_scene(C);
|
2021-06-02 17:19:36 +02:00
|
|
|
ImageUser *iuser = (ImageUser *)iuserptr->data;
|
2014-01-21 12:27:38 +11:00
|
|
|
/* Image *ima = imaptr->data; */ /* UNUSED */
|
2014-01-20 18:54:03 +01:00
|
|
|
|
2012-06-04 19:38:33 +00:00
|
|
|
char numstr[32];
|
2021-06-02 17:19:36 +02:00
|
|
|
const int framenr = BKE_image_user_frame_get(iuser, CFRA, nullptr);
|
2012-06-04 19:38:33 +00:00
|
|
|
BLI_snprintf(numstr, sizeof(numstr), IFACE_("Frame: %d"), framenr);
|
|
|
|
|
uiItemL(layout, numstr, ICON_NONE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (ELEM(source, IMA_SRC_SEQUENCE, IMA_SRC_MOVIE)) {
|
2014-04-01 11:34:00 +11:00
|
|
|
col = uiLayoutColumn(layout, true);
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(col, ptr, "frame_duration", DEFAULT_FLAGS, nullptr, ICON_NONE);
|
|
|
|
|
uiItemR(col, ptr, "frame_start", DEFAULT_FLAGS, nullptr, ICON_NONE);
|
|
|
|
|
uiItemR(col, ptr, "frame_offset", DEFAULT_FLAGS, nullptr, ICON_NONE);
|
|
|
|
|
uiItemR(col, ptr, "use_cyclic", DEFAULT_FLAGS, nullptr, ICON_NONE);
|
|
|
|
|
uiItemR(col, ptr, "use_auto_refresh", DEFAULT_FLAGS, nullptr, ICON_NONE);
|
2012-06-04 19:38:33 +00:00
|
|
|
}
|
|
|
|
|
|
Compositor: Redesign Cryptomatte node for better usability
In the current implementation, cryptomatte passes are connected to the node
and elements are picked by using the eyedropper tool on a special pick channel.
This design has two disadvantages - both connecting all passes individually
and always having to switch to the picker channel are tedious.
With the new design, the user selects the RenderLayer or Image from which the
Cryptomatte layers are directly loaded (the type of pass is determined by an
enum). This allows the node to automatically detect all relevant passes.
Then, when using the eyedropper tool, the operator looks up the selected
coordinates from the picked Image, Node backdrop or Clip and reads the picked
object directly from the Renderlayer/Image, therefore allowing to pick in any
context (e.g. by clicking on the Combined pass in the Image Viewer). The
sampled color is looked up in the metadata and the actual name is stored
in the cryptomatte node. This also allows to remove a hash by just removing
the name from the matte id.
Technically there is some loss of flexibility because the Cryptomatte pass
inputs can no longer be connected to other nodes, but since any compositing
done on them is likely to break the Cryptomatte system anyways, this isn't
really a concern in practise.
In the future, this would also allow to automatically translate values to names
by looking up the value in the associated metadata of the input, or to get a
better visualization of overlapping areas in the Pick output since we could
blend colors now that the output doesn't have to contain the exact value.
Idea + Original patch: Lucas Stockner
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D3959
2021-03-16 07:37:30 +01:00
|
|
|
if (show_layer_selection && RNA_enum_get(imaptr, "type") == IMA_TYPE_MULTILAYER &&
|
2015-04-06 10:40:12 -03:00
|
|
|
RNA_boolean_get(ptr, "has_layers")) {
|
2015-02-09 23:11:30 +01:00
|
|
|
col = uiLayoutColumn(layout, false);
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(col, ptr, "layer", DEFAULT_FLAGS, nullptr, ICON_NONE);
|
2015-02-09 23:11:30 +01:00
|
|
|
}
|
2019-04-23 13:56:30 +02:00
|
|
|
|
Compositor: Redesign Cryptomatte node for better usability
In the current implementation, cryptomatte passes are connected to the node
and elements are picked by using the eyedropper tool on a special pick channel.
This design has two disadvantages - both connecting all passes individually
and always having to switch to the picker channel are tedious.
With the new design, the user selects the RenderLayer or Image from which the
Cryptomatte layers are directly loaded (the type of pass is determined by an
enum). This allows the node to automatically detect all relevant passes.
Then, when using the eyedropper tool, the operator looks up the selected
coordinates from the picked Image, Node backdrop or Clip and reads the picked
object directly from the Renderlayer/Image, therefore allowing to pick in any
context (e.g. by clicking on the Combined pass in the Image Viewer). The
sampled color is looked up in the metadata and the actual name is stored
in the cryptomatte node. This also allows to remove a hash by just removing
the name from the matte id.
Technically there is some loss of flexibility because the Cryptomatte pass
inputs can no longer be connected to other nodes, but since any compositing
done on them is likely to break the Cryptomatte system anyways, this isn't
really a concern in practise.
In the future, this would also allow to automatically translate values to names
by looking up the value in the associated metadata of the input, or to get a
better visualization of overlapping areas in the Pick output since we could
blend colors now that the output doesn't have to contain the exact value.
Idea + Original patch: Lucas Stockner
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D3959
2021-03-16 07:37:30 +01:00
|
|
|
if (show_color_management) {
|
|
|
|
|
uiLayout *split = uiLayoutSplit(layout, 0.5f, true);
|
|
|
|
|
PointerRNA colorspace_settings_ptr = RNA_pointer_get(imaptr, "colorspace_settings");
|
|
|
|
|
uiItemL(split, IFACE_("Color Space"), ICON_NONE);
|
|
|
|
|
uiItemR(split, &colorspace_settings_ptr, "name", DEFAULT_FLAGS, "", ICON_NONE);
|
2019-05-22 10:06:31 +02:00
|
|
|
|
Compositor: Redesign Cryptomatte node for better usability
In the current implementation, cryptomatte passes are connected to the node
and elements are picked by using the eyedropper tool on a special pick channel.
This design has two disadvantages - both connecting all passes individually
and always having to switch to the picker channel are tedious.
With the new design, the user selects the RenderLayer or Image from which the
Cryptomatte layers are directly loaded (the type of pass is determined by an
enum). This allows the node to automatically detect all relevant passes.
Then, when using the eyedropper tool, the operator looks up the selected
coordinates from the picked Image, Node backdrop or Clip and reads the picked
object directly from the Renderlayer/Image, therefore allowing to pick in any
context (e.g. by clicking on the Combined pass in the Image Viewer). The
sampled color is looked up in the metadata and the actual name is stored
in the cryptomatte node. This also allows to remove a hash by just removing
the name from the matte id.
Technically there is some loss of flexibility because the Cryptomatte pass
inputs can no longer be connected to other nodes, but since any compositing
done on them is likely to break the Cryptomatte system anyways, this isn't
really a concern in practise.
In the future, this would also allow to automatically translate values to names
by looking up the value in the associated metadata of the input, or to get a
better visualization of overlapping areas in the Pick output since we could
blend colors now that the output doesn't have to contain the exact value.
Idea + Original patch: Lucas Stockner
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D3959
2021-03-16 07:37:30 +01:00
|
|
|
/* Avoid losing changes image is painted. */
|
2021-06-02 17:19:36 +02:00
|
|
|
if (BKE_image_is_dirty((Image *)imaptr->data)) {
|
Compositor: Redesign Cryptomatte node for better usability
In the current implementation, cryptomatte passes are connected to the node
and elements are picked by using the eyedropper tool on a special pick channel.
This design has two disadvantages - both connecting all passes individually
and always having to switch to the picker channel are tedious.
With the new design, the user selects the RenderLayer or Image from which the
Cryptomatte layers are directly loaded (the type of pass is determined by an
enum). This allows the node to automatically detect all relevant passes.
Then, when using the eyedropper tool, the operator looks up the selected
coordinates from the picked Image, Node backdrop or Clip and reads the picked
object directly from the Renderlayer/Image, therefore allowing to pick in any
context (e.g. by clicking on the Combined pass in the Image Viewer). The
sampled color is looked up in the metadata and the actual name is stored
in the cryptomatte node. This also allows to remove a hash by just removing
the name from the matte id.
Technically there is some loss of flexibility because the Cryptomatte pass
inputs can no longer be connected to other nodes, but since any compositing
done on them is likely to break the Cryptomatte system anyways, this isn't
really a concern in practise.
In the future, this would also allow to automatically translate values to names
by looking up the value in the associated metadata of the input, or to get a
better visualization of overlapping areas in the Pick output since we could
blend colors now that the output doesn't have to contain the exact value.
Idea + Original patch: Lucas Stockner
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D3959
2021-03-16 07:37:30 +01:00
|
|
|
uiLayoutSetEnabled(split, false);
|
|
|
|
|
}
|
2019-05-22 10:06:31 +02:00
|
|
|
}
|
2012-06-04 19:38:33 +00:00
|
|
|
}
|
|
|
|
|
|
2011-11-08 11:38:16 +00:00
|
|
|
static void node_shader_buts_tex_image(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
|
|
|
|
{
|
2012-06-04 19:38:33 +00:00
|
|
|
PointerRNA imaptr = RNA_pointer_get(ptr, "image");
|
|
|
|
|
PointerRNA iuserptr = RNA_pointer_get(ptr, "image_user");
|
|
|
|
|
|
2014-01-20 18:54:03 +01:00
|
|
|
uiLayoutSetContextPointer(layout, "image_user", &iuserptr);
|
2018-07-31 10:22:19 +02:00
|
|
|
uiTemplateID(layout,
|
|
|
|
|
C,
|
|
|
|
|
ptr,
|
|
|
|
|
"image",
|
|
|
|
|
"IMAGE_OT_new",
|
|
|
|
|
"IMAGE_OT_open",
|
2021-06-02 17:19:36 +02:00
|
|
|
nullptr,
|
2018-07-31 10:22:19 +02:00
|
|
|
UI_TEMPLATE_ID_FILTER_ALL,
|
2019-11-25 19:41:30 +01:00
|
|
|
false,
|
2021-06-02 17:19:36 +02:00
|
|
|
nullptr);
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, ptr, "interpolation", DEFAULT_FLAGS, "", ICON_NONE);
|
|
|
|
|
uiItemR(layout, ptr, "projection", DEFAULT_FLAGS, "", ICON_NONE);
|
2012-09-04 13:29:07 +00:00
|
|
|
|
2012-09-08 06:40:03 +00:00
|
|
|
if (RNA_enum_get(ptr, "projection") == SHD_PROJ_BOX) {
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, ptr, "projection_blend", DEFAULT_FLAGS, "Blend", ICON_NONE);
|
2012-09-08 06:40:03 +00:00
|
|
|
}
|
2011-11-08 11:38:16 +00:00
|
|
|
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, ptr, "extension", DEFAULT_FLAGS, "", ICON_NONE);
|
2015-07-21 22:09:52 +02:00
|
|
|
|
2021-07-03 23:08:40 +10:00
|
|
|
/* NOTE: image user properties used directly here, unlike compositor image node,
|
2012-07-02 16:27:09 +00:00
|
|
|
* which redefines them in the node struct RNA to get proper updates.
|
|
|
|
|
*/
|
Compositor: Redesign Cryptomatte node for better usability
In the current implementation, cryptomatte passes are connected to the node
and elements are picked by using the eyedropper tool on a special pick channel.
This design has two disadvantages - both connecting all passes individually
and always having to switch to the picker channel are tedious.
With the new design, the user selects the RenderLayer or Image from which the
Cryptomatte layers are directly loaded (the type of pass is determined by an
enum). This allows the node to automatically detect all relevant passes.
Then, when using the eyedropper tool, the operator looks up the selected
coordinates from the picked Image, Node backdrop or Clip and reads the picked
object directly from the Renderlayer/Image, therefore allowing to pick in any
context (e.g. by clicking on the Combined pass in the Image Viewer). The
sampled color is looked up in the metadata and the actual name is stored
in the cryptomatte node. This also allows to remove a hash by just removing
the name from the matte id.
Technically there is some loss of flexibility because the Cryptomatte pass
inputs can no longer be connected to other nodes, but since any compositing
done on them is likely to break the Cryptomatte system anyways, this isn't
really a concern in practise.
In the future, this would also allow to automatically translate values to names
by looking up the value in the associated metadata of the input, or to get a
better visualization of overlapping areas in the Pick output since we could
blend colors now that the output doesn't have to contain the exact value.
Idea + Original patch: Lucas Stockner
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D3959
2021-03-16 07:37:30 +01:00
|
|
|
node_buts_image_user(layout, C, &iuserptr, &imaptr, &iuserptr, false, true);
|
2012-06-04 19:38:33 +00:00
|
|
|
}
|
2012-03-08 19:52:58 +00:00
|
|
|
|
2013-10-10 11:33:20 +00:00
|
|
|
static void node_shader_buts_tex_image_ex(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
2013-07-22 08:56:51 +00:00
|
|
|
{
|
|
|
|
|
PointerRNA iuserptr = RNA_pointer_get(ptr, "image_user");
|
2021-06-02 17:19:36 +02:00
|
|
|
uiTemplateImage(layout, C, ptr, "image", &iuserptr, false, false);
|
2013-07-22 08:56:51 +00:00
|
|
|
}
|
|
|
|
|
|
2012-03-08 19:52:58 +00:00
|
|
|
static void node_shader_buts_tex_environment(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
|
|
|
|
{
|
2012-06-04 19:38:33 +00:00
|
|
|
PointerRNA imaptr = RNA_pointer_get(ptr, "image");
|
|
|
|
|
PointerRNA iuserptr = RNA_pointer_get(ptr, "image_user");
|
|
|
|
|
|
2014-01-20 18:54:03 +01:00
|
|
|
uiLayoutSetContextPointer(layout, "image_user", &iuserptr);
|
2018-01-03 21:54:02 +11:00
|
|
|
uiTemplateID(layout,
|
|
|
|
|
C,
|
|
|
|
|
ptr,
|
|
|
|
|
"image",
|
2018-07-31 10:22:19 +02:00
|
|
|
"IMAGE_OT_new",
|
|
|
|
|
"IMAGE_OT_open",
|
2021-06-02 17:19:36 +02:00
|
|
|
nullptr,
|
2018-07-31 10:22:19 +02:00
|
|
|
UI_TEMPLATE_ID_FILTER_ALL,
|
2019-11-25 19:41:30 +01:00
|
|
|
false,
|
2021-06-02 17:19:36 +02:00
|
|
|
nullptr);
|
2012-06-04 19:38:33 +00:00
|
|
|
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, ptr, "interpolation", DEFAULT_FLAGS, "", ICON_NONE);
|
|
|
|
|
uiItemR(layout, ptr, "projection", DEFAULT_FLAGS, "", ICON_NONE);
|
2019-04-23 13:56:30 +02:00
|
|
|
|
Compositor: Redesign Cryptomatte node for better usability
In the current implementation, cryptomatte passes are connected to the node
and elements are picked by using the eyedropper tool on a special pick channel.
This design has two disadvantages - both connecting all passes individually
and always having to switch to the picker channel are tedious.
With the new design, the user selects the RenderLayer or Image from which the
Cryptomatte layers are directly loaded (the type of pass is determined by an
enum). This allows the node to automatically detect all relevant passes.
Then, when using the eyedropper tool, the operator looks up the selected
coordinates from the picked Image, Node backdrop or Clip and reads the picked
object directly from the Renderlayer/Image, therefore allowing to pick in any
context (e.g. by clicking on the Combined pass in the Image Viewer). The
sampled color is looked up in the metadata and the actual name is stored
in the cryptomatte node. This also allows to remove a hash by just removing
the name from the matte id.
Technically there is some loss of flexibility because the Cryptomatte pass
inputs can no longer be connected to other nodes, but since any compositing
done on them is likely to break the Cryptomatte system anyways, this isn't
really a concern in practise.
In the future, this would also allow to automatically translate values to names
by looking up the value in the associated metadata of the input, or to get a
better visualization of overlapping areas in the Pick output since we could
blend colors now that the output doesn't have to contain the exact value.
Idea + Original patch: Lucas Stockner
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D3959
2021-03-16 07:37:30 +01:00
|
|
|
node_buts_image_user(layout, C, &iuserptr, &imaptr, &iuserptr, false, true);
|
2012-03-08 19:52:58 +00:00
|
|
|
}
|
|
|
|
|
|
2015-02-09 22:25:12 +01:00
|
|
|
static void node_shader_buts_tex_environment_ex(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
|
|
|
|
{
|
|
|
|
|
PointerRNA iuserptr = RNA_pointer_get(ptr, "image_user");
|
2021-06-02 17:19:36 +02:00
|
|
|
uiTemplateImage(layout, C, ptr, "image", &iuserptr, false, false);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, ptr, "interpolation", DEFAULT_FLAGS, IFACE_("Interpolation"), ICON_NONE);
|
|
|
|
|
uiItemR(layout, ptr, "projection", DEFAULT_FLAGS, IFACE_("Projection"), ICON_NONE);
|
2015-02-09 22:25:12 +01:00
|
|
|
}
|
|
|
|
|
|
2018-01-21 00:40:42 +01:00
|
|
|
static void node_shader_buts_displacement(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
|
|
|
|
{
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, ptr, "space", DEFAULT_FLAGS, "", 0);
|
2018-01-21 00:40:42 +01:00
|
|
|
}
|
|
|
|
|
|
2011-11-08 11:38:16 +00:00
|
|
|
static void node_shader_buts_glossy(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
|
|
|
|
{
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, ptr, "distribution", DEFAULT_FLAGS, "", ICON_NONE);
|
2011-11-08 11:38:16 +00:00
|
|
|
}
|
|
|
|
|
|
2018-07-05 12:44:15 +02:00
|
|
|
static void node_buts_output_shader(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
|
|
|
|
{
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, ptr, "target", DEFAULT_FLAGS, "", ICON_NONE);
|
2018-07-05 12:44:15 +02:00
|
|
|
}
|
|
|
|
|
|
2008-12-24 10:33:10 +00:00
|
|
|
/* only once called */
|
|
|
|
|
static void node_shader_set_butfunc(bNodeType *ntype)
|
|
|
|
|
{
|
2012-04-28 06:31:57 +00:00
|
|
|
switch (ntype->type) {
|
2008-12-24 10:33:10 +00:00
|
|
|
case SH_NODE_NORMAL:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_normal;
|
2008-12-24 10:33:10 +00:00
|
|
|
break;
|
|
|
|
|
case SH_NODE_CURVE_VEC:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_curvevec;
|
2008-12-24 10:33:10 +00:00
|
|
|
break;
|
|
|
|
|
case SH_NODE_CURVE_RGB:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_curvecol;
|
2008-12-24 10:33:10 +00:00
|
|
|
break;
|
2021-09-30 19:05:08 +01:00
|
|
|
case SH_NODE_CURVE_FLOAT:
|
|
|
|
|
ntype->draw_buttons = node_buts_curvefloat;
|
|
|
|
|
break;
|
2008-12-24 10:33:10 +00:00
|
|
|
case SH_NODE_VALUE:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_value;
|
2008-12-24 10:33:10 +00:00
|
|
|
break;
|
|
|
|
|
case SH_NODE_RGB:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_rgb;
|
2008-12-24 10:33:10 +00:00
|
|
|
break;
|
|
|
|
|
case SH_NODE_MIX_RGB:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_mix_rgb;
|
2008-12-24 10:33:10 +00:00
|
|
|
break;
|
|
|
|
|
case SH_NODE_VALTORGB:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_colorramp;
|
2008-12-24 10:33:10 +00:00
|
|
|
break;
|
2018-06-04 09:31:30 +02:00
|
|
|
case SH_NODE_MATH:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_math;
|
2018-06-04 09:31:30 +02:00
|
|
|
break;
|
2011-11-08 11:38:16 +00:00
|
|
|
case SH_NODE_TEX_IMAGE:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_shader_buts_tex_image;
|
|
|
|
|
ntype->draw_buttons_ex = node_shader_buts_tex_image_ex;
|
2011-11-08 11:38:16 +00:00
|
|
|
break;
|
|
|
|
|
case SH_NODE_TEX_ENVIRONMENT:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_shader_buts_tex_environment;
|
2015-02-09 22:25:12 +01:00
|
|
|
ntype->draw_buttons_ex = node_shader_buts_tex_environment_ex;
|
2011-11-08 11:38:16 +00:00
|
|
|
break;
|
2018-01-21 00:40:42 +01:00
|
|
|
case SH_NODE_DISPLACEMENT:
|
|
|
|
|
case SH_NODE_VECTOR_DISPLACEMENT:
|
|
|
|
|
ntype->draw_buttons = node_shader_buts_displacement;
|
|
|
|
|
break;
|
2011-11-08 11:38:16 +00:00
|
|
|
case SH_NODE_BSDF_GLOSSY:
|
|
|
|
|
case SH_NODE_BSDF_GLASS:
|
2012-11-06 19:59:02 +00:00
|
|
|
case SH_NODE_BSDF_REFRACTION:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_shader_buts_glossy;
|
2011-11-08 11:38:16 +00:00
|
|
|
break;
|
2018-07-05 12:44:15 +02:00
|
|
|
case SH_NODE_OUTPUT_MATERIAL:
|
2018-06-27 14:41:53 +02:00
|
|
|
case SH_NODE_OUTPUT_LIGHT:
|
2018-07-05 12:44:15 +02:00
|
|
|
case SH_NODE_OUTPUT_WORLD:
|
|
|
|
|
ntype->draw_buttons = node_buts_output_shader;
|
|
|
|
|
break;
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ****************** BUTTON CALLBACKS FOR COMPOSITE NODES ***************** */
|
|
|
|
|
|
2015-04-06 10:40:12 -03:00
|
|
|
static void node_buts_image_views(uiLayout *layout,
|
|
|
|
|
bContext *UNUSED(C),
|
|
|
|
|
PointerRNA *ptr,
|
|
|
|
|
PointerRNA *imaptr)
|
|
|
|
|
{
|
|
|
|
|
uiLayout *col;
|
|
|
|
|
|
2019-03-26 21:16:47 +11:00
|
|
|
if (!imaptr->data) {
|
2015-04-06 10:40:12 -03:00
|
|
|
return;
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2015-04-06 10:40:12 -03:00
|
|
|
|
|
|
|
|
col = uiLayoutColumn(layout, false);
|
|
|
|
|
|
|
|
|
|
if (RNA_boolean_get(ptr, "has_views")) {
|
2019-03-26 21:16:47 +11:00
|
|
|
if (RNA_enum_get(ptr, "view") == 0) {
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(col, ptr, "view", DEFAULT_FLAGS, nullptr, ICON_CAMERA_STEREO);
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
|
|
|
|
else {
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(col, ptr, "view", DEFAULT_FLAGS, nullptr, ICON_SCENE);
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2015-04-06 10:40:12 -03:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2010-10-16 02:40:31 +00:00
|
|
|
static void node_composit_buts_image(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
2008-12-24 10:33:10 +00:00
|
|
|
{
|
2021-06-02 17:19:36 +02:00
|
|
|
bNode *node = (bNode *)ptr->data;
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2020-09-08 15:20:07 +02:00
|
|
|
PointerRNA iuserptr;
|
2019-08-23 09:52:12 +02:00
|
|
|
RNA_pointer_create(ptr->owner_id, &RNA_ImageUser, node->storage, &iuserptr);
|
2014-01-20 18:54:03 +01:00
|
|
|
uiLayoutSetContextPointer(layout, "image_user", &iuserptr);
|
2018-01-03 21:54:02 +11:00
|
|
|
uiTemplateID(layout,
|
|
|
|
|
C,
|
|
|
|
|
ptr,
|
|
|
|
|
"image",
|
2018-07-31 10:22:19 +02:00
|
|
|
"IMAGE_OT_new",
|
|
|
|
|
"IMAGE_OT_open",
|
2021-06-02 17:19:36 +02:00
|
|
|
nullptr,
|
2018-07-31 10:22:19 +02:00
|
|
|
UI_TEMPLATE_ID_FILTER_ALL,
|
2019-11-25 19:41:30 +01:00
|
|
|
false,
|
2021-06-02 17:19:36 +02:00
|
|
|
nullptr);
|
2019-03-26 21:16:47 +11:00
|
|
|
if (!node->id) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2020-09-08 15:20:07 +02:00
|
|
|
PointerRNA imaptr = RNA_pointer_get(ptr, "image");
|
2014-01-20 18:54:03 +01:00
|
|
|
|
Compositor: Redesign Cryptomatte node for better usability
In the current implementation, cryptomatte passes are connected to the node
and elements are picked by using the eyedropper tool on a special pick channel.
This design has two disadvantages - both connecting all passes individually
and always having to switch to the picker channel are tedious.
With the new design, the user selects the RenderLayer or Image from which the
Cryptomatte layers are directly loaded (the type of pass is determined by an
enum). This allows the node to automatically detect all relevant passes.
Then, when using the eyedropper tool, the operator looks up the selected
coordinates from the picked Image, Node backdrop or Clip and reads the picked
object directly from the Renderlayer/Image, therefore allowing to pick in any
context (e.g. by clicking on the Combined pass in the Image Viewer). The
sampled color is looked up in the metadata and the actual name is stored
in the cryptomatte node. This also allows to remove a hash by just removing
the name from the matte id.
Technically there is some loss of flexibility because the Cryptomatte pass
inputs can no longer be connected to other nodes, but since any compositing
done on them is likely to break the Cryptomatte system anyways, this isn't
really a concern in practise.
In the future, this would also allow to automatically translate values to names
by looking up the value in the associated metadata of the input, or to get a
better visualization of overlapping areas in the Pick output since we could
blend colors now that the output doesn't have to contain the exact value.
Idea + Original patch: Lucas Stockner
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D3959
2021-03-16 07:37:30 +01:00
|
|
|
node_buts_image_user(layout, C, ptr, &imaptr, &iuserptr, true, true);
|
2015-04-06 10:40:12 -03:00
|
|
|
|
|
|
|
|
node_buts_image_views(layout, C, ptr, &imaptr);
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
2013-10-10 11:33:20 +00:00
|
|
|
static void node_composit_buts_image_ex(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
2012-09-25 10:14:07 +00:00
|
|
|
{
|
2021-06-02 17:19:36 +02:00
|
|
|
bNode *node = (bNode *)ptr->data;
|
2012-09-25 10:14:07 +00:00
|
|
|
|
2020-09-08 15:20:07 +02:00
|
|
|
PointerRNA iuserptr;
|
2019-08-23 09:52:12 +02:00
|
|
|
RNA_pointer_create(ptr->owner_id, &RNA_ImageUser, node->storage, &iuserptr);
|
2014-01-20 18:54:03 +01:00
|
|
|
uiLayoutSetContextPointer(layout, "image_user", &iuserptr);
|
2021-06-02 17:19:36 +02:00
|
|
|
uiTemplateImage(layout, C, ptr, "image", &iuserptr, false, true);
|
2012-09-25 10:14:07 +00:00
|
|
|
}
|
|
|
|
|
|
2021-12-15 21:30:04 -05:00
|
|
|
static void node_composit_buts_huecorrect(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
{
|
2021-12-15 21:30:04 -05:00
|
|
|
bNode *node = (bNode *)ptr->data;
|
|
|
|
|
CurveMapping *cumap = (CurveMapping *)node->storage;
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
|
2021-12-15 21:30:04 -05:00
|
|
|
if (_sample_col[0] != SAMPLE_FLT_ISNONE) {
|
|
|
|
|
cumap->flag |= CUMA_DRAW_SAMPLE;
|
|
|
|
|
copy_v3_v3(cumap->sample, _sample_col);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
cumap->flag &= ~CUMA_DRAW_SAMPLE;
|
|
|
|
|
}
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
|
2021-12-15 21:30:04 -05:00
|
|
|
uiTemplateCurveMapping(layout, ptr, "mapping", 'h', false, false, false, false);
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
}
|
|
|
|
|
|
2021-12-15 21:30:04 -05:00
|
|
|
static void node_composit_buts_ycc(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
2012-08-14 14:31:39 +00:00
|
|
|
{
|
2021-12-15 21:30:04 -05:00
|
|
|
uiItemR(layout, ptr, "mode", DEFAULT_FLAGS, "", ICON_NONE);
|
2012-08-14 14:31:39 +00:00
|
|
|
}
|
|
|
|
|
|
2012-09-15 01:52:28 +00:00
|
|
|
static void node_composit_backdrop_viewer(
|
|
|
|
|
SpaceNode *snode, ImBuf *backdrop, bNode *node, int x, int y)
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
{
|
|
|
|
|
// node_composit_backdrop_canvas(snode, backdrop, node, x, y);
|
2012-06-08 09:17:07 +00:00
|
|
|
if (node->custom1 == 0) {
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
const float backdropWidth = backdrop->x;
|
|
|
|
|
const float backdropHeight = backdrop->y;
|
2017-09-13 21:46:43 +10:00
|
|
|
const float cx = x + snode->zoom * backdropWidth * node->custom3;
|
2012-05-27 19:38:10 +00:00
|
|
|
const float cy = y + snode->zoom * backdropHeight * node->custom4;
|
2017-09-13 21:46:43 +10:00
|
|
|
const float cross_size = 12 * U.pixelsize;
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
|
2018-07-18 00:12:21 +02:00
|
|
|
GPUVertFormat *format = immVertexFormat();
|
|
|
|
|
uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
|
2016-12-01 17:07:39 +01:00
|
|
|
|
|
|
|
|
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
|
|
|
|
|
|
|
|
|
|
immUniformColor3f(1.0f, 1.0f, 1.0f);
|
|
|
|
|
|
2018-07-18 00:12:21 +02:00
|
|
|
immBegin(GPU_PRIM_LINES, 4);
|
2017-09-13 23:44:13 +10:00
|
|
|
immVertex2f(pos, cx - cross_size, cy - cross_size);
|
|
|
|
|
immVertex2f(pos, cx + cross_size, cy + cross_size);
|
|
|
|
|
immVertex2f(pos, cx + cross_size, cy - cross_size);
|
|
|
|
|
immVertex2f(pos, cx - cross_size, cy + cross_size);
|
2016-12-01 17:07:39 +01:00
|
|
|
immEnd();
|
|
|
|
|
|
|
|
|
|
immUnbindProgram();
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2012-09-15 01:52:28 +00:00
|
|
|
static void node_composit_backdrop_boxmask(
|
|
|
|
|
SpaceNode *snode, ImBuf *backdrop, bNode *node, int x, int y)
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
{
|
2021-06-02 17:19:36 +02:00
|
|
|
NodeBoxMask *boxmask = (NodeBoxMask *)node->storage;
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
const float backdropWidth = backdrop->x;
|
|
|
|
|
const float backdropHeight = backdrop->y;
|
2012-05-27 19:38:10 +00:00
|
|
|
const float aspect = backdropWidth / backdropHeight;
|
Cleanup: Internal degrees removal.
This patch changes most of the reamining degrees usage in internal code into radians.
I let a few which I know off asside, for reasons explained below - and I'm not sure to have found out all of them.
WARNING: this introduces forward incompatibility, which means files saved from this version won't open 100% correctly
in previous versions (a few angle properties would use radians values as degrees...).
Details:
- Data:
-- Lamp.spotsize: Game engine exposed this setting in degrees, to not break the API here I kept it as such
(using getter/setter functions), still using radians internally.
-- Mesh.smoothresh: Didn't touch to this one, as we will hopefully replace it completely by loop normals currently in dev.
- Modifiers:
-- EdgeSplitModifierData.split_angle, BevelModifierData.bevel_angle: Done.
- Postprocessing:
-- WipeVars.angle (sequencer's effect), NodeBokehImage.angle, NodeBoxMask.rotation, NodeEllipseMask.rotation: Done.
- BGE:
-- bConstraintActuator: Orientation type done (the minloc[0] & maxloc[0] cases). Did not touch to 'limit location' type,
it can also limit rotation, but it exposes through RNA the same limit_min/limit_max, which hence
can be either distance or angle values, depending on the mode. Will leave this to BGE team.
-- bSoundActuator.cone_outer_angle_3d, bSoundActuator.cone_inner_angle_3d: Done (note I kept degrees in BGE itself,
as it seems this is the expected value here...).
-- bRadarSensor.angle: Done.
Reviewers: brecht, campbellbarton, sergey, gaiaclary, dfelinto, moguri, jbakker, lukastoenne, howardt
Reviewed By: brecht, campbellbarton, sergey, gaiaclary, moguri, jbakker, lukastoenne, howardt
Thanks to all!
Differential Revision: http://developer.blender.org/D59
2013-12-03 20:09:25 +01:00
|
|
|
const float rad = -boxmask->rotation;
|
2012-05-22 21:16:59 +00:00
|
|
|
const float cosine = cosf(rad);
|
|
|
|
|
const float sine = sinf(rad);
|
|
|
|
|
const float halveBoxWidth = backdropWidth * (boxmask->width / 2.0f);
|
|
|
|
|
const float halveBoxHeight = backdropHeight * (boxmask->height / 2.0f) * aspect;
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
|
|
|
|
|
float cx, cy, x1, x2, x3, x4;
|
|
|
|
|
float y1, y2, y3, y4;
|
|
|
|
|
|
2012-05-27 19:38:10 +00:00
|
|
|
cx = x + snode->zoom * backdropWidth * boxmask->x;
|
|
|
|
|
cy = y + snode->zoom * backdropHeight * boxmask->y;
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
|
2012-05-27 19:38:10 +00:00
|
|
|
x1 = cx - (cosine * halveBoxWidth + sine * halveBoxHeight) * snode->zoom;
|
|
|
|
|
x2 = cx - (cosine * -halveBoxWidth + sine * halveBoxHeight) * snode->zoom;
|
|
|
|
|
x3 = cx - (cosine * -halveBoxWidth + sine * -halveBoxHeight) * snode->zoom;
|
|
|
|
|
x4 = cx - (cosine * halveBoxWidth + sine * -halveBoxHeight) * snode->zoom;
|
|
|
|
|
y1 = cy - (-sine * halveBoxWidth + cosine * halveBoxHeight) * snode->zoom;
|
|
|
|
|
y2 = cy - (-sine * -halveBoxWidth + cosine * halveBoxHeight) * snode->zoom;
|
|
|
|
|
y3 = cy - (-sine * -halveBoxWidth + cosine * -halveBoxHeight) * snode->zoom;
|
|
|
|
|
y4 = cy - (-sine * halveBoxWidth + cosine * -halveBoxHeight) * snode->zoom;
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
|
2018-07-18 00:12:21 +02:00
|
|
|
GPUVertFormat *format = immVertexFormat();
|
|
|
|
|
uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
|
2016-12-01 17:07:39 +01:00
|
|
|
|
|
|
|
|
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
|
|
|
|
|
|
|
|
|
|
immUniformColor3f(1.0f, 1.0f, 1.0f);
|
|
|
|
|
|
2018-07-18 00:12:21 +02:00
|
|
|
immBegin(GPU_PRIM_LINE_LOOP, 4);
|
2016-12-01 17:07:39 +01:00
|
|
|
immVertex2f(pos, x1, y1);
|
|
|
|
|
immVertex2f(pos, x2, y2);
|
|
|
|
|
immVertex2f(pos, x3, y3);
|
|
|
|
|
immVertex2f(pos, x4, y4);
|
|
|
|
|
immEnd();
|
|
|
|
|
|
|
|
|
|
immUnbindProgram();
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
}
|
|
|
|
|
|
2012-09-15 01:52:28 +00:00
|
|
|
static void node_composit_backdrop_ellipsemask(
|
|
|
|
|
SpaceNode *snode, ImBuf *backdrop, bNode *node, int x, int y)
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
{
|
2021-06-02 17:19:36 +02:00
|
|
|
NodeEllipseMask *ellipsemask = (NodeEllipseMask *)node->storage;
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
const float backdropWidth = backdrop->x;
|
|
|
|
|
const float backdropHeight = backdrop->y;
|
2012-05-22 21:16:59 +00:00
|
|
|
const float aspect = backdropWidth / backdropHeight;
|
Cleanup: Internal degrees removal.
This patch changes most of the reamining degrees usage in internal code into radians.
I let a few which I know off asside, for reasons explained below - and I'm not sure to have found out all of them.
WARNING: this introduces forward incompatibility, which means files saved from this version won't open 100% correctly
in previous versions (a few angle properties would use radians values as degrees...).
Details:
- Data:
-- Lamp.spotsize: Game engine exposed this setting in degrees, to not break the API here I kept it as such
(using getter/setter functions), still using radians internally.
-- Mesh.smoothresh: Didn't touch to this one, as we will hopefully replace it completely by loop normals currently in dev.
- Modifiers:
-- EdgeSplitModifierData.split_angle, BevelModifierData.bevel_angle: Done.
- Postprocessing:
-- WipeVars.angle (sequencer's effect), NodeBokehImage.angle, NodeBoxMask.rotation, NodeEllipseMask.rotation: Done.
- BGE:
-- bConstraintActuator: Orientation type done (the minloc[0] & maxloc[0] cases). Did not touch to 'limit location' type,
it can also limit rotation, but it exposes through RNA the same limit_min/limit_max, which hence
can be either distance or angle values, depending on the mode. Will leave this to BGE team.
-- bSoundActuator.cone_outer_angle_3d, bSoundActuator.cone_inner_angle_3d: Done (note I kept degrees in BGE itself,
as it seems this is the expected value here...).
-- bRadarSensor.angle: Done.
Reviewers: brecht, campbellbarton, sergey, gaiaclary, dfelinto, moguri, jbakker, lukastoenne, howardt
Reviewed By: brecht, campbellbarton, sergey, gaiaclary, moguri, jbakker, lukastoenne, howardt
Thanks to all!
Differential Revision: http://developer.blender.org/D59
2013-12-03 20:09:25 +01:00
|
|
|
const float rad = -ellipsemask->rotation;
|
2012-05-22 21:16:59 +00:00
|
|
|
const float cosine = cosf(rad);
|
|
|
|
|
const float sine = sinf(rad);
|
|
|
|
|
const float halveBoxWidth = backdropWidth * (ellipsemask->width / 2.0f);
|
|
|
|
|
const float halveBoxHeight = backdropHeight * (ellipsemask->height / 2.0f) * aspect;
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
|
|
|
|
|
float cx, cy, x1, x2, x3, x4;
|
|
|
|
|
float y1, y2, y3, y4;
|
|
|
|
|
|
2012-05-27 19:38:10 +00:00
|
|
|
cx = x + snode->zoom * backdropWidth * ellipsemask->x;
|
|
|
|
|
cy = y + snode->zoom * backdropHeight * ellipsemask->y;
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
|
2012-05-27 19:38:10 +00:00
|
|
|
x1 = cx - (cosine * halveBoxWidth + sine * halveBoxHeight) * snode->zoom;
|
|
|
|
|
x2 = cx - (cosine * -halveBoxWidth + sine * halveBoxHeight) * snode->zoom;
|
|
|
|
|
x3 = cx - (cosine * -halveBoxWidth + sine * -halveBoxHeight) * snode->zoom;
|
|
|
|
|
x4 = cx - (cosine * halveBoxWidth + sine * -halveBoxHeight) * snode->zoom;
|
|
|
|
|
y1 = cy - (-sine * halveBoxWidth + cosine * halveBoxHeight) * snode->zoom;
|
|
|
|
|
y2 = cy - (-sine * -halveBoxWidth + cosine * halveBoxHeight) * snode->zoom;
|
|
|
|
|
y3 = cy - (-sine * -halveBoxWidth + cosine * -halveBoxHeight) * snode->zoom;
|
|
|
|
|
y4 = cy - (-sine * halveBoxWidth + cosine * -halveBoxHeight) * snode->zoom;
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
|
2018-07-18 00:12:21 +02:00
|
|
|
GPUVertFormat *format = immVertexFormat();
|
|
|
|
|
uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
|
2016-12-01 17:07:39 +01:00
|
|
|
|
|
|
|
|
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
|
|
|
|
|
|
|
|
|
|
immUniformColor3f(1.0f, 1.0f, 1.0f);
|
|
|
|
|
|
2018-07-18 00:12:21 +02:00
|
|
|
immBegin(GPU_PRIM_LINE_LOOP, 4);
|
2016-12-01 17:07:39 +01:00
|
|
|
immVertex2f(pos, x1, y1);
|
|
|
|
|
immVertex2f(pos, x2, y2);
|
|
|
|
|
immVertex2f(pos, x3, y3);
|
|
|
|
|
immVertex2f(pos, x4, y4);
|
|
|
|
|
immEnd();
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
|
2016-12-01 17:07:39 +01:00
|
|
|
immUnbindProgram();
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
}
|
|
|
|
|
|
Compositor: Redesign Cryptomatte node for better usability
In the current implementation, cryptomatte passes are connected to the node
and elements are picked by using the eyedropper tool on a special pick channel.
This design has two disadvantages - both connecting all passes individually
and always having to switch to the picker channel are tedious.
With the new design, the user selects the RenderLayer or Image from which the
Cryptomatte layers are directly loaded (the type of pass is determined by an
enum). This allows the node to automatically detect all relevant passes.
Then, when using the eyedropper tool, the operator looks up the selected
coordinates from the picked Image, Node backdrop or Clip and reads the picked
object directly from the Renderlayer/Image, therefore allowing to pick in any
context (e.g. by clicking on the Combined pass in the Image Viewer). The
sampled color is looked up in the metadata and the actual name is stored
in the cryptomatte node. This also allows to remove a hash by just removing
the name from the matte id.
Technically there is some loss of flexibility because the Cryptomatte pass
inputs can no longer be connected to other nodes, but since any compositing
done on them is likely to break the Cryptomatte system anyways, this isn't
really a concern in practise.
In the future, this would also allow to automatically translate values to names
by looking up the value in the associated metadata of the input, or to get a
better visualization of overlapping areas in the Pick output since we could
blend colors now that the output doesn't have to contain the exact value.
Idea + Original patch: Lucas Stockner
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D3959
2021-03-16 07:37:30 +01:00
|
|
|
static void node_composit_buts_cryptomatte_legacy(uiLayout *layout,
|
|
|
|
|
bContext *UNUSED(C),
|
|
|
|
|
PointerRNA *ptr)
|
2018-07-18 13:03:09 +02:00
|
|
|
{
|
|
|
|
|
uiLayout *col = uiLayoutColumn(layout, true);
|
|
|
|
|
|
|
|
|
|
uiItemL(col, IFACE_("Matte Objects:"), ICON_NONE);
|
|
|
|
|
|
|
|
|
|
uiLayout *row = uiLayoutRow(col, true);
|
Compositor: Redesign Cryptomatte node for better usability
In the current implementation, cryptomatte passes are connected to the node
and elements are picked by using the eyedropper tool on a special pick channel.
This design has two disadvantages - both connecting all passes individually
and always having to switch to the picker channel are tedious.
With the new design, the user selects the RenderLayer or Image from which the
Cryptomatte layers are directly loaded (the type of pass is determined by an
enum). This allows the node to automatically detect all relevant passes.
Then, when using the eyedropper tool, the operator looks up the selected
coordinates from the picked Image, Node backdrop or Clip and reads the picked
object directly from the Renderlayer/Image, therefore allowing to pick in any
context (e.g. by clicking on the Combined pass in the Image Viewer). The
sampled color is looked up in the metadata and the actual name is stored
in the cryptomatte node. This also allows to remove a hash by just removing
the name from the matte id.
Technically there is some loss of flexibility because the Cryptomatte pass
inputs can no longer be connected to other nodes, but since any compositing
done on them is likely to break the Cryptomatte system anyways, this isn't
really a concern in practise.
In the future, this would also allow to automatically translate values to names
by looking up the value in the associated metadata of the input, or to get a
better visualization of overlapping areas in the Pick output since we could
blend colors now that the output doesn't have to contain the exact value.
Idea + Original patch: Lucas Stockner
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D3959
2021-03-16 07:37:30 +01:00
|
|
|
uiTemplateCryptoPicker(row, ptr, "add", ICON_ADD);
|
|
|
|
|
uiTemplateCryptoPicker(row, ptr, "remove", ICON_REMOVE);
|
2018-07-18 13:03:09 +02:00
|
|
|
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(col, ptr, "matte_id", DEFAULT_FLAGS, "", ICON_NONE);
|
2018-07-18 13:03:09 +02:00
|
|
|
}
|
|
|
|
|
|
Compositor: Redesign Cryptomatte node for better usability
In the current implementation, cryptomatte passes are connected to the node
and elements are picked by using the eyedropper tool on a special pick channel.
This design has two disadvantages - both connecting all passes individually
and always having to switch to the picker channel are tedious.
With the new design, the user selects the RenderLayer or Image from which the
Cryptomatte layers are directly loaded (the type of pass is determined by an
enum). This allows the node to automatically detect all relevant passes.
Then, when using the eyedropper tool, the operator looks up the selected
coordinates from the picked Image, Node backdrop or Clip and reads the picked
object directly from the Renderlayer/Image, therefore allowing to pick in any
context (e.g. by clicking on the Combined pass in the Image Viewer). The
sampled color is looked up in the metadata and the actual name is stored
in the cryptomatte node. This also allows to remove a hash by just removing
the name from the matte id.
Technically there is some loss of flexibility because the Cryptomatte pass
inputs can no longer be connected to other nodes, but since any compositing
done on them is likely to break the Cryptomatte system anyways, this isn't
really a concern in practise.
In the future, this would also allow to automatically translate values to names
by looking up the value in the associated metadata of the input, or to get a
better visualization of overlapping areas in the Pick output since we could
blend colors now that the output doesn't have to contain the exact value.
Idea + Original patch: Lucas Stockner
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D3959
2021-03-16 07:37:30 +01:00
|
|
|
static void node_composit_buts_cryptomatte_legacy_ex(uiLayout *layout,
|
|
|
|
|
bContext *UNUSED(C),
|
|
|
|
|
PointerRNA *UNUSED(ptr))
|
2018-07-18 13:03:09 +02:00
|
|
|
{
|
2018-10-01 10:45:50 +02:00
|
|
|
uiItemO(layout, IFACE_("Add Crypto Layer"), ICON_ADD, "NODE_OT_cryptomatte_layer_add");
|
|
|
|
|
uiItemO(layout, IFACE_("Remove Crypto Layer"), ICON_REMOVE, "NODE_OT_cryptomatte_layer_remove");
|
2018-07-18 13:03:09 +02:00
|
|
|
}
|
|
|
|
|
|
Compositor: Redesign Cryptomatte node for better usability
In the current implementation, cryptomatte passes are connected to the node
and elements are picked by using the eyedropper tool on a special pick channel.
This design has two disadvantages - both connecting all passes individually
and always having to switch to the picker channel are tedious.
With the new design, the user selects the RenderLayer or Image from which the
Cryptomatte layers are directly loaded (the type of pass is determined by an
enum). This allows the node to automatically detect all relevant passes.
Then, when using the eyedropper tool, the operator looks up the selected
coordinates from the picked Image, Node backdrop or Clip and reads the picked
object directly from the Renderlayer/Image, therefore allowing to pick in any
context (e.g. by clicking on the Combined pass in the Image Viewer). The
sampled color is looked up in the metadata and the actual name is stored
in the cryptomatte node. This also allows to remove a hash by just removing
the name from the matte id.
Technically there is some loss of flexibility because the Cryptomatte pass
inputs can no longer be connected to other nodes, but since any compositing
done on them is likely to break the Cryptomatte system anyways, this isn't
really a concern in practise.
In the future, this would also allow to automatically translate values to names
by looking up the value in the associated metadata of the input, or to get a
better visualization of overlapping areas in the Pick output since we could
blend colors now that the output doesn't have to contain the exact value.
Idea + Original patch: Lucas Stockner
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D3959
2021-03-16 07:37:30 +01:00
|
|
|
static void node_composit_buts_cryptomatte(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
|
|
|
|
{
|
2021-06-02 17:19:36 +02:00
|
|
|
bNode *node = (bNode *)ptr->data;
|
Compositor: Redesign Cryptomatte node for better usability
In the current implementation, cryptomatte passes are connected to the node
and elements are picked by using the eyedropper tool on a special pick channel.
This design has two disadvantages - both connecting all passes individually
and always having to switch to the picker channel are tedious.
With the new design, the user selects the RenderLayer or Image from which the
Cryptomatte layers are directly loaded (the type of pass is determined by an
enum). This allows the node to automatically detect all relevant passes.
Then, when using the eyedropper tool, the operator looks up the selected
coordinates from the picked Image, Node backdrop or Clip and reads the picked
object directly from the Renderlayer/Image, therefore allowing to pick in any
context (e.g. by clicking on the Combined pass in the Image Viewer). The
sampled color is looked up in the metadata and the actual name is stored
in the cryptomatte node. This also allows to remove a hash by just removing
the name from the matte id.
Technically there is some loss of flexibility because the Cryptomatte pass
inputs can no longer be connected to other nodes, but since any compositing
done on them is likely to break the Cryptomatte system anyways, this isn't
really a concern in practise.
In the future, this would also allow to automatically translate values to names
by looking up the value in the associated metadata of the input, or to get a
better visualization of overlapping areas in the Pick output since we could
blend colors now that the output doesn't have to contain the exact value.
Idea + Original patch: Lucas Stockner
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D3959
2021-03-16 07:37:30 +01:00
|
|
|
|
|
|
|
|
uiLayout *row = uiLayoutRow(layout, true);
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(row, ptr, "source", DEFAULT_FLAGS | UI_ITEM_R_EXPAND, nullptr, ICON_NONE);
|
Compositor: Redesign Cryptomatte node for better usability
In the current implementation, cryptomatte passes are connected to the node
and elements are picked by using the eyedropper tool on a special pick channel.
This design has two disadvantages - both connecting all passes individually
and always having to switch to the picker channel are tedious.
With the new design, the user selects the RenderLayer or Image from which the
Cryptomatte layers are directly loaded (the type of pass is determined by an
enum). This allows the node to automatically detect all relevant passes.
Then, when using the eyedropper tool, the operator looks up the selected
coordinates from the picked Image, Node backdrop or Clip and reads the picked
object directly from the Renderlayer/Image, therefore allowing to pick in any
context (e.g. by clicking on the Combined pass in the Image Viewer). The
sampled color is looked up in the metadata and the actual name is stored
in the cryptomatte node. This also allows to remove a hash by just removing
the name from the matte id.
Technically there is some loss of flexibility because the Cryptomatte pass
inputs can no longer be connected to other nodes, but since any compositing
done on them is likely to break the Cryptomatte system anyways, this isn't
really a concern in practise.
In the future, this would also allow to automatically translate values to names
by looking up the value in the associated metadata of the input, or to get a
better visualization of overlapping areas in the Pick output since we could
blend colors now that the output doesn't have to contain the exact value.
Idea + Original patch: Lucas Stockner
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D3959
2021-03-16 07:37:30 +01:00
|
|
|
|
|
|
|
|
uiLayout *col = uiLayoutColumn(layout, false);
|
|
|
|
|
if (node->custom1 == CMP_CRYPTOMATTE_SRC_RENDER) {
|
2021-06-02 17:19:36 +02:00
|
|
|
uiTemplateID(col,
|
|
|
|
|
C,
|
|
|
|
|
ptr,
|
|
|
|
|
"scene",
|
|
|
|
|
nullptr,
|
|
|
|
|
nullptr,
|
|
|
|
|
nullptr,
|
|
|
|
|
UI_TEMPLATE_ID_FILTER_ALL,
|
|
|
|
|
false,
|
|
|
|
|
nullptr);
|
Compositor: Redesign Cryptomatte node for better usability
In the current implementation, cryptomatte passes are connected to the node
and elements are picked by using the eyedropper tool on a special pick channel.
This design has two disadvantages - both connecting all passes individually
and always having to switch to the picker channel are tedious.
With the new design, the user selects the RenderLayer or Image from which the
Cryptomatte layers are directly loaded (the type of pass is determined by an
enum). This allows the node to automatically detect all relevant passes.
Then, when using the eyedropper tool, the operator looks up the selected
coordinates from the picked Image, Node backdrop or Clip and reads the picked
object directly from the Renderlayer/Image, therefore allowing to pick in any
context (e.g. by clicking on the Combined pass in the Image Viewer). The
sampled color is looked up in the metadata and the actual name is stored
in the cryptomatte node. This also allows to remove a hash by just removing
the name from the matte id.
Technically there is some loss of flexibility because the Cryptomatte pass
inputs can no longer be connected to other nodes, but since any compositing
done on them is likely to break the Cryptomatte system anyways, this isn't
really a concern in practise.
In the future, this would also allow to automatically translate values to names
by looking up the value in the associated metadata of the input, or to get a
better visualization of overlapping areas in the Pick output since we could
blend colors now that the output doesn't have to contain the exact value.
Idea + Original patch: Lucas Stockner
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D3959
2021-03-16 07:37:30 +01:00
|
|
|
}
|
|
|
|
|
else {
|
2021-06-02 17:19:36 +02:00
|
|
|
uiTemplateID(col,
|
|
|
|
|
C,
|
|
|
|
|
ptr,
|
|
|
|
|
"image",
|
|
|
|
|
nullptr,
|
|
|
|
|
"IMAGE_OT_open",
|
|
|
|
|
nullptr,
|
|
|
|
|
UI_TEMPLATE_ID_FILTER_ALL,
|
|
|
|
|
false,
|
|
|
|
|
nullptr);
|
Compositor: Redesign Cryptomatte node for better usability
In the current implementation, cryptomatte passes are connected to the node
and elements are picked by using the eyedropper tool on a special pick channel.
This design has two disadvantages - both connecting all passes individually
and always having to switch to the picker channel are tedious.
With the new design, the user selects the RenderLayer or Image from which the
Cryptomatte layers are directly loaded (the type of pass is determined by an
enum). This allows the node to automatically detect all relevant passes.
Then, when using the eyedropper tool, the operator looks up the selected
coordinates from the picked Image, Node backdrop or Clip and reads the picked
object directly from the Renderlayer/Image, therefore allowing to pick in any
context (e.g. by clicking on the Combined pass in the Image Viewer). The
sampled color is looked up in the metadata and the actual name is stored
in the cryptomatte node. This also allows to remove a hash by just removing
the name from the matte id.
Technically there is some loss of flexibility because the Cryptomatte pass
inputs can no longer be connected to other nodes, but since any compositing
done on them is likely to break the Cryptomatte system anyways, this isn't
really a concern in practise.
In the future, this would also allow to automatically translate values to names
by looking up the value in the associated metadata of the input, or to get a
better visualization of overlapping areas in the Pick output since we could
blend colors now that the output doesn't have to contain the exact value.
Idea + Original patch: Lucas Stockner
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D3959
2021-03-16 07:37:30 +01:00
|
|
|
|
|
|
|
|
NodeCryptomatte *crypto = (NodeCryptomatte *)node->storage;
|
|
|
|
|
PointerRNA imaptr = RNA_pointer_get(ptr, "image");
|
|
|
|
|
PointerRNA iuserptr;
|
|
|
|
|
RNA_pointer_create((ID *)ptr->owner_id, &RNA_ImageUser, &crypto->iuser, &iuserptr);
|
|
|
|
|
uiLayoutSetContextPointer(layout, "image_user", &iuserptr);
|
|
|
|
|
|
|
|
|
|
node_buts_image_user(col, C, ptr, &imaptr, &iuserptr, false, false);
|
|
|
|
|
node_buts_image_views(col, C, ptr, &imaptr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
col = uiLayoutColumn(layout, true);
|
|
|
|
|
uiItemR(col, ptr, "layer_name", 0, "", ICON_NONE);
|
|
|
|
|
uiItemL(col, IFACE_("Matte ID:"), ICON_NONE);
|
|
|
|
|
|
|
|
|
|
row = uiLayoutRow(col, true);
|
|
|
|
|
uiItemR(row, ptr, "matte_id", DEFAULT_FLAGS, "", ICON_NONE);
|
|
|
|
|
uiTemplateCryptoPicker(row, ptr, "add", ICON_ADD);
|
|
|
|
|
uiTemplateCryptoPicker(row, ptr, "remove", ICON_REMOVE);
|
|
|
|
|
}
|
|
|
|
|
|
2008-12-24 10:33:10 +00:00
|
|
|
/* only once called */
|
|
|
|
|
static void node_composit_set_butfunc(bNodeType *ntype)
|
|
|
|
|
{
|
2012-04-28 06:31:57 +00:00
|
|
|
switch (ntype->type) {
|
2008-12-24 10:33:10 +00:00
|
|
|
case CMP_NODE_IMAGE:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_composit_buts_image;
|
|
|
|
|
ntype->draw_buttons_ex = node_composit_buts_image_ex;
|
2008-12-24 10:33:10 +00:00
|
|
|
break;
|
|
|
|
|
case CMP_NODE_CURVE_RGB:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_curvecol;
|
2008-12-24 10:33:10 +00:00
|
|
|
break;
|
|
|
|
|
case CMP_NODE_VALUE:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_value;
|
2008-12-24 10:33:10 +00:00
|
|
|
break;
|
|
|
|
|
case CMP_NODE_RGB:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_rgb;
|
2008-12-24 10:33:10 +00:00
|
|
|
break;
|
|
|
|
|
case CMP_NODE_MIX_RGB:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_mix_rgb;
|
2008-12-24 10:33:10 +00:00
|
|
|
break;
|
|
|
|
|
case CMP_NODE_VALTORGB:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_colorramp;
|
2008-12-24 10:33:10 +00:00
|
|
|
break;
|
|
|
|
|
case CMP_NODE_TIME:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_time;
|
2008-12-24 10:33:10 +00:00
|
|
|
break;
|
|
|
|
|
case CMP_NODE_TEXTURE:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_texture;
|
2008-12-24 10:33:10 +00:00
|
|
|
break;
|
|
|
|
|
case CMP_NODE_MATH:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_math;
|
2008-12-24 10:33:10 +00:00
|
|
|
break;
|
2010-01-21 00:00:45 +00:00
|
|
|
case CMP_NODE_HUECORRECT:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_composit_buts_huecorrect;
|
2011-04-21 15:53:30 +00:00
|
|
|
break;
|
2010-12-13 21:17:00 +00:00
|
|
|
case CMP_NODE_COMBYCCA:
|
|
|
|
|
case CMP_NODE_SEPYCCA:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_composit_buts_ycc;
|
2010-12-13 21:17:00 +00:00
|
|
|
break;
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
case CMP_NODE_MASK_BOX:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_backdrop = node_composit_backdrop_boxmask;
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
break;
|
|
|
|
|
case CMP_NODE_MASK_ELLIPSE:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_backdrop = node_composit_backdrop_ellipsemask;
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
break;
|
2018-07-18 13:03:09 +02:00
|
|
|
case CMP_NODE_CRYPTOMATTE:
|
|
|
|
|
ntype->draw_buttons = node_composit_buts_cryptomatte;
|
Compositor: Redesign Cryptomatte node for better usability
In the current implementation, cryptomatte passes are connected to the node
and elements are picked by using the eyedropper tool on a special pick channel.
This design has two disadvantages - both connecting all passes individually
and always having to switch to the picker channel are tedious.
With the new design, the user selects the RenderLayer or Image from which the
Cryptomatte layers are directly loaded (the type of pass is determined by an
enum). This allows the node to automatically detect all relevant passes.
Then, when using the eyedropper tool, the operator looks up the selected
coordinates from the picked Image, Node backdrop or Clip and reads the picked
object directly from the Renderlayer/Image, therefore allowing to pick in any
context (e.g. by clicking on the Combined pass in the Image Viewer). The
sampled color is looked up in the metadata and the actual name is stored
in the cryptomatte node. This also allows to remove a hash by just removing
the name from the matte id.
Technically there is some loss of flexibility because the Cryptomatte pass
inputs can no longer be connected to other nodes, but since any compositing
done on them is likely to break the Cryptomatte system anyways, this isn't
really a concern in practise.
In the future, this would also allow to automatically translate values to names
by looking up the value in the associated metadata of the input, or to get a
better visualization of overlapping areas in the Pick output since we could
blend colors now that the output doesn't have to contain the exact value.
Idea + Original patch: Lucas Stockner
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D3959
2021-03-16 07:37:30 +01:00
|
|
|
break;
|
|
|
|
|
case CMP_NODE_CRYPTOMATTE_LEGACY:
|
|
|
|
|
ntype->draw_buttons = node_composit_buts_cryptomatte_legacy;
|
|
|
|
|
ntype->draw_buttons_ex = node_composit_buts_cryptomatte_legacy_ex;
|
2018-07-18 13:03:09 +02:00
|
|
|
break;
|
2021-12-15 21:30:04 -05:00
|
|
|
case CMP_NODE_VIEWER:
|
|
|
|
|
ntype->draw_backdrop = node_composit_backdrop_viewer;
|
Compositor: Added denoising node
This node is built on Intel's OpenImageDenoise library.
Other denoisers could be integrated, for example Lukas' Cycles denoiser.
Compositor: Made OpenImageDenoise optional, added CMake and build_env files to find OIDN
Compositor: Fixed some warnings in the denoising operator
build_environment: Updated OpenImageDenoise to 0.8.1
build_environment: Updated OpenImageDenoise in `make deps` for macOS
Reviewers: sergey, jbakker, brecht
Reviewed By: brecht
Subscribers: YAFU, LazyDodo, Zen_YS, slumber, samgreen, tjvoll, yeus, ponomarovmax, getrad, coder.kalyan, vitos1k, Yegor, DeepBlender, kumaran7, Darkfie9825, aliasguru, aafra, ace_dragon, juang3d, pandrodor, cdog, lordodin, jtheninja, mavek, marcog, 5k1n2, Atair, rawalanche, 0o00o0oo, filibis, poor, lukasstockner97
Tags: #compositing
Differential Revision: https://developer.blender.org/D4304
2019-08-14 15:30:26 +02:00
|
|
|
break;
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ****************** BUTTON CALLBACKS FOR TEXTURE NODES ***************** */
|
|
|
|
|
|
2010-10-14 01:22:14 +00:00
|
|
|
static void node_texture_buts_bricks(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
2008-12-24 10:33:10 +00:00
|
|
|
{
|
2009-10-28 22:14:31 +00:00
|
|
|
uiLayout *col;
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2014-04-01 11:34:00 +11:00
|
|
|
col = uiLayoutColumn(layout, true);
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(col, ptr, "offset", DEFAULT_FLAGS | UI_ITEM_R_SLIDER, IFACE_("Offset"), ICON_NONE);
|
|
|
|
|
uiItemR(col, ptr, "offset_frequency", DEFAULT_FLAGS, IFACE_("Frequency"), ICON_NONE);
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2014-04-01 11:34:00 +11:00
|
|
|
col = uiLayoutColumn(layout, true);
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(col, ptr, "squash", DEFAULT_FLAGS, IFACE_("Squash"), ICON_NONE);
|
|
|
|
|
uiItemR(col, ptr, "squash_frequency", DEFAULT_FLAGS, IFACE_("Frequency"), ICON_NONE);
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
2010-10-14 01:22:14 +00:00
|
|
|
static void node_texture_buts_proc(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
2008-12-24 10:33:10 +00:00
|
|
|
{
|
2009-12-05 21:14:31 +00:00
|
|
|
PointerRNA tex_ptr;
|
2021-06-02 17:19:36 +02:00
|
|
|
bNode *node = (bNode *)ptr->data;
|
2019-08-23 09:52:12 +02:00
|
|
|
ID *id = ptr->owner_id;
|
2008-12-24 10:33:10 +00:00
|
|
|
Tex *tex = (Tex *)node->storage;
|
2009-12-05 21:14:31 +00:00
|
|
|
uiLayout *col, *row;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-12-05 21:14:31 +00:00
|
|
|
RNA_pointer_create(id, &RNA_Texture, tex, &tex_ptr);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2014-04-01 11:34:00 +11:00
|
|
|
col = uiLayoutColumn(layout, false);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2012-05-27 19:38:10 +00:00
|
|
|
switch (tex->type) {
|
2008-12-24 10:33:10 +00:00
|
|
|
case TEX_BLEND:
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(col, &tex_ptr, "progression", DEFAULT_FLAGS, "", ICON_NONE);
|
2014-04-01 11:34:00 +11:00
|
|
|
row = uiLayoutRow(col, false);
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(
|
|
|
|
|
row, &tex_ptr, "use_flip_axis", DEFAULT_FLAGS | UI_ITEM_R_EXPAND, nullptr, ICON_NONE);
|
2009-09-16 18:59:13 +00:00
|
|
|
break;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2008-12-24 10:33:10 +00:00
|
|
|
case TEX_MARBLE:
|
2014-04-01 11:34:00 +11:00
|
|
|
row = uiLayoutRow(col, false);
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(row, &tex_ptr, "marble_type", DEFAULT_FLAGS | UI_ITEM_R_EXPAND, nullptr, ICON_NONE);
|
2014-04-01 11:34:00 +11:00
|
|
|
row = uiLayoutRow(col, false);
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(row, &tex_ptr, "noise_type", DEFAULT_FLAGS | UI_ITEM_R_EXPAND, nullptr, ICON_NONE);
|
2014-04-01 11:34:00 +11:00
|
|
|
row = uiLayoutRow(col, false);
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(row, &tex_ptr, "noise_basis", DEFAULT_FLAGS, "", ICON_NONE);
|
2014-04-01 11:34:00 +11:00
|
|
|
row = uiLayoutRow(col, false);
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(
|
|
|
|
|
row, &tex_ptr, "noise_basis_2", DEFAULT_FLAGS | UI_ITEM_R_EXPAND, nullptr, ICON_NONE);
|
2011-04-05 06:05:55 +00:00
|
|
|
break;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2011-04-05 06:05:55 +00:00
|
|
|
case TEX_MAGIC:
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(col, &tex_ptr, "noise_depth", DEFAULT_FLAGS, nullptr, ICON_NONE);
|
2011-04-05 06:05:55 +00:00
|
|
|
break;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2011-04-05 06:05:55 +00:00
|
|
|
case TEX_STUCCI:
|
2014-04-01 11:34:00 +11:00
|
|
|
row = uiLayoutRow(col, false);
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(row, &tex_ptr, "stucci_type", DEFAULT_FLAGS | UI_ITEM_R_EXPAND, nullptr, ICON_NONE);
|
2014-04-01 11:34:00 +11:00
|
|
|
row = uiLayoutRow(col, false);
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(row, &tex_ptr, "noise_type", DEFAULT_FLAGS | UI_ITEM_R_EXPAND, nullptr, ICON_NONE);
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(col, &tex_ptr, "noise_basis", DEFAULT_FLAGS, "", ICON_NONE);
|
2009-09-16 18:59:13 +00:00
|
|
|
break;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2008-12-24 10:33:10 +00:00
|
|
|
case TEX_WOOD:
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(col, &tex_ptr, "noise_basis", DEFAULT_FLAGS, "", ICON_NONE);
|
|
|
|
|
uiItemR(col, &tex_ptr, "wood_type", DEFAULT_FLAGS, "", ICON_NONE);
|
2014-04-01 11:34:00 +11:00
|
|
|
row = uiLayoutRow(col, false);
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(
|
|
|
|
|
row, &tex_ptr, "noise_basis_2", DEFAULT_FLAGS | UI_ITEM_R_EXPAND, nullptr, ICON_NONE);
|
2014-04-01 11:34:00 +11:00
|
|
|
row = uiLayoutRow(col, false);
|
2012-07-09 23:07:15 +00:00
|
|
|
uiLayoutSetActive(row, !(ELEM(tex->stype, TEX_BAND, TEX_RING)));
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(row, &tex_ptr, "noise_type", DEFAULT_FLAGS | UI_ITEM_R_EXPAND, nullptr, ICON_NONE);
|
2009-09-16 18:59:13 +00:00
|
|
|
break;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2008-12-24 10:33:10 +00:00
|
|
|
case TEX_CLOUDS:
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(col, &tex_ptr, "noise_basis", DEFAULT_FLAGS, "", ICON_NONE);
|
2014-04-01 11:34:00 +11:00
|
|
|
row = uiLayoutRow(col, false);
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(row, &tex_ptr, "cloud_type", DEFAULT_FLAGS | UI_ITEM_R_EXPAND, nullptr, ICON_NONE);
|
2014-04-01 11:34:00 +11:00
|
|
|
row = uiLayoutRow(col, false);
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(row, &tex_ptr, "noise_type", DEFAULT_FLAGS | UI_ITEM_R_EXPAND, nullptr, ICON_NONE);
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(col,
|
|
|
|
|
&tex_ptr,
|
|
|
|
|
"noise_depth",
|
|
|
|
|
DEFAULT_FLAGS | UI_ITEM_R_EXPAND,
|
|
|
|
|
IFACE_("Depth"),
|
|
|
|
|
ICON_NONE);
|
2009-09-16 18:59:13 +00:00
|
|
|
break;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2008-12-24 10:33:10 +00:00
|
|
|
case TEX_DISTNOISE:
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(col, &tex_ptr, "noise_basis", DEFAULT_FLAGS, "", ICON_NONE);
|
|
|
|
|
uiItemR(col, &tex_ptr, "noise_distortion", DEFAULT_FLAGS, "", ICON_NONE);
|
2009-09-16 18:59:13 +00:00
|
|
|
break;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2011-04-05 06:05:55 +00:00
|
|
|
case TEX_MUSGRAVE:
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(col, &tex_ptr, "musgrave_type", DEFAULT_FLAGS, "", ICON_NONE);
|
|
|
|
|
uiItemR(col, &tex_ptr, "noise_basis", DEFAULT_FLAGS, "", ICON_NONE);
|
2011-04-05 06:05:55 +00:00
|
|
|
break;
|
|
|
|
|
case TEX_VORONOI:
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(col, &tex_ptr, "distance_metric", DEFAULT_FLAGS, "", ICON_NONE);
|
2012-03-24 06:38:07 +00:00
|
|
|
if (tex->vn_distm == TEX_MINKOVSKY) {
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(col, &tex_ptr, "minkovsky_exponent", DEFAULT_FLAGS, nullptr, ICON_NONE);
|
2011-04-05 06:05:55 +00:00
|
|
|
}
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(col, &tex_ptr, "color_mode", DEFAULT_FLAGS, "", ICON_NONE);
|
2011-04-05 06:05:55 +00:00
|
|
|
break;
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2010-10-16 02:40:31 +00:00
|
|
|
static void node_texture_buts_image(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
2008-12-24 10:33:10 +00:00
|
|
|
{
|
2018-07-31 10:22:19 +02:00
|
|
|
uiTemplateID(layout,
|
|
|
|
|
C,
|
|
|
|
|
ptr,
|
|
|
|
|
"image",
|
|
|
|
|
"IMAGE_OT_new",
|
|
|
|
|
"IMAGE_OT_open",
|
2021-06-02 17:19:36 +02:00
|
|
|
nullptr,
|
2018-07-31 10:22:19 +02:00
|
|
|
UI_TEMPLATE_ID_FILTER_ALL,
|
2019-11-25 19:41:30 +01:00
|
|
|
false,
|
2021-06-02 17:19:36 +02:00
|
|
|
nullptr);
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
2013-10-10 11:33:20 +00:00
|
|
|
static void node_texture_buts_image_ex(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
2013-07-22 08:56:51 +00:00
|
|
|
{
|
2021-06-02 17:19:36 +02:00
|
|
|
bNode *node = (bNode *)ptr->data;
|
2013-07-22 08:56:51 +00:00
|
|
|
PointerRNA iuserptr;
|
|
|
|
|
|
2019-08-23 09:52:12 +02:00
|
|
|
RNA_pointer_create(ptr->owner_id, &RNA_ImageUser, node->storage, &iuserptr);
|
2021-06-02 17:19:36 +02:00
|
|
|
uiTemplateImage(layout, C, ptr, "image", &iuserptr, false, false);
|
2013-07-22 08:56:51 +00:00
|
|
|
}
|
|
|
|
|
|
2010-10-14 01:22:14 +00:00
|
|
|
static void node_texture_buts_output(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
2008-12-24 10:33:10 +00:00
|
|
|
{
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, ptr, "filepath", DEFAULT_FLAGS, "", ICON_NONE);
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* only once called */
|
|
|
|
|
static void node_texture_set_butfunc(bNodeType *ntype)
|
|
|
|
|
{
|
2012-05-27 19:38:10 +00:00
|
|
|
if (ntype->type >= TEX_NODE_PROC && ntype->type < TEX_NODE_PROC_MAX) {
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_texture_buts_proc;
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
2012-04-28 06:31:57 +00:00
|
|
|
else {
|
|
|
|
|
switch (ntype->type) {
|
|
|
|
|
|
2012-05-27 19:38:10 +00:00
|
|
|
case TEX_NODE_MATH:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_math;
|
2012-05-27 19:38:10 +00:00
|
|
|
break;
|
2012-04-28 06:31:57 +00:00
|
|
|
|
2012-05-27 19:38:10 +00:00
|
|
|
case TEX_NODE_MIX_RGB:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_mix_rgb;
|
2012-05-27 19:38:10 +00:00
|
|
|
break;
|
2012-04-28 06:31:57 +00:00
|
|
|
|
2012-05-27 19:38:10 +00:00
|
|
|
case TEX_NODE_VALTORGB:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_colorramp;
|
2012-05-27 19:38:10 +00:00
|
|
|
break;
|
2012-04-28 06:31:57 +00:00
|
|
|
|
2012-05-27 19:38:10 +00:00
|
|
|
case TEX_NODE_CURVE_RGB:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_curvecol;
|
2012-05-27 19:38:10 +00:00
|
|
|
break;
|
2012-04-28 06:31:57 +00:00
|
|
|
|
2012-05-27 19:38:10 +00:00
|
|
|
case TEX_NODE_CURVE_TIME:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_time;
|
2012-05-27 19:38:10 +00:00
|
|
|
break;
|
2012-04-28 06:31:57 +00:00
|
|
|
|
2012-05-27 19:38:10 +00:00
|
|
|
case TEX_NODE_TEXTURE:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_buts_texture;
|
2012-05-27 19:38:10 +00:00
|
|
|
break;
|
2012-04-28 06:31:57 +00:00
|
|
|
|
2012-05-27 19:38:10 +00:00
|
|
|
case TEX_NODE_BRICKS:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_texture_buts_bricks;
|
2012-05-27 19:38:10 +00:00
|
|
|
break;
|
2012-04-28 06:31:57 +00:00
|
|
|
|
2012-05-27 19:38:10 +00:00
|
|
|
case TEX_NODE_IMAGE:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_texture_buts_image;
|
|
|
|
|
ntype->draw_buttons_ex = node_texture_buts_image_ex;
|
2012-05-27 19:38:10 +00:00
|
|
|
break;
|
2012-04-28 06:31:57 +00:00
|
|
|
|
2012-05-27 19:38:10 +00:00
|
|
|
case TEX_NODE_OUTPUT:
|
2013-10-10 11:33:20 +00:00
|
|
|
ntype->draw_buttons = node_texture_buts_output;
|
2012-05-27 19:38:10 +00:00
|
|
|
break;
|
2012-04-28 06:31:57 +00:00
|
|
|
}
|
|
|
|
|
}
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
2021-06-03 10:46:16 +10:00
|
|
|
/* -------------------------------------------------------------------- */
|
|
|
|
|
/** \name Init Draw Callbacks For All Tree Types
|
|
|
|
|
*
|
|
|
|
|
* Only called on node initialization, once.
|
|
|
|
|
* \{ */
|
2008-12-24 10:33:10 +00:00
|
|
|
|
2013-03-18 16:34:57 +00:00
|
|
|
static void node_property_update_default(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
|
2008-12-24 10:33:10 +00:00
|
|
|
{
|
2019-08-23 09:52:12 +02:00
|
|
|
bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
|
2021-06-02 17:19:36 +02:00
|
|
|
bNode *node = (bNode *)ptr->data;
|
2021-12-21 15:18:56 +01:00
|
|
|
BKE_ntree_update_tag_node_property(ntree, node);
|
|
|
|
|
ED_node_tree_propagate_change(nullptr, bmain, ntree);
|
2013-03-18 16:34:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void node_socket_template_properties_update(bNodeType *ntype, bNodeSocketTemplate *stemp)
|
|
|
|
|
{
|
2020-04-03 18:24:08 +02:00
|
|
|
StructRNA *srna = ntype->rna_ext.srna;
|
2013-03-18 16:34:57 +00:00
|
|
|
PropertyRNA *prop = RNA_struct_type_find_property(srna, stemp->identifier);
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2019-03-26 21:16:47 +11:00
|
|
|
if (prop) {
|
2021-06-02 17:19:36 +02:00
|
|
|
RNA_def_property_update_runtime(prop, (const void *)node_property_update_default);
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2013-03-18 16:34:57 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void node_template_properties_update(bNodeType *ntype)
|
|
|
|
|
{
|
|
|
|
|
bNodeSocketTemplate *stemp;
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2013-03-18 16:34:57 +00:00
|
|
|
if (ntype->inputs) {
|
2019-09-08 00:12:26 +10:00
|
|
|
for (stemp = ntype->inputs; stemp->type >= 0; stemp++) {
|
2013-03-18 16:34:57 +00:00
|
|
|
node_socket_template_properties_update(ntype, stemp);
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
2013-03-18 16:34:57 +00:00
|
|
|
if (ntype->outputs) {
|
2019-09-08 00:12:26 +10:00
|
|
|
for (stemp = ntype->outputs; stemp->type >= 0; stemp++) {
|
2013-03-18 16:34:57 +00:00
|
|
|
node_socket_template_properties_update(ntype, stemp);
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2013-03-18 16:34:57 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-05-08 14:58:41 +00:00
|
|
|
static void node_socket_undefined_draw(bContext *UNUSED(C),
|
|
|
|
|
uiLayout *layout,
|
|
|
|
|
PointerRNA *UNUSED(ptr),
|
|
|
|
|
PointerRNA *UNUSED(node_ptr),
|
|
|
|
|
const char *UNUSED(text))
|
2013-03-19 13:40:16 +00:00
|
|
|
{
|
2014-04-03 22:49:27 +04:00
|
|
|
uiItemL(layout, IFACE_("Undefined Socket Type"), ICON_ERROR);
|
2013-03-19 13:40:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void node_socket_undefined_draw_color(bContext *UNUSED(C),
|
|
|
|
|
PointerRNA *UNUSED(ptr),
|
|
|
|
|
PointerRNA *UNUSED(node_ptr),
|
|
|
|
|
float *r_color)
|
|
|
|
|
{
|
|
|
|
|
r_color[0] = 1.0f;
|
|
|
|
|
r_color[1] = 0.0f;
|
|
|
|
|
r_color[2] = 0.0f;
|
|
|
|
|
r_color[3] = 1.0f;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void node_socket_undefined_interface_draw(bContext *UNUSED(C),
|
|
|
|
|
uiLayout *layout,
|
|
|
|
|
PointerRNA *UNUSED(ptr))
|
|
|
|
|
{
|
2014-04-03 22:49:27 +04:00
|
|
|
uiItemL(layout, IFACE_("Undefined Socket Type"), ICON_ERROR);
|
2013-03-19 13:40:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void node_socket_undefined_interface_draw_color(bContext *UNUSED(C),
|
|
|
|
|
PointerRNA *UNUSED(ptr),
|
|
|
|
|
float *r_color)
|
|
|
|
|
{
|
|
|
|
|
r_color[0] = 1.0f;
|
|
|
|
|
r_color[1] = 0.0f;
|
|
|
|
|
r_color[2] = 0.0f;
|
|
|
|
|
r_color[3] = 1.0f;
|
|
|
|
|
}
|
|
|
|
|
|
2021-06-03 10:46:16 +10:00
|
|
|
/** \} */
|
|
|
|
|
|
2022-01-20 10:36:56 -06:00
|
|
|
} // namespace blender::ed::space_node
|
|
|
|
|
|
2021-12-08 00:31:20 -05:00
|
|
|
void ED_node_init_butfuncs()
|
2013-03-18 16:34:57 +00:00
|
|
|
{
|
2022-01-20 10:36:56 -06:00
|
|
|
using namespace blender::ed::space_node;
|
|
|
|
|
|
2013-03-19 13:40:16 +00:00
|
|
|
/* Fallback types for undefined tree, nodes, sockets
|
|
|
|
|
* Defined in blenkernel, but not registered in type hashes.
|
|
|
|
|
*/
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2021-06-02 17:19:36 +02:00
|
|
|
NodeTypeUndefined.draw_buttons = nullptr;
|
|
|
|
|
NodeTypeUndefined.draw_buttons_ex = nullptr;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2013-03-19 13:40:16 +00:00
|
|
|
NodeSocketTypeUndefined.draw = node_socket_undefined_draw;
|
|
|
|
|
NodeSocketTypeUndefined.draw_color = node_socket_undefined_draw_color;
|
|
|
|
|
NodeSocketTypeUndefined.interface_draw = node_socket_undefined_interface_draw;
|
|
|
|
|
NodeSocketTypeUndefined.interface_draw_color = node_socket_undefined_interface_draw_color;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2013-03-18 16:34:57 +00:00
|
|
|
/* node type ui functions */
|
2018-11-30 15:35:15 +11:00
|
|
|
NODE_TYPES_BEGIN (ntype) {
|
2013-03-18 16:34:57 +00:00
|
|
|
node_common_set_butfunc(ntype);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2013-03-18 16:34:57 +00:00
|
|
|
node_composit_set_butfunc(ntype);
|
|
|
|
|
node_shader_set_butfunc(ntype);
|
|
|
|
|
node_texture_set_butfunc(ntype);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2013-03-18 16:34:57 +00:00
|
|
|
/* define update callbacks for socket properties */
|
|
|
|
|
node_template_properties_update(ntype);
|
2018-11-30 15:35:15 +11:00
|
|
|
}
|
|
|
|
|
NODE_TYPES_END;
|
2013-03-18 16:34:57 +00:00
|
|
|
}
|
|
|
|
|
|
2021-12-05 17:12:25 -05:00
|
|
|
void ED_init_custom_node_type(bNodeType *UNUSED(ntype))
|
2013-03-18 16:34:57 +00:00
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ED_init_custom_node_socket_type(bNodeSocketType *stype)
|
|
|
|
|
{
|
2022-01-20 10:36:56 -06:00
|
|
|
stype->draw = blender::ed::space_node::node_socket_button_label;
|
2013-03-18 16:34:57 +00:00
|
|
|
}
|
|
|
|
|
|
2022-01-20 10:36:56 -06:00
|
|
|
namespace blender::ed::space_node {
|
|
|
|
|
|
2021-02-24 13:01:24 -06:00
|
|
|
static const float virtual_node_socket_color[4] = {0.2, 0.2, 0.2, 1.0};
|
|
|
|
|
|
2013-03-18 16:34:57 +00:00
|
|
|
/* maps standard socket integer type to a color */
|
|
|
|
|
static const float std_node_socket_colors[][4] = {
|
2021-01-13 17:17:39 +01:00
|
|
|
{0.63, 0.63, 0.63, 1.0}, /* SOCK_FLOAT */
|
2013-03-24 01:19:55 +00:00
|
|
|
{0.39, 0.39, 0.78, 1.0}, /* SOCK_VECTOR */
|
|
|
|
|
{0.78, 0.78, 0.16, 1.0}, /* SOCK_RGBA */
|
2021-01-13 12:25:31 +01:00
|
|
|
{0.39, 0.78, 0.39, 1.0}, /* SOCK_SHADER */
|
2020-12-02 13:06:11 +01:00
|
|
|
{0.80, 0.65, 0.84, 1.0}, /* SOCK_BOOLEAN */
|
2013-03-24 01:19:55 +00:00
|
|
|
{0.0, 0.0, 0.0, 1.0}, /*__SOCK_MESH (deprecated) */
|
2021-05-12 17:55:07 +02:00
|
|
|
{0.35, 0.55, 0.36, 1.0}, /* SOCK_INT */
|
2020-12-02 13:06:11 +01:00
|
|
|
{0.44, 0.70, 1.00, 1.0}, /* SOCK_STRING */
|
|
|
|
|
{0.93, 0.62, 0.36, 1.0}, /* SOCK_OBJECT */
|
2021-05-12 17:55:07 +02:00
|
|
|
{0.39, 0.22, 0.39, 1.0}, /* SOCK_IMAGE */
|
2020-12-02 13:06:11 +01:00
|
|
|
{0.00, 0.84, 0.64, 1.0}, /* SOCK_GEOMETRY */
|
2020-12-11 17:32:08 +01:00
|
|
|
{0.96, 0.96, 0.96, 1.0}, /* SOCK_COLLECTION */
|
2021-05-12 17:55:07 +02:00
|
|
|
{0.62, 0.31, 0.64, 1.0}, /* SOCK_TEXTURE */
|
|
|
|
|
{0.92, 0.46, 0.51, 1.0}, /* SOCK_MATERIAL */
|
2013-03-18 16:34:57 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* common color callbacks for standard types */
|
|
|
|
|
static void std_node_socket_draw_color(bContext *UNUSED(C),
|
|
|
|
|
PointerRNA *ptr,
|
|
|
|
|
PointerRNA *UNUSED(node_ptr),
|
|
|
|
|
float *r_color)
|
|
|
|
|
{
|
2021-06-02 17:19:36 +02:00
|
|
|
bNodeSocket *sock = (bNodeSocket *)ptr->data;
|
2013-03-18 16:34:57 +00:00
|
|
|
int type = sock->typeinfo->type;
|
|
|
|
|
copy_v4_v4(r_color, std_node_socket_colors[type]);
|
|
|
|
|
}
|
|
|
|
|
static void std_node_socket_interface_draw_color(bContext *UNUSED(C),
|
|
|
|
|
PointerRNA *ptr,
|
|
|
|
|
float *r_color)
|
|
|
|
|
{
|
2021-06-02 17:19:36 +02:00
|
|
|
bNodeSocket *sock = (bNodeSocket *)ptr->data;
|
2013-03-18 16:34:57 +00:00
|
|
|
int type = sock->typeinfo->type;
|
|
|
|
|
copy_v4_v4(r_color, std_node_socket_colors[type]);
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-15 23:24:20 +11:00
|
|
|
/* draw function for file output node sockets,
|
|
|
|
|
* displays only sub-path and format, no value button */
|
2013-10-10 13:07:09 +00:00
|
|
|
static void node_file_output_socket_draw(bContext *C,
|
|
|
|
|
uiLayout *layout,
|
|
|
|
|
PointerRNA *ptr,
|
|
|
|
|
PointerRNA *node_ptr)
|
|
|
|
|
{
|
2019-08-23 09:52:12 +02:00
|
|
|
bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
|
2021-06-02 17:19:36 +02:00
|
|
|
bNodeSocket *sock = (bNodeSocket *)ptr->data;
|
2013-10-10 13:07:09 +00:00
|
|
|
uiLayout *row;
|
2020-09-08 15:20:07 +02:00
|
|
|
PointerRNA inputptr;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2014-04-01 11:34:00 +11:00
|
|
|
row = uiLayoutRow(layout, false);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-09-08 15:20:07 +02:00
|
|
|
PointerRNA imfptr = RNA_pointer_get(node_ptr, "format");
|
|
|
|
|
int imtype = RNA_enum_get(&imfptr, "file_format");
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2013-10-10 13:07:09 +00:00
|
|
|
if (imtype == R_IMF_IMTYPE_MULTILAYER) {
|
2021-06-02 17:19:36 +02:00
|
|
|
NodeImageMultiFileSocket *input = (NodeImageMultiFileSocket *)sock->storage;
|
2013-10-10 13:07:09 +00:00
|
|
|
RNA_pointer_create(&ntree->id, &RNA_NodeOutputFileSlotLayer, input, &inputptr);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2013-10-10 13:07:09 +00:00
|
|
|
uiItemL(row, input->layer, ICON_NONE);
|
|
|
|
|
}
|
|
|
|
|
else {
|
2021-06-02 17:19:36 +02:00
|
|
|
NodeImageMultiFileSocket *input = (NodeImageMultiFileSocket *)sock->storage;
|
2013-10-10 13:07:09 +00:00
|
|
|
uiBlock *block;
|
|
|
|
|
RNA_pointer_create(&ntree->id, &RNA_NodeOutputFileSlotFile, input, &inputptr);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2013-10-10 13:07:09 +00:00
|
|
|
uiItemL(row, input->path, ICON_NONE);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2019-03-26 21:16:47 +11:00
|
|
|
if (!RNA_boolean_get(&inputptr, "use_node_format")) {
|
2013-10-10 13:07:09 +00:00
|
|
|
imfptr = RNA_pointer_get(&inputptr, "format");
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-09-08 15:20:07 +02:00
|
|
|
const char *imtype_name;
|
|
|
|
|
PropertyRNA *imtype_prop = RNA_struct_find_property(&imfptr, "file_format");
|
2013-10-10 13:07:09 +00:00
|
|
|
RNA_property_enum_name((bContext *)C,
|
|
|
|
|
&imfptr,
|
|
|
|
|
imtype_prop,
|
|
|
|
|
RNA_property_enum_get(&imfptr, imtype_prop),
|
|
|
|
|
&imtype_name);
|
|
|
|
|
block = uiLayoutGetBlock(row);
|
2014-11-09 21:20:40 +01:00
|
|
|
UI_block_emboss_set(block, UI_EMBOSS_PULLDOWN);
|
2013-10-10 13:07:09 +00:00
|
|
|
uiItemL(row, imtype_name, ICON_NONE);
|
2014-11-09 21:20:40 +01:00
|
|
|
UI_block_emboss_set(block, UI_EMBOSS_NONE);
|
2013-10-10 13:07:09 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
}
|
|
|
|
|
|
2021-10-22 11:56:05 +02:00
|
|
|
static bool socket_needs_attribute_search(bNode &node, bNodeSocket &socket)
|
|
|
|
|
{
|
|
|
|
|
if (node.declaration == nullptr) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (socket.in_out == SOCK_OUT) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
const int socket_index = BLI_findindex(&node.inputs, &socket);
|
|
|
|
|
return node.declaration->inputs()[socket_index]->is_attribute_name();
|
|
|
|
|
}
|
|
|
|
|
|
2013-05-08 14:58:41 +00:00
|
|
|
static void std_node_socket_draw(
|
|
|
|
|
bContext *C, uiLayout *layout, PointerRNA *ptr, PointerRNA *node_ptr, const char *text)
|
2013-03-18 16:34:57 +00:00
|
|
|
{
|
2021-06-02 17:19:36 +02:00
|
|
|
bNode *node = (bNode *)node_ptr->data;
|
|
|
|
|
bNodeSocket *sock = (bNodeSocket *)ptr->data;
|
2013-03-18 16:34:57 +00:00
|
|
|
int type = sock->typeinfo->type;
|
2021-06-26 21:35:18 +10:00
|
|
|
// int subtype = sock->typeinfo->subtype;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2013-10-10 13:07:09 +00:00
|
|
|
/* XXX not nice, eventually give this node its own socket type ... */
|
|
|
|
|
if (node->type == CMP_NODE_OUTPUT_FILE) {
|
|
|
|
|
node_file_output_socket_draw(C, layout, ptr, node_ptr);
|
2014-02-19 11:54:28 +01:00
|
|
|
return;
|
2013-10-10 13:07:09 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2017-05-07 20:32:51 +02:00
|
|
|
if ((sock->in_out == SOCK_OUT) || (sock->flag & SOCK_IN_USE) || (sock->flag & SOCK_HIDE_VALUE)) {
|
2013-05-08 14:58:41 +00:00
|
|
|
node_socket_button_label(C, layout, ptr, node_ptr, text);
|
2013-05-08 14:58:37 +00:00
|
|
|
return;
|
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2021-06-09 09:13:09 -05:00
|
|
|
text = (sock->flag & SOCK_HIDE_LABEL) ? "" : text;
|
|
|
|
|
|
2013-03-18 16:34:57 +00:00
|
|
|
switch (type) {
|
|
|
|
|
case SOCK_FLOAT:
|
|
|
|
|
case SOCK_INT:
|
|
|
|
|
case SOCK_BOOLEAN:
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, ptr, "default_value", DEFAULT_FLAGS, text, 0);
|
2013-03-18 16:34:57 +00:00
|
|
|
break;
|
|
|
|
|
case SOCK_VECTOR:
|
2019-08-10 17:37:39 +02:00
|
|
|
if (sock->flag & SOCK_COMPACT) {
|
|
|
|
|
uiTemplateComponentMenu(layout, ptr, "default_value", text);
|
|
|
|
|
}
|
|
|
|
|
else {
|
2019-08-16 17:59:12 +02:00
|
|
|
if (sock->typeinfo->subtype == PROP_DIRECTION) {
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, ptr, "default_value", DEFAULT_FLAGS, "", ICON_NONE);
|
2019-08-16 17:59:12 +02:00
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
uiLayout *column = uiLayoutColumn(layout, true);
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(column, ptr, "default_value", DEFAULT_FLAGS, text, ICON_NONE);
|
2019-08-16 17:59:12 +02:00
|
|
|
}
|
2019-08-10 17:37:39 +02:00
|
|
|
}
|
2013-03-18 16:34:57 +00:00
|
|
|
break;
|
2021-03-08 13:38:42 +01:00
|
|
|
case SOCK_RGBA: {
|
2021-10-19 14:04:03 -05:00
|
|
|
if (text[0] == '\0') {
|
|
|
|
|
uiItemR(layout, ptr, "default_value", DEFAULT_FLAGS, "", 0);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
uiLayout *row = uiLayoutSplit(layout, 0.4f, false);
|
|
|
|
|
uiItemL(row, text, 0);
|
|
|
|
|
uiItemR(row, ptr, "default_value", DEFAULT_FLAGS, "", 0);
|
|
|
|
|
}
|
2021-03-08 13:38:42 +01:00
|
|
|
break;
|
|
|
|
|
}
|
2013-07-19 10:40:43 +00:00
|
|
|
case SOCK_STRING: {
|
2021-03-24 12:36:19 -04:00
|
|
|
uiLayout *row = uiLayoutSplit(layout, 0.4f, false);
|
2013-05-08 14:58:41 +00:00
|
|
|
uiItemL(row, text, 0);
|
2021-03-02 13:01:33 -06:00
|
|
|
|
2021-10-22 11:56:05 +02:00
|
|
|
if (socket_needs_attribute_search(*node, *sock)) {
|
|
|
|
|
const bNodeTree *node_tree = (const bNodeTree *)node_ptr->owner_id;
|
2021-12-03 16:25:17 -05:00
|
|
|
node_geometry_add_attribute_search_button(*C, *node_tree, *node, *ptr, *row);
|
2021-03-02 13:01:33 -06:00
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
uiItemR(row, ptr, "default_value", DEFAULT_FLAGS, "", 0);
|
|
|
|
|
}
|
|
|
|
|
|
2013-03-18 16:34:57 +00:00
|
|
|
break;
|
2011-09-05 21:01:50 +00:00
|
|
|
}
|
2020-04-20 13:22:20 +02:00
|
|
|
case SOCK_OBJECT: {
|
2020-05-01 15:21:41 +02:00
|
|
|
uiItemR(layout, ptr, "default_value", DEFAULT_FLAGS, text, 0);
|
2020-04-20 13:22:20 +02:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case SOCK_IMAGE: {
|
2021-10-25 13:02:43 +02:00
|
|
|
const bNodeTree *node_tree = (const bNodeTree *)node_ptr->owner_id;
|
|
|
|
|
if (node_tree->type == NTREE_GEOMETRY) {
|
|
|
|
|
if (text[0] == '\0') {
|
|
|
|
|
uiTemplateID(layout,
|
|
|
|
|
C,
|
|
|
|
|
ptr,
|
|
|
|
|
"default_value",
|
|
|
|
|
"image.new",
|
|
|
|
|
"image.open",
|
|
|
|
|
nullptr,
|
|
|
|
|
0,
|
|
|
|
|
ICON_NONE,
|
|
|
|
|
nullptr);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
/* 0.3 split ratio is inconsistent, but use it here because the "New" button is large. */
|
|
|
|
|
uiLayout *row = uiLayoutSplit(layout, 0.3f, false);
|
|
|
|
|
uiItemL(row, text, 0);
|
|
|
|
|
uiTemplateID(row,
|
|
|
|
|
C,
|
|
|
|
|
ptr,
|
|
|
|
|
"default_value",
|
|
|
|
|
"image.new",
|
|
|
|
|
"image.open",
|
|
|
|
|
nullptr,
|
|
|
|
|
0,
|
|
|
|
|
ICON_NONE,
|
|
|
|
|
nullptr);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
uiItemR(layout, ptr, "default_value", DEFAULT_FLAGS, text, 0);
|
|
|
|
|
}
|
2020-04-20 13:22:20 +02:00
|
|
|
break;
|
|
|
|
|
}
|
2020-12-11 17:32:08 +01:00
|
|
|
case SOCK_COLLECTION: {
|
|
|
|
|
uiItemR(layout, ptr, "default_value", DEFAULT_FLAGS, text, 0);
|
|
|
|
|
break;
|
|
|
|
|
}
|
2021-05-12 12:41:21 +02:00
|
|
|
case SOCK_TEXTURE: {
|
2021-08-10 11:46:10 +10:00
|
|
|
if (text[0] == '\0') {
|
2021-08-09 17:30:44 -05:00
|
|
|
uiTemplateID(layout,
|
|
|
|
|
C,
|
|
|
|
|
ptr,
|
|
|
|
|
"default_value",
|
|
|
|
|
"texture.new",
|
|
|
|
|
nullptr,
|
|
|
|
|
nullptr,
|
|
|
|
|
0,
|
|
|
|
|
ICON_NONE,
|
|
|
|
|
nullptr);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
/* 0.3 split ratio is inconsistent, but use it here because the "New" button is large. */
|
|
|
|
|
uiLayout *row = uiLayoutSplit(layout, 0.3f, false);
|
|
|
|
|
uiItemL(row, text, 0);
|
|
|
|
|
uiTemplateID(
|
|
|
|
|
row, C, ptr, "default_value", "texture.new", nullptr, nullptr, 0, ICON_NONE, nullptr);
|
|
|
|
|
}
|
|
|
|
|
|
2021-05-12 12:41:21 +02:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case SOCK_MATERIAL: {
|
|
|
|
|
uiItemR(layout, ptr, "default_value", DEFAULT_FLAGS, text, 0);
|
|
|
|
|
break;
|
|
|
|
|
}
|
2013-03-19 10:03:52 +00:00
|
|
|
default:
|
2013-05-08 14:58:41 +00:00
|
|
|
node_socket_button_label(C, layout, ptr, node_ptr, text);
|
2013-03-19 10:03:52 +00:00
|
|
|
break;
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-03-28 10:32:04 +00:00
|
|
|
static void std_node_socket_interface_draw(bContext *UNUSED(C), uiLayout *layout, PointerRNA *ptr)
|
|
|
|
|
{
|
2021-06-02 17:19:36 +02:00
|
|
|
bNodeSocket *sock = (bNodeSocket *)ptr->data;
|
2013-03-28 10:32:04 +00:00
|
|
|
int type = sock->typeinfo->type;
|
2021-01-10 13:24:37 -06:00
|
|
|
|
|
|
|
|
uiLayout *col = uiLayoutColumn(layout, false);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2013-03-28 10:32:04 +00:00
|
|
|
switch (type) {
|
2013-07-19 10:40:43 +00:00
|
|
|
case SOCK_FLOAT: {
|
2021-01-10 13:24:37 -06:00
|
|
|
uiItemR(col, ptr, "default_value", DEFAULT_FLAGS, IFACE_("Default"), ICON_NONE);
|
|
|
|
|
uiLayout *sub = uiLayoutColumn(col, true);
|
|
|
|
|
uiItemR(sub, ptr, "min_value", DEFAULT_FLAGS, IFACE_("Min"), ICON_NONE);
|
|
|
|
|
uiItemR(sub, ptr, "max_value", DEFAULT_FLAGS, IFACE_("Max"), ICON_NONE);
|
2013-03-28 10:32:04 +00:00
|
|
|
break;
|
|
|
|
|
}
|
2013-07-19 10:40:43 +00:00
|
|
|
case SOCK_INT: {
|
2021-01-10 13:24:37 -06:00
|
|
|
uiItemR(col, ptr, "default_value", DEFAULT_FLAGS, IFACE_("Default"), ICON_NONE);
|
|
|
|
|
uiLayout *sub = uiLayoutColumn(col, true);
|
|
|
|
|
uiItemR(sub, ptr, "min_value", DEFAULT_FLAGS, IFACE_("Min"), ICON_NONE);
|
|
|
|
|
uiItemR(sub, ptr, "max_value", DEFAULT_FLAGS, IFACE_("Max"), ICON_NONE);
|
2013-03-28 10:32:04 +00:00
|
|
|
break;
|
|
|
|
|
}
|
2013-07-19 10:40:43 +00:00
|
|
|
case SOCK_VECTOR: {
|
2021-01-10 13:24:37 -06:00
|
|
|
uiItemR(col, ptr, "default_value", UI_ITEM_R_EXPAND, IFACE_("Default"), ICON_NONE);
|
|
|
|
|
uiLayout *sub = uiLayoutColumn(col, true);
|
|
|
|
|
uiItemR(sub, ptr, "min_value", DEFAULT_FLAGS, IFACE_("Min"), ICON_NONE);
|
|
|
|
|
uiItemR(sub, ptr, "max_value", DEFAULT_FLAGS, IFACE_("Max"), ICON_NONE);
|
2013-03-28 10:32:04 +00:00
|
|
|
break;
|
|
|
|
|
}
|
2018-02-18 03:15:13 +01:00
|
|
|
case SOCK_BOOLEAN:
|
2013-07-19 10:40:43 +00:00
|
|
|
case SOCK_RGBA:
|
|
|
|
|
case SOCK_STRING: {
|
2021-01-10 13:24:37 -06:00
|
|
|
uiItemR(col, ptr, "default_value", DEFAULT_FLAGS, IFACE_("Default"), 0);
|
2013-03-28 10:32:04 +00:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-07-27 15:03:23 +03:00
|
|
|
|
2021-06-02 17:19:36 +02:00
|
|
|
uiItemR(layout, ptr, "hide_value", DEFAULT_FLAGS, nullptr, 0);
|
2013-03-28 10:32:04 +00:00
|
|
|
}
|
|
|
|
|
|
2013-03-18 16:34:57 +00:00
|
|
|
static void node_socket_virtual_draw_color(bContext *UNUSED(C),
|
|
|
|
|
PointerRNA *UNUSED(ptr),
|
|
|
|
|
PointerRNA *UNUSED(node_ptr),
|
|
|
|
|
float *r_color)
|
|
|
|
|
{
|
2021-02-24 13:01:24 -06:00
|
|
|
copy_v4_v4(r_color, virtual_node_socket_color);
|
2013-03-18 16:34:57 +00:00
|
|
|
}
|
|
|
|
|
|
2022-01-20 10:36:56 -06:00
|
|
|
} // namespace blender::ed::space_node
|
|
|
|
|
|
|
|
|
|
void ED_init_standard_node_socket_type(bNodeSocketType *stype)
|
|
|
|
|
{
|
|
|
|
|
using namespace blender::ed::space_node;
|
|
|
|
|
stype->draw = std_node_socket_draw;
|
|
|
|
|
stype->draw_color = std_node_socket_draw_color;
|
|
|
|
|
stype->interface_draw = std_node_socket_interface_draw;
|
|
|
|
|
stype->interface_draw_color = std_node_socket_interface_draw_color;
|
|
|
|
|
}
|
|
|
|
|
|
2013-03-18 16:34:57 +00:00
|
|
|
void ED_init_node_socket_type_virtual(bNodeSocketType *stype)
|
|
|
|
|
{
|
2022-01-20 10:36:56 -06:00
|
|
|
using namespace blender::ed::space_node;
|
2013-03-18 16:34:57 +00:00
|
|
|
stype->draw = node_socket_button_label;
|
|
|
|
|
stype->draw_color = node_socket_virtual_draw_color;
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-20 10:36:56 -06:00
|
|
|
namespace blender::ed::space_node {
|
|
|
|
|
|
2008-12-24 10:33:10 +00:00
|
|
|
/* ************** Generic drawing ************** */
|
|
|
|
|
|
2021-12-03 16:25:17 -05:00
|
|
|
void draw_nodespace_back_pix(const bContext &C,
|
|
|
|
|
ARegion ®ion,
|
|
|
|
|
SpaceNode &snode,
|
2013-04-24 16:36:50 +00:00
|
|
|
bNodeInstanceKey parent_key)
|
|
|
|
|
{
|
2021-12-03 16:25:17 -05:00
|
|
|
Main *bmain = CTX_data_main(&C);
|
|
|
|
|
bNodeInstanceKey active_viewer_key = (snode.nodetree ? snode.nodetree->active_viewer_key :
|
|
|
|
|
NODE_INSTANCE_KEY_NONE);
|
2019-04-23 09:15:45 -06:00
|
|
|
GPU_matrix_push_projection();
|
|
|
|
|
GPU_matrix_push();
|
2021-12-03 16:25:17 -05:00
|
|
|
wmOrtho2_region_pixelspace(®ion);
|
2019-04-23 09:15:45 -06:00
|
|
|
GPU_matrix_identity_set();
|
2021-12-03 16:25:17 -05:00
|
|
|
ED_region_draw_cb_draw(&C, ®ion, REGION_DRAW_BACKDROP);
|
2019-04-23 09:15:45 -06:00
|
|
|
GPU_matrix_pop_projection();
|
|
|
|
|
GPU_matrix_pop();
|
|
|
|
|
|
2021-12-03 16:25:17 -05:00
|
|
|
if (!(snode.flag & SNODE_BACKDRAW) || !ED_node_is_compositor(&snode)) {
|
2013-04-24 16:36:50 +00:00
|
|
|
return;
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2019-03-26 21:16:47 +11:00
|
|
|
if (parent_key.value != active_viewer_key.value) {
|
2013-04-24 16:36:50 +00:00
|
|
|
return;
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-11-24 13:18:57 +01:00
|
|
|
GPU_matrix_push_projection();
|
|
|
|
|
GPU_matrix_push();
|
|
|
|
|
|
|
|
|
|
/* The draw manager is used to draw the backdrop image. */
|
|
|
|
|
GPUFrameBuffer *old_fb = GPU_framebuffer_active_get();
|
|
|
|
|
GPU_framebuffer_restore();
|
2021-01-25 12:44:18 +01:00
|
|
|
BLI_thread_lock(LOCK_DRAW_IMAGE);
|
2021-12-03 16:25:17 -05:00
|
|
|
DRW_draw_view(&C);
|
2021-01-25 12:44:18 +01:00
|
|
|
BLI_thread_unlock(LOCK_DRAW_IMAGE);
|
2020-11-24 13:18:57 +01:00
|
|
|
GPU_framebuffer_bind_no_srgb(old_fb);
|
|
|
|
|
/* Draw manager changes the depth state. Set it back to NONE. Without this the node preview
|
|
|
|
|
* images aren't drawn correctly. */
|
|
|
|
|
GPU_depth_test(GPU_DEPTH_NONE);
|
|
|
|
|
|
2020-09-08 15:20:07 +02:00
|
|
|
void *lock;
|
|
|
|
|
Image *ima = BKE_image_ensure_viewer(bmain, IMA_TYPE_COMPOSITE, "Viewer Node");
|
2021-06-02 17:19:36 +02:00
|
|
|
ImBuf *ibuf = BKE_image_acquire_ibuf(ima, nullptr, &lock);
|
2013-04-24 16:36:50 +00:00
|
|
|
if (ibuf) {
|
|
|
|
|
/* somehow the offset has to be calculated inverse */
|
2021-12-03 16:25:17 -05:00
|
|
|
wmOrtho2_region_pixelspace(®ion);
|
|
|
|
|
const float x = (region.winx - snode.zoom * ibuf->x) / 2 + snode.xof;
|
|
|
|
|
const float y = (region.winy - snode.zoom * ibuf->y) / 2 + snode.yof;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2014-05-19 18:00:20 +10:00
|
|
|
/** \note draw selected info on backdrop */
|
2021-12-03 16:25:17 -05:00
|
|
|
if (snode.edittree) {
|
|
|
|
|
bNode *node = (bNode *)snode.edittree->nodes.first;
|
|
|
|
|
rctf *viewer_border = &snode.nodetree->viewer_border;
|
2013-04-24 16:36:50 +00:00
|
|
|
while (node) {
|
|
|
|
|
if (node->flag & NODE_SELECT) {
|
2013-10-10 11:33:20 +00:00
|
|
|
if (node->typeinfo->draw_backdrop) {
|
2021-12-03 16:25:17 -05:00
|
|
|
node->typeinfo->draw_backdrop(&snode, ibuf, node, x, y);
|
2013-03-07 17:47:30 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
}
|
2013-04-24 16:36:50 +00:00
|
|
|
node = node->next;
|
____
`````|````` | | | ..''''
| | | |______ .''
| | | | ..'
| | |_______ |___________ ....''
merge to TRUNK!
* The old compositor is still available (Debug Menu: 200)
This commit was brought to you by:
Developers:
* Monique Dewanchand
* Jeroen Bakker
* Dalai Felinto
* Lukas Tönne
Review:
* Brecht van Lommel
Testers:
* Nate Wiebe
* Wolfgang Faehnle
* Carlo Andreacchio
* Daniel Salazar
* Artur Mag
* Christian Krupa
* Francesco Siddi
* Dan McGrath
* Bassam Kurdali
But mostly by the community:
Gold:
Joshua Faulkner
Michael Tiemann
Francesco Paglia
Blender Guru
Blender Developers Fund
Silver:
Pablo Vazquez
Joel Heethaar
Amrein Olivier
Ilias Karasavvidis
Thomas Kumlehn
Sebastian Koenig
Hannu Hoffrén
Benjamin Dansie
Fred M'ule
Michel Vilain
Bradley Cathey
Gianmichele Mariani
Gottfried Hofmann
Bjørnar Frøyse
Valentijn Bruning
Paul Holmes
Clemens Rudolph
Juris Graphix
David Strebel
Ronan Zeegers
François Tarlier
Felipe Andres Esquivel Reed
Olaf Beckman
Jesus Alberto Olmos Linares
Kajimba
Maria Figueiredo
Alexandr Galperin
Francesco Siddi
Julio Iglesias Lopez
Kjartan Tysdal
Thomas Torfs
Film Works
Teruyuki Nakamura
Roger Luethi
Benoit Bolsee
Stefan Abrahamsen
Andreas Mattijat
Xavier Bouchoux
Blender 3D Graphics and Animation
Henk Vostermans
Daniel Blanco Delgado
BlenderDay/2011
Bradley Cathey
Matthieu Dupont de Dinechin
Gianmichele Mariani
Jérôme Scaillet
Bronze (Ivo Grigull, Dylan Urquidi, Philippe Derungs, Phil Beauchamp, Bruce Parrott, Mathieu Quiblier, Daniel Martinez, Leandro Inocencio, Lluc Romaní Brasó,
Jonathan Williamson, Michael Ehlen, Karlis Stigis, Dreamsteep, Martin Lindelöf, Filippo Saracino, Douwe van der Veen, Olli Äkräs, Bruno D'Arcangeli,
Francisco Sedrez Warmling, Watchmike.ca, peter lener, Matteo Novellino, Martin Kirsch, Austars Schnore, KC Elliott, Massimiliano Puliero, Karl Stein,
Wood Design Studios, Omer Khan, Jyrki Kanto, Michał Krupa, Lars Brubaker, Neil Richmond, Adam Kalisz, Robert Garlington, Ian Wilson, Carlo Andreacchio,
Jeremias Boos, Robert Holcomb, Gabriel Zöller, Robert Cude, Natibel de Leon, Nathan Turnage, Nicolas Vergnes, Philipp Kleinhenz, Norman Hartig, Louis Kreusel,
Christopher Taylor, Giovanni Remondini, Daniel Rentzsch, Nico Partipilo, Thomas Ventresco, Johannes Schwarz, Александр Коротеев, Brendon Harvey,
Marcelo G. Malheiros, Marius Giurgi, Richard Burns, Perttu Iso-Metsälä, Steve Bazin, Radoslav Borisov, Yoshiyuki Shida, Julien Guigner, Andrew Hunter,
Philipp Oeser, Daniel Thul, Thobias Johansson, Mauro Bonecchi, Georg Piorczynski, Sebastian Michailidis, L M Weedy, Gen X, Stefan Hinze, Nicolò Zubbini,
Erik Pusch, Rob Scott, Florian Koch, Charles Razack, Adrian Baker, Oliver Villar Diz, David Revoy, Julio Iglesias Lopez, Coen Spoor, Carlos Folch,
Joseph Christie, Victor Hernández García, David Mcsween, James Finnerty, Cory Kruckenberg, Giacomo Graziosi, Olivier Saraja, Lars Brubaker, Eric Hudson,
Johannes Schwarz, David Elguea, Marcus Schulderinsky, Karel De Bruijn, Lucas van Wijngaarden, Stefano Ciarrocchi, Mehmet Eribol, Thomas Berglund, Zuofei Song,
Dylan Urquidi )
2012-05-17 12:49:33 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2021-12-03 16:25:17 -05:00
|
|
|
if ((snode.nodetree->flag & NTREE_VIEWER_BORDER) &&
|
2014-06-05 20:05:41 +06:00
|
|
|
viewer_border->xmin < viewer_border->xmax && viewer_border->ymin < viewer_border->ymax) {
|
|
|
|
|
rcti pixel_border;
|
|
|
|
|
BLI_rcti_init(&pixel_border,
|
2021-12-03 16:25:17 -05:00
|
|
|
x + snode.zoom * viewer_border->xmin * ibuf->x,
|
|
|
|
|
x + snode.zoom * viewer_border->xmax * ibuf->x,
|
|
|
|
|
y + snode.zoom * viewer_border->ymin * ibuf->y,
|
|
|
|
|
y + snode.zoom * viewer_border->ymax * ibuf->y);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-07-18 00:12:21 +02:00
|
|
|
uint pos = GPU_vertformat_attr_add(
|
|
|
|
|
immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
|
2017-02-21 22:17:47 -03:00
|
|
|
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
|
|
|
|
|
immUniformThemeColor(TH_ACTIVE);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2017-02-21 22:17:47 -03:00
|
|
|
immDrawBorderCorners(pos, &pixel_border, 1.0f, 1.0f);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2017-02-21 22:17:47 -03:00
|
|
|
immUnbindProgram();
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
}
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2013-04-24 16:36:50 +00:00
|
|
|
BKE_image_release_ibuf(ima, ibuf, lock);
|
2020-11-24 13:18:57 +01:00
|
|
|
GPU_matrix_pop_projection();
|
|
|
|
|
GPU_matrix_pop();
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
2021-02-11 01:16:17 -06:00
|
|
|
bool node_link_bezier_handles(const View2D *v2d,
|
|
|
|
|
const SpaceNode *snode,
|
2021-12-03 16:25:17 -05:00
|
|
|
const bNodeLink &link,
|
2021-02-11 01:16:17 -06:00
|
|
|
float vec[4][2])
|
2008-12-24 10:33:10 +00:00
|
|
|
{
|
2013-09-05 13:03:03 +00:00
|
|
|
float cursor[2] = {0.0f, 0.0f};
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2013-09-05 13:03:03 +00:00
|
|
|
/* this function can be called with snode null (via cut_links_intersect) */
|
2021-01-19 16:43:08 -06:00
|
|
|
/* XXX map snode->runtime->cursor back to view space */
|
2013-09-05 13:03:03 +00:00
|
|
|
if (snode) {
|
2021-01-19 16:43:08 -06:00
|
|
|
cursor[0] = snode->runtime->cursor[0] * UI_DPI_FAC;
|
|
|
|
|
cursor[1] = snode->runtime->cursor[1] * UI_DPI_FAC;
|
2013-09-05 13:03:03 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2009-02-07 14:03:34 +00:00
|
|
|
/* in v0 and v3 we put begin/end points */
|
2020-09-08 15:20:07 +02:00
|
|
|
int toreroute, fromreroute;
|
2021-12-03 16:25:17 -05:00
|
|
|
if (link.fromsock) {
|
|
|
|
|
vec[0][0] = link.fromsock->locx;
|
|
|
|
|
vec[0][1] = link.fromsock->locy;
|
|
|
|
|
if (link.fromsock->flag & SOCK_MULTI_INPUT) {
|
2021-12-06 17:12:46 -05:00
|
|
|
const float2 position = node_link_calculate_multi_input_position(
|
|
|
|
|
{link.fromsock->locx, link.fromsock->locy},
|
|
|
|
|
link.fromsock->total_inputs - 1,
|
|
|
|
|
link.fromsock->total_inputs);
|
|
|
|
|
copy_v2_v2(vec[0], position);
|
2021-03-10 14:57:57 +01:00
|
|
|
}
|
2021-12-03 16:25:17 -05:00
|
|
|
fromreroute = (link.fromnode && link.fromnode->type == NODE_REROUTE);
|
2009-02-07 14:03:34 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2021-06-02 17:19:36 +02:00
|
|
|
if (snode == nullptr) {
|
2020-09-02 19:10:18 +02:00
|
|
|
return false;
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2013-09-05 13:03:03 +00:00
|
|
|
copy_v2_v2(vec[0], cursor);
|
2012-06-01 12:38:03 +00:00
|
|
|
fromreroute = 0;
|
2009-02-07 14:03:34 +00:00
|
|
|
}
|
2021-12-03 16:25:17 -05:00
|
|
|
if (link.tosock) {
|
|
|
|
|
vec[3][0] = link.tosock->locx;
|
|
|
|
|
vec[3][1] = link.tosock->locy;
|
|
|
|
|
if (!(link.tonode->flag & NODE_HIDDEN) && link.tosock->flag & SOCK_MULTI_INPUT) {
|
2021-12-06 17:12:46 -05:00
|
|
|
const float2 position = node_link_calculate_multi_input_position(
|
|
|
|
|
{link.tosock->locx, link.tosock->locy},
|
|
|
|
|
link.multi_input_socket_index,
|
|
|
|
|
link.tosock->total_inputs);
|
|
|
|
|
copy_v2_v2(vec[3], position);
|
2021-02-11 01:16:17 -06:00
|
|
|
}
|
2021-12-03 16:25:17 -05:00
|
|
|
toreroute = (link.tonode && link.tonode->type == NODE_REROUTE);
|
2009-02-07 14:03:34 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2021-06-02 17:19:36 +02:00
|
|
|
if (snode == nullptr) {
|
2020-09-02 19:10:18 +02:00
|
|
|
return false;
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2013-09-05 13:03:03 +00:00
|
|
|
copy_v2_v2(vec[3], cursor);
|
2012-06-01 12:38:03 +00:00
|
|
|
toreroute = 0;
|
2009-02-07 14:03:34 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2015-11-13 00:03:12 +11:00
|
|
|
/* may be called outside of drawing (so pass spacetype) */
|
2018-08-10 14:24:31 +02:00
|
|
|
int curving = UI_GetThemeValueType(TH_NODE_CURVING, SPACE_NODE);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-08-10 14:24:31 +02:00
|
|
|
if (curving == 0) {
|
|
|
|
|
/* Straight line: align all points. */
|
|
|
|
|
mid_v2_v2v2(vec[1], vec[0], vec[3]);
|
|
|
|
|
mid_v2_v2v2(vec[2], vec[1], vec[3]);
|
2020-09-02 19:10:18 +02:00
|
|
|
return true;
|
2018-08-10 14:24:31 +02:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-09-08 15:20:07 +02:00
|
|
|
const float dist = curving * 0.10f * fabsf(vec[0][0] - vec[3][0]);
|
|
|
|
|
const float deltax = vec[3][0] - vec[0][0];
|
|
|
|
|
const float deltay = vec[3][1] - vec[0][1];
|
2008-12-24 10:33:10 +00:00
|
|
|
/* check direction later, for top sockets */
|
2012-06-01 12:38:03 +00:00
|
|
|
if (fromreroute) {
|
2020-03-06 17:18:10 +01:00
|
|
|
if (fabsf(deltax) > fabsf(deltay)) {
|
2012-07-09 23:07:15 +00:00
|
|
|
vec[1][1] = vec[0][1];
|
|
|
|
|
vec[1][0] = vec[0][0] + (deltax > 0 ? dist : -dist);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
vec[1][0] = vec[0][0];
|
|
|
|
|
vec[1][1] = vec[0][1] + (deltay > 0 ? dist : -dist);
|
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
}
|
2012-07-09 23:07:15 +00:00
|
|
|
else {
|
2012-06-01 12:38:03 +00:00
|
|
|
vec[1][0] = vec[0][0] + dist;
|
|
|
|
|
vec[1][1] = vec[0][1];
|
|
|
|
|
}
|
|
|
|
|
if (toreroute) {
|
2020-03-06 17:18:10 +01:00
|
|
|
if (fabsf(deltax) > fabsf(deltay)) {
|
2012-07-09 23:07:15 +00:00
|
|
|
vec[2][1] = vec[3][1];
|
|
|
|
|
vec[2][0] = vec[3][0] + (deltax > 0 ? -dist : dist);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
vec[2][0] = vec[3][0];
|
|
|
|
|
vec[2][1] = vec[3][1] + (deltay > 0 ? -dist : dist);
|
2012-06-01 12:38:03 +00:00
|
|
|
}
|
2012-07-09 23:07:15 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2012-06-01 12:38:03 +00:00
|
|
|
vec[2][0] = vec[3][0] - dist;
|
|
|
|
|
vec[2][1] = vec[3][1];
|
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2012-12-21 05:07:26 +00:00
|
|
|
if (v2d && min_ffff(vec[0][0], vec[1][0], vec[2][0], vec[3][0]) > v2d->cur.xmax) {
|
2020-09-02 19:10:18 +02:00
|
|
|
return false; /* clipped */
|
2012-07-09 23:07:15 +00:00
|
|
|
}
|
2020-07-03 17:20:08 +02:00
|
|
|
if (v2d && max_ffff(vec[0][0], vec[1][0], vec[2][0], vec[3][0]) < v2d->cur.xmin) {
|
2020-09-02 19:10:18 +02:00
|
|
|
return false; /* clipped */
|
2012-07-09 23:07:15 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2020-09-02 19:10:18 +02:00
|
|
|
return true;
|
2018-04-05 15:41:17 +02:00
|
|
|
}
|
|
|
|
|
|
2021-01-15 10:48:22 -06:00
|
|
|
bool node_link_bezier_points(const View2D *v2d,
|
|
|
|
|
const SpaceNode *snode,
|
2021-12-03 16:25:17 -05:00
|
|
|
const bNodeLink &link,
|
2021-01-15 10:48:22 -06:00
|
|
|
float coord_array[][2],
|
|
|
|
|
const int resol)
|
2018-04-05 15:41:17 +02:00
|
|
|
{
|
|
|
|
|
float vec[4][2];
|
|
|
|
|
|
|
|
|
|
if (node_link_bezier_handles(v2d, snode, link, vec)) {
|
2009-02-07 14:03:34 +00:00
|
|
|
/* always do all three, to prevent data hanging around */
|
2012-07-09 23:07:15 +00:00
|
|
|
BKE_curve_forward_diff_bezier(
|
2020-08-08 13:29:21 +10:00
|
|
|
vec[0][0], vec[1][0], vec[2][0], vec[3][0], coord_array[0] + 0, resol, sizeof(float[2]));
|
2012-07-09 23:07:15 +00:00
|
|
|
BKE_curve_forward_diff_bezier(
|
2020-08-08 13:29:21 +10:00
|
|
|
vec[0][1], vec[1][1], vec[2][1], vec[3][1], coord_array[0] + 1, resol, sizeof(float[2]));
|
2018-06-04 09:31:30 +02:00
|
|
|
|
2020-09-08 15:20:07 +02:00
|
|
|
return true;
|
2009-02-07 14:03:34 +00:00
|
|
|
}
|
2020-09-08 15:20:07 +02:00
|
|
|
return false;
|
2009-02-07 14:03:34 +00:00
|
|
|
}
|
|
|
|
|
|
2018-04-05 15:41:17 +02:00
|
|
|
#define NODELINK_GROUP_SIZE 256
|
2012-05-27 19:38:10 +00:00
|
|
|
#define LINK_RESOL 24
|
2018-04-05 16:07:28 +02:00
|
|
|
#define LINK_WIDTH (2.5f * UI_DPI_FAC)
|
|
|
|
|
#define ARROW_SIZE (7 * UI_DPI_FAC)
|
2018-04-05 15:41:17 +02:00
|
|
|
|
2021-03-16 19:11:54 +00:00
|
|
|
/* Reroute arrow shape and mute bar. These are expanded here and shrunk in the glsl code.
|
|
|
|
|
* See: gpu_shader_2D_nodelink_vert.glsl */
|
2018-04-05 16:07:28 +02:00
|
|
|
static float arrow_verts[3][2] = {{-1.0f, 1.0f}, {0.0f, 0.0f}, {-1.0f, -1.0f}};
|
2018-04-05 15:41:17 +02:00
|
|
|
static float arrow_expand_axis[3][2] = {{0.7071f, 0.7071f}, {M_SQRT2, 0.0f}, {0.7071f, -0.7071f}};
|
2021-03-16 19:11:54 +00:00
|
|
|
static float mute_verts[3][2] = {{0.7071f, 1.0f}, {0.7071f, 0.0f}, {0.7071f, -1.0f}};
|
|
|
|
|
static float mute_expand_axis[3][2] = {{1.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, -0.0f}};
|
2018-04-05 15:41:17 +02:00
|
|
|
|
2021-06-02 17:19:36 +02:00
|
|
|
/* Is zero initialized because it is static data. */
|
2018-07-31 20:44:49 +10:00
|
|
|
static struct {
|
2018-07-18 00:12:21 +02:00
|
|
|
GPUBatch *batch; /* for batching line together */
|
|
|
|
|
GPUBatch *batch_single; /* for single line */
|
|
|
|
|
GPUVertBuf *inst_vbo;
|
2020-02-08 01:02:18 +11:00
|
|
|
uint p0_id, p1_id, p2_id, p3_id;
|
2021-10-21 21:00:17 +02:00
|
|
|
uint colid_id, muted_id, start_color_id, end_color_id;
|
2021-07-15 11:00:23 +02:00
|
|
|
uint dim_factor_id;
|
2021-09-27 15:10:28 +02:00
|
|
|
uint thickness_id;
|
2021-09-28 17:02:47 +02:00
|
|
|
uint dash_factor_id;
|
2021-10-21 21:00:17 +02:00
|
|
|
uint dash_alpha_id;
|
2018-07-18 00:12:21 +02:00
|
|
|
GPUVertBufRaw p0_step, p1_step, p2_step, p3_step;
|
2021-10-21 21:00:17 +02:00
|
|
|
GPUVertBufRaw colid_step, muted_step, start_color_step, end_color_step;
|
2021-07-15 11:00:23 +02:00
|
|
|
GPUVertBufRaw dim_factor_step;
|
2021-09-27 15:10:28 +02:00
|
|
|
GPUVertBufRaw thickness_step;
|
2021-09-28 17:02:47 +02:00
|
|
|
GPUVertBufRaw dash_factor_step;
|
2021-10-21 21:00:17 +02:00
|
|
|
GPUVertBufRaw dash_alpha_step;
|
2020-02-08 01:02:18 +11:00
|
|
|
uint count;
|
2018-04-05 15:41:17 +02:00
|
|
|
bool enabled;
|
2021-06-02 17:19:36 +02:00
|
|
|
} g_batch_link;
|
2018-04-05 15:41:17 +02:00
|
|
|
|
2021-06-02 17:19:36 +02:00
|
|
|
static void nodelink_batch_reset()
|
2018-04-05 15:41:17 +02:00
|
|
|
{
|
2018-07-18 00:12:21 +02:00
|
|
|
GPU_vertbuf_attr_get_raw_data(g_batch_link.inst_vbo, g_batch_link.p0_id, &g_batch_link.p0_step);
|
|
|
|
|
GPU_vertbuf_attr_get_raw_data(g_batch_link.inst_vbo, g_batch_link.p1_id, &g_batch_link.p1_step);
|
|
|
|
|
GPU_vertbuf_attr_get_raw_data(g_batch_link.inst_vbo, g_batch_link.p2_id, &g_batch_link.p2_step);
|
|
|
|
|
GPU_vertbuf_attr_get_raw_data(g_batch_link.inst_vbo, g_batch_link.p3_id, &g_batch_link.p3_step);
|
|
|
|
|
GPU_vertbuf_attr_get_raw_data(
|
|
|
|
|
g_batch_link.inst_vbo, g_batch_link.colid_id, &g_batch_link.colid_step);
|
2021-03-16 19:11:54 +00:00
|
|
|
GPU_vertbuf_attr_get_raw_data(
|
|
|
|
|
g_batch_link.inst_vbo, g_batch_link.muted_id, &g_batch_link.muted_step);
|
2021-07-15 11:00:23 +02:00
|
|
|
GPU_vertbuf_attr_get_raw_data(
|
|
|
|
|
g_batch_link.inst_vbo, g_batch_link.dim_factor_id, &g_batch_link.dim_factor_step);
|
2021-09-27 15:10:28 +02:00
|
|
|
GPU_vertbuf_attr_get_raw_data(
|
|
|
|
|
g_batch_link.inst_vbo, g_batch_link.thickness_id, &g_batch_link.thickness_step);
|
2021-09-28 17:02:47 +02:00
|
|
|
GPU_vertbuf_attr_get_raw_data(
|
|
|
|
|
g_batch_link.inst_vbo, g_batch_link.dash_factor_id, &g_batch_link.dash_factor_step);
|
2021-10-21 21:00:17 +02:00
|
|
|
GPU_vertbuf_attr_get_raw_data(
|
|
|
|
|
g_batch_link.inst_vbo, g_batch_link.dash_alpha_id, &g_batch_link.dash_alpha_step);
|
|
|
|
|
GPU_vertbuf_attr_get_raw_data(
|
|
|
|
|
g_batch_link.inst_vbo, g_batch_link.start_color_id, &g_batch_link.start_color_step);
|
|
|
|
|
GPU_vertbuf_attr_get_raw_data(
|
|
|
|
|
g_batch_link.inst_vbo, g_batch_link.end_color_id, &g_batch_link.end_color_step);
|
2018-04-05 15:41:17 +02:00
|
|
|
g_batch_link.count = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void set_nodelink_vertex(GPUVertBuf *vbo,
|
2020-02-08 01:02:18 +11:00
|
|
|
uint uv_id,
|
|
|
|
|
uint pos_id,
|
|
|
|
|
uint exp_id,
|
|
|
|
|
uint v,
|
|
|
|
|
const uchar uv[2],
|
2018-04-05 15:41:17 +02:00
|
|
|
const float pos[2],
|
|
|
|
|
const float exp[2])
|
|
|
|
|
{
|
2018-07-18 00:12:21 +02:00
|
|
|
GPU_vertbuf_attr_set(vbo, uv_id, v, uv);
|
|
|
|
|
GPU_vertbuf_attr_set(vbo, pos_id, v, pos);
|
|
|
|
|
GPU_vertbuf_attr_set(vbo, exp_id, v, exp);
|
2018-04-05 15:41:17 +02:00
|
|
|
}
|
|
|
|
|
|
2021-06-02 17:19:36 +02:00
|
|
|
static void nodelink_batch_init()
|
2018-04-05 15:41:17 +02:00
|
|
|
{
|
2018-07-18 00:12:21 +02:00
|
|
|
GPUVertFormat format = {0};
|
|
|
|
|
uint uv_id = GPU_vertformat_attr_add(&format, "uv", GPU_COMP_U8, 2, GPU_FETCH_INT_TO_FLOAT_UNIT);
|
|
|
|
|
uint pos_id = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
|
|
|
|
|
uint expand_id = GPU_vertformat_attr_add(&format, "expand", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
|
|
|
|
|
GPUVertBuf *vbo = GPU_vertbuf_create_with_format_ex(&format, GPU_USAGE_STATIC);
|
2018-04-05 15:41:17 +02:00
|
|
|
int vcount = LINK_RESOL * 2; /* curve */
|
|
|
|
|
vcount += 2; /* restart strip */
|
2018-04-19 07:47:03 +02:00
|
|
|
vcount += 3 * 2; /* arrow */
|
2021-03-16 19:11:54 +00:00
|
|
|
vcount += 2; /* restart strip */
|
|
|
|
|
vcount += 3 * 2; /* mute */
|
2018-04-05 15:41:17 +02:00
|
|
|
vcount *= 2; /* shadow */
|
|
|
|
|
vcount += 2; /* restart strip */
|
2018-07-18 00:12:21 +02:00
|
|
|
GPU_vertbuf_data_alloc(vbo, vcount);
|
2018-04-05 15:41:17 +02:00
|
|
|
int v = 0;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2019-09-08 00:12:26 +10:00
|
|
|
for (int k = 0; k < 2; k++) {
|
2020-02-08 01:02:18 +11:00
|
|
|
uchar uv[2] = {0, 0};
|
2018-04-05 15:41:17 +02:00
|
|
|
float pos[2] = {0.0f, 0.0f};
|
|
|
|
|
float exp[2] = {0.0f, 1.0f};
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-04-05 15:41:17 +02:00
|
|
|
/* restart */
|
2019-03-26 21:16:47 +11:00
|
|
|
if (k == 1) {
|
2018-04-05 15:41:17 +02:00
|
|
|
set_nodelink_vertex(vbo, uv_id, pos_id, expand_id, v++, uv, pos, exp);
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-04-05 15:41:17 +02:00
|
|
|
/* curve strip */
|
2019-09-08 00:12:26 +10:00
|
|
|
for (int i = 0; i < LINK_RESOL; i++) {
|
2018-04-19 07:47:03 +02:00
|
|
|
uv[0] = 255 * (i / (float)(LINK_RESOL - 1));
|
2018-04-05 15:41:17 +02:00
|
|
|
uv[1] = 0;
|
|
|
|
|
set_nodelink_vertex(vbo, uv_id, pos_id, expand_id, v++, uv, pos, exp);
|
|
|
|
|
uv[1] = 255;
|
|
|
|
|
set_nodelink_vertex(vbo, uv_id, pos_id, expand_id, v++, uv, pos, exp);
|
2019-04-17 06:17:24 +02:00
|
|
|
}
|
2018-04-05 15:41:17 +02:00
|
|
|
/* restart */
|
|
|
|
|
set_nodelink_vertex(vbo, uv_id, pos_id, expand_id, v++, uv, pos, exp);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-04-05 15:41:17 +02:00
|
|
|
uv[0] = 127;
|
2019-04-17 06:17:24 +02:00
|
|
|
uv[1] = 0;
|
2018-04-05 15:41:17 +02:00
|
|
|
copy_v2_v2(pos, arrow_verts[0]);
|
|
|
|
|
copy_v2_v2(exp, arrow_expand_axis[0]);
|
|
|
|
|
set_nodelink_vertex(vbo, uv_id, pos_id, expand_id, v++, uv, pos, exp);
|
|
|
|
|
/* arrow */
|
2019-09-08 00:12:26 +10:00
|
|
|
for (int i = 0; i < 3; i++) {
|
2018-04-05 15:41:17 +02:00
|
|
|
uv[1] = 0;
|
|
|
|
|
copy_v2_v2(pos, arrow_verts[i]);
|
|
|
|
|
copy_v2_v2(exp, arrow_expand_axis[i]);
|
|
|
|
|
set_nodelink_vertex(vbo, uv_id, pos_id, expand_id, v++, uv, pos, exp);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-04-05 15:41:17 +02:00
|
|
|
uv[1] = 255;
|
|
|
|
|
set_nodelink_vertex(vbo, uv_id, pos_id, expand_id, v++, uv, pos, exp);
|
2019-04-17 06:17:24 +02:00
|
|
|
}
|
|
|
|
|
|
2021-03-16 19:11:54 +00:00
|
|
|
/* restart */
|
|
|
|
|
set_nodelink_vertex(vbo, uv_id, pos_id, expand_id, v++, uv, pos, exp);
|
|
|
|
|
|
|
|
|
|
uv[0] = 127;
|
|
|
|
|
uv[1] = 0;
|
|
|
|
|
copy_v2_v2(pos, mute_verts[0]);
|
|
|
|
|
copy_v2_v2(exp, mute_expand_axis[0]);
|
|
|
|
|
set_nodelink_vertex(vbo, uv_id, pos_id, expand_id, v++, uv, pos, exp);
|
|
|
|
|
/* bar */
|
|
|
|
|
for (int i = 0; i < 3; ++i) {
|
|
|
|
|
uv[1] = 0;
|
|
|
|
|
copy_v2_v2(pos, mute_verts[i]);
|
|
|
|
|
copy_v2_v2(exp, mute_expand_axis[i]);
|
|
|
|
|
set_nodelink_vertex(vbo, uv_id, pos_id, expand_id, v++, uv, pos, exp);
|
|
|
|
|
|
|
|
|
|
uv[1] = 255;
|
|
|
|
|
set_nodelink_vertex(vbo, uv_id, pos_id, expand_id, v++, uv, pos, exp);
|
|
|
|
|
}
|
|
|
|
|
|
2018-04-05 15:41:17 +02:00
|
|
|
/* restart */
|
|
|
|
|
if (k == 0) {
|
|
|
|
|
set_nodelink_vertex(vbo, uv_id, pos_id, expand_id, v++, uv, pos, exp);
|
2017-02-21 22:17:47 -03:00
|
|
|
}
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2021-06-02 17:19:36 +02:00
|
|
|
g_batch_link.batch = GPU_batch_create_ex(GPU_PRIM_TRI_STRIP, vbo, nullptr, GPU_BATCH_OWNS_VBO);
|
2018-04-05 15:41:17 +02:00
|
|
|
gpu_batch_presets_register(g_batch_link.batch);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2021-06-02 17:19:36 +02:00
|
|
|
g_batch_link.batch_single = GPU_batch_create_ex(
|
|
|
|
|
GPU_PRIM_TRI_STRIP, vbo, nullptr, GPU_BATCH_INVALID);
|
2018-04-05 15:41:17 +02:00
|
|
|
gpu_batch_presets_register(g_batch_link.batch_single);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-04-05 15:41:17 +02:00
|
|
|
/* Instances data */
|
2018-07-18 00:12:21 +02:00
|
|
|
GPUVertFormat format_inst = {0};
|
|
|
|
|
g_batch_link.p0_id = GPU_vertformat_attr_add(
|
|
|
|
|
&format_inst, "P0", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
|
|
|
|
|
g_batch_link.p1_id = GPU_vertformat_attr_add(
|
|
|
|
|
&format_inst, "P1", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
|
|
|
|
|
g_batch_link.p2_id = GPU_vertformat_attr_add(
|
|
|
|
|
&format_inst, "P2", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
|
|
|
|
|
g_batch_link.p3_id = GPU_vertformat_attr_add(
|
|
|
|
|
&format_inst, "P3", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
|
|
|
|
|
g_batch_link.colid_id = GPU_vertformat_attr_add(
|
|
|
|
|
&format_inst, "colid_doarrow", GPU_COMP_U8, 4, GPU_FETCH_INT);
|
2021-10-21 21:00:17 +02:00
|
|
|
g_batch_link.start_color_id = GPU_vertformat_attr_add(
|
|
|
|
|
&format_inst, "start_color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
|
|
|
|
|
g_batch_link.end_color_id = GPU_vertformat_attr_add(
|
|
|
|
|
&format_inst, "end_color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
|
2021-03-16 19:11:54 +00:00
|
|
|
g_batch_link.muted_id = GPU_vertformat_attr_add(
|
|
|
|
|
&format_inst, "domuted", GPU_COMP_U8, 2, GPU_FETCH_INT);
|
2021-07-15 11:00:23 +02:00
|
|
|
g_batch_link.dim_factor_id = GPU_vertformat_attr_add(
|
|
|
|
|
&format_inst, "dim_factor", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
|
2021-09-27 15:10:28 +02:00
|
|
|
g_batch_link.thickness_id = GPU_vertformat_attr_add(
|
|
|
|
|
&format_inst, "thickness", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
|
2021-09-28 17:02:47 +02:00
|
|
|
g_batch_link.dash_factor_id = GPU_vertformat_attr_add(
|
|
|
|
|
&format_inst, "dash_factor", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
|
2021-10-21 21:00:17 +02:00
|
|
|
g_batch_link.dash_alpha_id = GPU_vertformat_attr_add(
|
|
|
|
|
&format_inst, "dash_alpha", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
|
2018-07-18 00:12:21 +02:00
|
|
|
g_batch_link.inst_vbo = GPU_vertbuf_create_with_format_ex(&format_inst, GPU_USAGE_STREAM);
|
2019-01-15 23:24:20 +11:00
|
|
|
/* Alloc max count but only draw the range we need. */
|
|
|
|
|
GPU_vertbuf_data_alloc(g_batch_link.inst_vbo, NODELINK_GROUP_SIZE);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-07-18 00:12:21 +02:00
|
|
|
GPU_batch_instbuf_set(g_batch_link.batch, g_batch_link.inst_vbo, true);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-04-05 15:41:17 +02:00
|
|
|
nodelink_batch_reset();
|
|
|
|
|
}
|
2017-02-21 22:17:47 -03:00
|
|
|
|
2018-04-05 15:41:17 +02:00
|
|
|
static char nodelink_get_color_id(int th_col)
|
|
|
|
|
{
|
|
|
|
|
switch (th_col) {
|
|
|
|
|
case TH_WIRE:
|
|
|
|
|
return 1;
|
|
|
|
|
case TH_WIRE_INNER:
|
|
|
|
|
return 2;
|
|
|
|
|
case TH_ACTIVE:
|
|
|
|
|
return 3;
|
|
|
|
|
case TH_EDGE_SELECT:
|
|
|
|
|
return 4;
|
|
|
|
|
case TH_REDALERT:
|
|
|
|
|
return 5;
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2017-02-21 22:17:47 -03:00
|
|
|
|
2021-12-03 16:25:17 -05:00
|
|
|
static void nodelink_batch_draw(const SpaceNode &snode)
|
2018-04-05 15:41:17 +02:00
|
|
|
{
|
2019-03-26 21:16:47 +11:00
|
|
|
if (g_batch_link.count == 0) {
|
2018-04-05 15:41:17 +02:00
|
|
|
return;
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2017-02-21 22:17:47 -03:00
|
|
|
|
2020-08-16 15:38:34 +02:00
|
|
|
GPU_blend(GPU_BLEND_ALPHA);
|
2022-01-17 14:45:22 +01:00
|
|
|
NodeLinkInstanceData node_link_data;
|
2017-02-21 22:17:47 -03:00
|
|
|
|
2022-01-17 14:45:22 +01:00
|
|
|
UI_GetThemeColor4fv(TH_WIRE_INNER, node_link_data.colors[nodelink_get_color_id(TH_WIRE_INNER)]);
|
|
|
|
|
UI_GetThemeColor4fv(TH_WIRE, node_link_data.colors[nodelink_get_color_id(TH_WIRE)]);
|
|
|
|
|
UI_GetThemeColor4fv(TH_ACTIVE, node_link_data.colors[nodelink_get_color_id(TH_ACTIVE)]);
|
|
|
|
|
UI_GetThemeColor4fv(TH_EDGE_SELECT,
|
|
|
|
|
node_link_data.colors[nodelink_get_color_id(TH_EDGE_SELECT)]);
|
|
|
|
|
UI_GetThemeColor4fv(TH_REDALERT, node_link_data.colors[nodelink_get_color_id(TH_REDALERT)]);
|
|
|
|
|
node_link_data.expandSize = snode.runtime->aspect * LINK_WIDTH;
|
|
|
|
|
node_link_data.arrowSize = ARROW_SIZE;
|
|
|
|
|
|
|
|
|
|
GPUUniformBuf *ubo = GPU_uniformbuf_create_ex(sizeof(node_link_data), &node_link_data, __func__);
|
2017-02-21 22:17:47 -03:00
|
|
|
|
2019-01-21 11:28:41 +11:00
|
|
|
GPU_vertbuf_data_len_set(g_batch_link.inst_vbo, g_batch_link.count);
|
2018-07-18 00:12:21 +02:00
|
|
|
GPU_vertbuf_use(g_batch_link.inst_vbo); /* force update. */
|
2017-02-21 22:17:47 -03:00
|
|
|
|
2018-07-18 00:12:21 +02:00
|
|
|
GPU_batch_program_set_builtin(g_batch_link.batch, GPU_SHADER_2D_NODELINK_INST);
|
2022-01-17 14:45:22 +01:00
|
|
|
GPU_batch_uniformbuf_bind(g_batch_link.batch, "node_link_data", ubo);
|
2018-07-18 00:12:21 +02:00
|
|
|
GPU_batch_draw(g_batch_link.batch);
|
2017-02-21 22:17:47 -03:00
|
|
|
|
2022-01-17 14:45:22 +01:00
|
|
|
GPU_uniformbuf_unbind(ubo);
|
|
|
|
|
GPU_uniformbuf_free(ubo);
|
|
|
|
|
|
2018-04-05 15:41:17 +02:00
|
|
|
nodelink_batch_reset();
|
2017-02-21 22:17:47 -03:00
|
|
|
|
2020-08-16 15:38:34 +02:00
|
|
|
GPU_blend(GPU_BLEND_NONE);
|
2018-04-05 15:41:17 +02:00
|
|
|
}
|
2017-02-21 22:17:47 -03:00
|
|
|
|
2021-12-03 16:25:17 -05:00
|
|
|
void nodelink_batch_start(SpaceNode &UNUSED(snode))
|
2018-04-05 15:41:17 +02:00
|
|
|
{
|
2019-10-02 14:13:41 +02:00
|
|
|
g_batch_link.enabled = true;
|
2018-04-05 15:41:17 +02:00
|
|
|
}
|
2017-02-21 22:17:47 -03:00
|
|
|
|
2021-12-03 16:25:17 -05:00
|
|
|
void nodelink_batch_end(SpaceNode &snode)
|
2018-04-05 15:41:17 +02:00
|
|
|
{
|
|
|
|
|
nodelink_batch_draw(snode);
|
|
|
|
|
g_batch_link.enabled = false;
|
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2021-12-03 16:25:17 -05:00
|
|
|
static void nodelink_batch_add_link(const SpaceNode &snode,
|
|
|
|
|
const float2 &p0,
|
|
|
|
|
const float2 &p1,
|
|
|
|
|
const float2 &p2,
|
|
|
|
|
const float2 &p3,
|
2018-04-05 15:41:17 +02:00
|
|
|
int th_col1,
|
|
|
|
|
int th_col2,
|
|
|
|
|
int th_col3,
|
2021-10-21 21:00:17 +02:00
|
|
|
const float start_color[4],
|
|
|
|
|
const float end_color[4],
|
2021-03-16 19:11:54 +00:00
|
|
|
bool drawarrow,
|
2021-07-15 11:00:23 +02:00
|
|
|
bool drawmuted,
|
2021-09-27 15:10:28 +02:00
|
|
|
float dim_factor,
|
2021-09-28 17:02:47 +02:00
|
|
|
float thickness,
|
2021-10-21 21:00:17 +02:00
|
|
|
float dash_factor,
|
|
|
|
|
float dash_alpha)
|
2018-04-05 15:41:17 +02:00
|
|
|
{
|
|
|
|
|
/* Only allow these colors. If more is needed, you need to modify the shader accordingly. */
|
|
|
|
|
BLI_assert(ELEM(th_col1, TH_WIRE_INNER, TH_WIRE, TH_ACTIVE, TH_EDGE_SELECT, TH_REDALERT));
|
|
|
|
|
BLI_assert(ELEM(th_col2, TH_WIRE_INNER, TH_WIRE, TH_ACTIVE, TH_EDGE_SELECT, TH_REDALERT));
|
2021-03-16 19:11:54 +00:00
|
|
|
BLI_assert(ELEM(th_col3, TH_WIRE, TH_REDALERT, -1));
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-04-05 15:41:17 +02:00
|
|
|
g_batch_link.count++;
|
2021-06-02 17:19:36 +02:00
|
|
|
copy_v2_v2((float *)GPU_vertbuf_raw_step(&g_batch_link.p0_step), p0);
|
|
|
|
|
copy_v2_v2((float *)GPU_vertbuf_raw_step(&g_batch_link.p1_step), p1);
|
|
|
|
|
copy_v2_v2((float *)GPU_vertbuf_raw_step(&g_batch_link.p2_step), p2);
|
|
|
|
|
copy_v2_v2((float *)GPU_vertbuf_raw_step(&g_batch_link.p3_step), p3);
|
|
|
|
|
char *colid = (char *)GPU_vertbuf_raw_step(&g_batch_link.colid_step);
|
2018-04-05 15:41:17 +02:00
|
|
|
colid[0] = nodelink_get_color_id(th_col1);
|
|
|
|
|
colid[1] = nodelink_get_color_id(th_col2);
|
|
|
|
|
colid[2] = nodelink_get_color_id(th_col3);
|
|
|
|
|
colid[3] = drawarrow;
|
2021-10-21 21:00:17 +02:00
|
|
|
copy_v4_v4((float *)GPU_vertbuf_raw_step(&g_batch_link.start_color_step), start_color);
|
|
|
|
|
copy_v4_v4((float *)GPU_vertbuf_raw_step(&g_batch_link.end_color_step), end_color);
|
2021-06-02 17:19:36 +02:00
|
|
|
char *muted = (char *)GPU_vertbuf_raw_step(&g_batch_link.muted_step);
|
2021-03-16 19:11:54 +00:00
|
|
|
muted[0] = drawmuted;
|
2021-07-15 11:00:23 +02:00
|
|
|
*(float *)GPU_vertbuf_raw_step(&g_batch_link.dim_factor_step) = dim_factor;
|
2021-09-27 15:10:28 +02:00
|
|
|
*(float *)GPU_vertbuf_raw_step(&g_batch_link.thickness_step) = thickness;
|
2021-09-28 17:02:47 +02:00
|
|
|
*(float *)GPU_vertbuf_raw_step(&g_batch_link.dash_factor_step) = dash_factor;
|
2021-10-21 21:00:17 +02:00
|
|
|
*(float *)GPU_vertbuf_raw_step(&g_batch_link.dash_alpha_step) = dash_alpha;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2018-04-05 15:41:17 +02:00
|
|
|
if (g_batch_link.count == NODELINK_GROUP_SIZE) {
|
|
|
|
|
nodelink_batch_draw(snode);
|
|
|
|
|
}
|
|
|
|
|
}
|
2017-02-21 22:17:47 -03:00
|
|
|
|
2021-12-03 16:25:17 -05:00
|
|
|
void node_draw_link_bezier(const bContext &C,
|
|
|
|
|
const View2D &v2d,
|
|
|
|
|
const SpaceNode &snode,
|
|
|
|
|
const bNodeLink &link,
|
|
|
|
|
const int th_col1,
|
|
|
|
|
const int th_col2,
|
|
|
|
|
const int th_col3)
|
2018-04-05 15:41:17 +02:00
|
|
|
{
|
2021-07-15 11:00:23 +02:00
|
|
|
const float dim_factor = node_link_dim_factor(v2d, link);
|
2021-09-27 15:10:28 +02:00
|
|
|
float thickness = 1.5f;
|
2021-09-28 17:02:47 +02:00
|
|
|
float dash_factor = 1.0f;
|
2021-10-21 21:00:17 +02:00
|
|
|
|
|
|
|
|
bTheme *btheme = UI_GetTheme();
|
|
|
|
|
const float dash_alpha = btheme->space_node.dash_alpha;
|
|
|
|
|
|
2021-12-03 16:25:17 -05:00
|
|
|
if (snode.edittree->type == NTREE_GEOMETRY) {
|
|
|
|
|
if (link.fromsock && link.fromsock->display_shape == SOCK_DISPLAY_SHAPE_DIAMOND) {
|
2021-09-27 15:10:28 +02:00
|
|
|
/* Make field links a bit thinner. */
|
|
|
|
|
thickness = 1.0f;
|
2021-09-28 17:02:47 +02:00
|
|
|
/* Draw field as dashes. */
|
|
|
|
|
dash_factor = 0.75f;
|
2021-09-27 15:10:28 +02:00
|
|
|
}
|
|
|
|
|
}
|
2021-07-15 11:00:23 +02:00
|
|
|
|
2018-04-05 15:41:17 +02:00
|
|
|
float vec[4][2];
|
2021-12-03 16:25:17 -05:00
|
|
|
const bool highlighted = link.flag & NODE_LINK_TEMP_HIGHLIGHT;
|
|
|
|
|
if (node_link_bezier_handles(&v2d, &snode, link, vec)) {
|
|
|
|
|
int drawarrow = ((link.tonode && (link.tonode->type == NODE_REROUTE)) &&
|
|
|
|
|
(link.fromnode && (link.fromnode->type == NODE_REROUTE)));
|
|
|
|
|
int drawmuted = (link.flag & NODE_LINK_MUTED);
|
2021-06-02 17:19:36 +02:00
|
|
|
if (g_batch_link.batch == nullptr) {
|
2018-04-05 15:41:17 +02:00
|
|
|
nodelink_batch_init();
|
|
|
|
|
}
|
2021-10-21 21:00:17 +02:00
|
|
|
/* Draw single link. */
|
|
|
|
|
float colors[3][4] = {{0.0f}};
|
|
|
|
|
if (th_col3 != -1) {
|
|
|
|
|
UI_GetThemeColor4fv(th_col3, colors[0]);
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-03 16:25:17 -05:00
|
|
|
if (snode.overlay.flag & SN_OVERLAY_SHOW_OVERLAYS &&
|
|
|
|
|
snode.overlay.flag & SN_OVERLAY_SHOW_WIRE_COLORS) {
|
2021-11-02 18:29:35 +02:00
|
|
|
PointerRNA from_node_ptr, to_node_ptr;
|
2021-12-03 16:25:17 -05:00
|
|
|
RNA_pointer_create((ID *)snode.edittree, &RNA_Node, link.fromnode, &from_node_ptr);
|
|
|
|
|
RNA_pointer_create((ID *)snode.edittree, &RNA_Node, link.tonode, &to_node_ptr);
|
|
|
|
|
if (link.fromsock) {
|
|
|
|
|
node_socket_color_get(C, *snode.edittree, from_node_ptr, *link.fromsock, colors[1]);
|
2021-10-21 21:00:17 +02:00
|
|
|
}
|
|
|
|
|
else {
|
2021-12-03 16:25:17 -05:00
|
|
|
node_socket_color_get(C, *snode.edittree, to_node_ptr, *link.tosock, colors[1]);
|
2021-10-21 21:00:17 +02:00
|
|
|
}
|
|
|
|
|
|
2021-12-03 16:25:17 -05:00
|
|
|
if (link.tosock) {
|
|
|
|
|
node_socket_color_get(C, *snode.edittree, to_node_ptr, *link.tosock, colors[2]);
|
2021-10-21 21:00:17 +02:00
|
|
|
}
|
|
|
|
|
else {
|
2021-12-03 16:25:17 -05:00
|
|
|
node_socket_color_get(C, *snode.edittree, from_node_ptr, *link.fromsock, colors[2]);
|
2021-10-21 21:00:17 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
UI_GetThemeColor4fv(th_col1, colors[1]);
|
|
|
|
|
UI_GetThemeColor4fv(th_col2, colors[2]);
|
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2021-10-26 15:54:52 +02:00
|
|
|
/* Highlight links connected to selected nodes. */
|
2021-12-03 16:25:17 -05:00
|
|
|
const bool is_fromnode_selected = link.fromnode && link.fromnode->flag & SELECT;
|
|
|
|
|
const bool is_tonode_selected = link.tonode && link.tonode->flag & SELECT;
|
2021-10-26 15:54:52 +02:00
|
|
|
if (is_fromnode_selected || is_tonode_selected) {
|
|
|
|
|
float color_selected[4];
|
|
|
|
|
UI_GetThemeColor4fv(TH_EDGE_SELECT, color_selected);
|
|
|
|
|
const float alpha = color_selected[3];
|
|
|
|
|
|
|
|
|
|
/* Interpolate color if highlight color is not fully transparent. */
|
|
|
|
|
if (alpha != 0.0) {
|
|
|
|
|
if (is_fromnode_selected) {
|
|
|
|
|
interp_v3_v3v3(colors[1], colors[1], color_selected, alpha);
|
|
|
|
|
}
|
|
|
|
|
if (is_tonode_selected) {
|
|
|
|
|
interp_v3_v3v3(colors[2], colors[2], color_selected, alpha);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-02-11 01:16:17 -06:00
|
|
|
if (g_batch_link.enabled && !highlighted) {
|
2018-04-05 15:41:17 +02:00
|
|
|
/* Add link to batch. */
|
2021-07-15 11:00:23 +02:00
|
|
|
nodelink_batch_add_link(snode,
|
|
|
|
|
vec[0],
|
|
|
|
|
vec[1],
|
|
|
|
|
vec[2],
|
|
|
|
|
vec[3],
|
|
|
|
|
th_col1,
|
|
|
|
|
th_col2,
|
|
|
|
|
th_col3,
|
2021-10-21 21:00:17 +02:00
|
|
|
colors[1],
|
|
|
|
|
colors[2],
|
2021-07-15 11:00:23 +02:00
|
|
|
drawarrow,
|
|
|
|
|
drawmuted,
|
2021-09-27 15:10:28 +02:00
|
|
|
dim_factor,
|
2021-09-28 17:02:47 +02:00
|
|
|
thickness,
|
2021-10-21 21:00:17 +02:00
|
|
|
dash_factor,
|
|
|
|
|
dash_alpha);
|
2018-04-05 15:41:17 +02:00
|
|
|
}
|
|
|
|
|
else {
|
2021-02-11 01:16:17 -06:00
|
|
|
if (highlighted) {
|
|
|
|
|
float link_preselection_highlight_color[4];
|
|
|
|
|
UI_GetThemeColor4fv(TH_SELECT, link_preselection_highlight_color);
|
|
|
|
|
copy_v4_v4(colors[2], link_preselection_highlight_color);
|
|
|
|
|
}
|
|
|
|
|
|
2022-01-17 14:45:22 +01:00
|
|
|
NodeLinkData node_link_data;
|
|
|
|
|
for (int i = 0; i < 4; i++) {
|
|
|
|
|
copy_v2_v2(node_link_data.bezierPts[i], vec[i]);
|
|
|
|
|
}
|
|
|
|
|
for (int i = 0; i < 3; i++) {
|
2022-01-19 11:32:34 +01:00
|
|
|
copy_v4_v4(node_link_data.colors[i], colors[i]);
|
2022-01-17 14:45:22 +01:00
|
|
|
}
|
|
|
|
|
node_link_data.doArrow = drawarrow;
|
|
|
|
|
node_link_data.doMuted = drawmuted;
|
|
|
|
|
node_link_data.dim_factor = dim_factor;
|
|
|
|
|
node_link_data.thickness = thickness;
|
|
|
|
|
node_link_data.dash_factor = dash_factor;
|
|
|
|
|
node_link_data.dash_alpha = dash_alpha;
|
|
|
|
|
node_link_data.expandSize = snode.runtime->aspect * LINK_WIDTH;
|
|
|
|
|
node_link_data.arrowSize = ARROW_SIZE;
|
|
|
|
|
|
2018-07-18 00:12:21 +02:00
|
|
|
GPUBatch *batch = g_batch_link.batch_single;
|
2022-01-17 14:45:22 +01:00
|
|
|
GPUUniformBuf *ubo = GPU_uniformbuf_create_ex(
|
2022-01-19 11:32:34 +01:00
|
|
|
sizeof(NodeLinkData), &node_link_data, __func__);
|
2022-01-17 14:45:22 +01:00
|
|
|
|
2018-07-18 00:12:21 +02:00
|
|
|
GPU_batch_program_set_builtin(batch, GPU_SHADER_2D_NODELINK);
|
2022-01-17 14:45:22 +01:00
|
|
|
GPU_batch_uniformbuf_bind(batch, "node_link_data", ubo);
|
2018-07-18 00:12:21 +02:00
|
|
|
GPU_batch_draw(batch);
|
2022-01-17 14:45:22 +01:00
|
|
|
|
|
|
|
|
GPU_uniformbuf_unbind(ubo);
|
|
|
|
|
GPU_uniformbuf_free(ubo);
|
2012-06-01 12:38:03 +00:00
|
|
|
}
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-12-03 16:25:17 -05:00
|
|
|
void node_draw_link(const bContext &C,
|
|
|
|
|
const View2D &v2d,
|
|
|
|
|
const SpaceNode &snode,
|
|
|
|
|
const bNodeLink &link)
|
2008-12-24 10:33:10 +00:00
|
|
|
{
|
2014-10-17 10:18:40 +02:00
|
|
|
int th_col1 = TH_WIRE_INNER, th_col2 = TH_WIRE_INNER, th_col3 = TH_WIRE;
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2021-12-03 16:25:17 -05:00
|
|
|
if (link.fromsock == nullptr && link.tosock == nullptr) {
|
2008-12-24 10:33:10 +00:00
|
|
|
return;
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2011-01-09 18:59:35 +00:00
|
|
|
/* new connection */
|
2021-12-03 16:25:17 -05:00
|
|
|
if (!link.fromsock || !link.tosock) {
|
2018-04-05 15:41:17 +02:00
|
|
|
th_col1 = th_col2 = TH_ACTIVE;
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
/* going to give issues once... */
|
2021-12-03 16:25:17 -05:00
|
|
|
if (link.tosock->flag & SOCK_UNAVAIL) {
|
2008-12-24 10:33:10 +00:00
|
|
|
return;
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2021-12-03 16:25:17 -05:00
|
|
|
if (link.fromsock->flag & SOCK_UNAVAIL) {
|
2008-12-24 10:33:10 +00:00
|
|
|
return;
|
2019-03-26 21:16:47 +11:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2021-12-03 16:25:17 -05:00
|
|
|
if (link.flag & NODE_LINK_VALID) {
|
2012-06-24 10:49:22 +00:00
|
|
|
/* special indicated link, on drop-node */
|
2021-12-03 16:25:17 -05:00
|
|
|
if (link.flag & NODE_LINKFLAG_HILITE) {
|
2012-06-24 10:49:22 +00:00
|
|
|
th_col1 = th_col2 = TH_ACTIVE;
|
|
|
|
|
}
|
2021-12-03 16:25:17 -05:00
|
|
|
else if (link.flag & NODE_LINK_MUTED) {
|
2021-03-16 19:11:54 +00:00
|
|
|
th_col1 = th_col2 = TH_REDALERT;
|
|
|
|
|
}
|
2012-10-21 05:46:41 +00:00
|
|
|
}
|
2012-06-24 10:49:22 +00:00
|
|
|
else {
|
2021-03-16 19:11:54 +00:00
|
|
|
/* Invalid link. */
|
|
|
|
|
th_col1 = th_col2 = th_col3 = TH_REDALERT;
|
2018-04-05 15:41:17 +02:00
|
|
|
// th_col3 = -1; /* no shadow */
|
2019-04-17 06:17:24 +02:00
|
|
|
}
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
2021-09-23 15:21:31 -05:00
|
|
|
/* Links from field to non-field sockets are not allowed. */
|
2021-12-03 16:25:17 -05:00
|
|
|
if (snode.edittree->type == NTREE_GEOMETRY && !(link.flag & NODE_LINK_DRAGGED)) {
|
|
|
|
|
if ((link.fromsock && link.fromsock->display_shape == SOCK_DISPLAY_SHAPE_DIAMOND) &&
|
|
|
|
|
(link.tosock && link.tosock->display_shape == SOCK_DISPLAY_SHAPE_CIRCLE)) {
|
2021-09-23 15:21:31 -05:00
|
|
|
th_col1 = th_col2 = th_col3 = TH_REDALERT;
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2021-11-02 18:29:35 +02:00
|
|
|
node_draw_link_bezier(C, v2d, snode, link, th_col1, th_col2, th_col3);
|
2008-12-24 10:33:10 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2022-01-20 10:36:56 -06:00
|
|
|
} // namespace blender::ed::space_node
|
|
|
|
|
|
2020-02-08 01:02:18 +11:00
|
|
|
void ED_node_draw_snap(View2D *v2d, const float cent[2], float size, NodeBorder border, uint pos)
|
2012-06-29 14:34:46 +00:00
|
|
|
{
|
2018-07-18 00:12:21 +02:00
|
|
|
immBegin(GPU_PRIM_LINES, 4);
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2012-06-29 14:34:46 +00:00
|
|
|
if (border & (NODE_LEFT | NODE_RIGHT)) {
|
2017-02-02 03:14:52 -02:00
|
|
|
immVertex2f(pos, cent[0], v2d->cur.ymin);
|
|
|
|
|
immVertex2f(pos, cent[0], v2d->cur.ymax);
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2017-02-02 03:14:52 -02:00
|
|
|
immVertex2f(pos, cent[0], cent[1] - size);
|
|
|
|
|
immVertex2f(pos, cent[0], cent[1] + size);
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2012-06-29 14:34:46 +00:00
|
|
|
if (border & (NODE_TOP | NODE_BOTTOM)) {
|
2017-02-02 03:14:52 -02:00
|
|
|
immVertex2f(pos, v2d->cur.xmin, cent[1]);
|
|
|
|
|
immVertex2f(pos, v2d->cur.xmax, cent[1]);
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|
|
|
|
|
else {
|
2017-02-02 03:14:52 -02:00
|
|
|
immVertex2f(pos, cent[0] - size, cent[1]);
|
|
|
|
|
immVertex2f(pos, cent[0] + size, cent[1]);
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|
2019-04-17 06:17:24 +02:00
|
|
|
|
2017-02-02 03:14:52 -02:00
|
|
|
immEnd();
|
2012-06-29 14:34:46 +00:00
|
|
|
}
|