Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Bakker <jeroen@blender.org>2022-04-12 15:27:50 +0300
committerJeroen Bakker <jeroen@blender.org>2022-04-12 15:27:50 +0300
commitd3918312d86b88e0ea5252fe8a05d6946efbad28 (patch)
tree959a4ea36d4915a0a2a06c04286d4c05b7764bdf
parent01f79f7c93acf441c15842f6e505f5310e169c19 (diff)
Added support for secondary brush color.
-rw-r--r--source/blender/editors/sculpt_paint/sculpt_paint_image.cc32
1 files changed, 19 insertions, 13 deletions
diff --git a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
index c293b28597a..d537ed9d8d3 100644
--- a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
@@ -17,6 +17,7 @@
#include "IMB_colormanagement.h"
#include "IMB_imbuf.h"
+#include "BKE_brush.h"
#include "BKE_image_wrappers.hh"
#include "BKE_material.h"
#include "BKE_pbvh.h"
@@ -156,18 +157,14 @@ template<typename ImageBuffer> class PaintingKernel {
init_brush_test();
}
- bool paint(const Triangles &triangles, const PackedPixelRow &encoded_pixels, ImBuf *image_buffer)
+ bool paint(const Triangles &triangles, const PackedPixelRow &pixel_row, ImBuf *image_buffer)
{
- if (image_buffer != last_used_image_buffer_ptr) {
- last_used_image_buffer_ptr = image_buffer;
- init_brush_color(image_buffer);
- }
- image_accessor.set_image_position(image_buffer, encoded_pixels.start_image_coordinate);
- const TrianglePaintInput triangle = triangles.get_paint_input(encoded_pixels.triangle_index);
- float3 pixel_pos = get_start_pixel_pos(triangle, encoded_pixels);
- const float3 delta_pixel_pos = get_delta_pixel_pos(triangle, encoded_pixels, pixel_pos);
+ image_accessor.set_image_position(image_buffer, pixel_row.start_image_coordinate);
+ const TrianglePaintInput triangle = triangles.get_paint_input(pixel_row.triangle_index);
+ float3 pixel_pos = get_start_pixel_pos(triangle, pixel_row);
+ const float3 delta_pixel_pos = get_delta_pixel_pos(triangle, pixel_row, pixel_pos);
bool pixels_painted = false;
- for (int x = 0; x < encoded_pixels.num_pixels; x++) {
+ for (int x = 0; x < pixel_row.num_pixels; x++) {
if (!brush_test_fn(&test, pixel_pos)) {
pixel_pos += delta_pixel_pos;
image_accessor.next_pixel();
@@ -194,16 +191,17 @@ template<typename ImageBuffer> class PaintingKernel {
return pixels_painted;
}
- private:
void init_brush_color(ImBuf *image_buffer)
{
- /* TODO: use StringRefNull. */
const char *to_colorspace = image_accessor.get_colorspace_name(image_buffer);
if (last_used_color_space == to_colorspace) {
return;
}
+ copy_v3_v3(brush_color,
+ ss->cache->invert ? BKE_brush_secondary_color_get(ss->scene, brush) :
+ BKE_brush_color_get(ss->scene, brush));
+ brush_color[3] = 1.0f;
- copy_v4_fl4(brush_color, brush->rgb[0], brush->rgb[1], brush->rgb[2], 1.0);
const char *from_colorspace = IMB_colormanagement_role_colorspace_name_get(
COLOR_ROLE_COLOR_PICKING);
ColormanageProcessor *cm_processor = IMB_colormanagement_colorspace_processor_new(
@@ -213,6 +211,7 @@ template<typename ImageBuffer> class PaintingKernel {
last_used_color_space = to_colorspace;
}
+ private:
void init_brush_strength()
{
brush_strength = ss->cache->bstrength;
@@ -325,6 +324,13 @@ static void do_paint_pixels(void *__restrict userdata,
continue;
}
+ if (image_buffer->rect_float != nullptr) {
+ kernel_float4.init_brush_color(image_buffer);
+ }
+ else {
+ kernel_float4.init_brush_color(image_buffer);
+ }
+
for (const PackedPixelRow &pixel_row : tile_data.pixel_rows) {
if (!triangle_brush_test_results[pixel_row.triangle_index]) {
continue;