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
path: root/source
diff options
context:
space:
mode:
authorJeroen Bakker <jeroen@blender.org>2022-04-13 15:27:19 +0300
committerJeroen Bakker <jeroen@blender.org>2022-04-13 15:27:19 +0300
commit24fea2bdc4b1144856032a73d9a3d5fd178405b6 (patch)
treec79c8fc65a5659d05d5a01546a6c424e319e4979 /source
parentbabd027faef947ae0417f3d2e61ec8188c823ad2 (diff)
Cleanup: Split paint_canvas into BKE and ED.
The BKE part is needed for the 3d texture paiting brush to be part of blender kernel.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_paint.h7
-rw-r--r--source/blender/blenkernel/CMakeLists.txt1
-rw-r--r--source/blender/blenkernel/intern/paint_canvas.cc90
-rw-r--r--source/blender/editors/include/ED_paint.h5
-rw-r--r--source/blender/editors/sculpt_paint/paint_canvas.cc71
5 files changed, 101 insertions, 73 deletions
diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h
index 1b296277b8f..db773d34cdc 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -42,6 +42,7 @@ struct Object;
struct PBVH;
struct Paint;
struct PaintCurve;
+struct PaintModeSettings;
struct Palette;
struct PaletteColor;
struct Scene;
@@ -725,6 +726,12 @@ enum {
SCULPT_MASK_LAYER_CALC_LOOP = (1 << 1),
};
+/* paint_canvas.cc */
+struct Image *BKE_paint_canvas_image_get(const struct PaintModeSettings *settings,
+ struct Object *ob);
+int BKE_paint_canvas_uvmap_layer_index_get(const struct PaintModeSettings *settings,
+ struct Object *ob);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index aca8cdf916e..c8af4bb69b8 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -235,6 +235,7 @@ set(SRC
intern/outliner_treehash.c
intern/packedFile.c
intern/paint.c
+ intern/paint_canvas.cc
intern/paint_toolslots.c
intern/particle.c
intern/particle_child.c
diff --git a/source/blender/blenkernel/intern/paint_canvas.cc b/source/blender/blenkernel/intern/paint_canvas.cc
new file mode 100644
index 00000000000..c1145164642
--- /dev/null
+++ b/source/blender/blenkernel/intern/paint_canvas.cc
@@ -0,0 +1,90 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+#include "BLI_compiler_compat.h"
+
+#include "DNA_material_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_scene_types.h"
+
+#include "BKE_customdata.h"
+#include "BKE_material.h"
+#include "BKE_paint.h"
+
+namespace blender::bke::paint::canvas {
+static TexPaintSlot *get_active_slot(Object *ob)
+{
+ Material *mat = BKE_object_material_get(ob, ob->actcol);
+ if (mat == nullptr) {
+ return nullptr;
+ }
+ if (mat->texpaintslot == nullptr) {
+ return nullptr;
+ }
+ if (mat->paint_active_slot >= mat->tot_slots) {
+ return nullptr;
+ }
+
+ TexPaintSlot *slot = &mat->texpaintslot[mat->paint_active_slot];
+ return slot;
+}
+
+} // namespace blender::bke::paint::canvas
+
+extern "C" {
+
+using namespace blender::bke::paint::canvas;
+
+Image *BKE_paint_canvas_image_get(const struct PaintModeSettings *settings, struct Object *ob)
+{
+ switch (settings->canvas_source) {
+ case PAINT_CANVAS_SOURCE_COLOR_ATTRIBUTE:
+ return nullptr;
+ case PAINT_CANVAS_SOURCE_IMAGE:
+ return settings->canvas_image;
+ case PAINT_CANVAS_SOURCE_MATERIAL: {
+ TexPaintSlot *slot = get_active_slot(ob);
+ if (slot == nullptr) {
+ break;
+ }
+ return slot->ima;
+ }
+ }
+ return nullptr;
+}
+
+int BKE_paint_canvas_uvmap_layer_index_get(const struct PaintModeSettings *settings,
+ struct Object *ob)
+{
+ switch (settings->canvas_source) {
+ case PAINT_CANVAS_SOURCE_COLOR_ATTRIBUTE:
+ return -1;
+ case PAINT_CANVAS_SOURCE_IMAGE: {
+ /* Use active uv map of the object. */
+ if (ob->type != OB_MESH) {
+ return -1;
+ }
+
+ const Mesh *mesh = static_cast<Mesh *>(ob->data);
+ return CustomData_get_active_layer_index(&mesh->ldata, CD_MLOOPUV);
+ }
+ case PAINT_CANVAS_SOURCE_MATERIAL: {
+ /* Use uv map of the canvas. */
+ TexPaintSlot *slot = get_active_slot(ob);
+ if (slot == nullptr) {
+ break;
+ }
+
+ if (ob->type != OB_MESH) {
+ return -1;
+ }
+
+ if (slot->uvname == nullptr) {
+ return -1;
+ }
+
+ const Mesh *mesh = static_cast<Mesh *>(ob->data);
+ return CustomData_get_named_layer_index(&mesh->ldata, CD_MLOOPUV, slot->uvname);
+ }
+ }
+ return -1;
+}
+}
diff --git a/source/blender/editors/include/ED_paint.h b/source/blender/editors/include/ED_paint.h
index cd28fbe9687..ba5834fd508 100644
--- a/source/blender/editors/include/ED_paint.h
+++ b/source/blender/editors/include/ED_paint.h
@@ -114,11 +114,6 @@ void ED_paintcurve_undo_push_end(struct bContext *C);
void ED_paintcurve_undosys_type(struct UndoType *ut);
/* paint_canvas.cc */
-struct Image *ED_paint_canvas_image_get(const struct PaintModeSettings *settings,
- struct Object *ob);
-int ED_paint_canvas_uvmap_layer_index_get(const struct PaintModeSettings *settings,
- struct Object *ob);
-
/** Color type of an object can be overridden in sculpt/paint mode. */
eV3DShadingColorType ED_paint_shading_color_override(struct bContext *C,
const struct PaintModeSettings *settings,
diff --git a/source/blender/editors/sculpt_paint/paint_canvas.cc b/source/blender/editors/sculpt_paint/paint_canvas.cc
index 5683e3ff741..9262cbebcac 100644
--- a/source/blender/editors/sculpt_paint/paint_canvas.cc
+++ b/source/blender/editors/sculpt_paint/paint_canvas.cc
@@ -2,20 +2,11 @@
#include "BLI_compiler_compat.h"
#include "DNA_material_types.h"
-#include "DNA_mesh_types.h"
-#include "DNA_node_types.h"
-#include "DNA_screen_types.h"
+#include "DNA_scene_types.h"
#include "DNA_workspace_types.h"
-#include "BKE_context.h"
-#include "BKE_customdata.h"
#include "BKE_material.h"
#include "BKE_paint.h"
-#include "BKE_pbvh.h"
-
-#include "DEG_depsgraph.h"
-
-#include "NOD_shader.h"
#include "WM_toolsystem.h"
@@ -43,16 +34,15 @@ static TexPaintSlot *get_active_slot(Object *ob)
extern "C" {
-using namespace blender;
using namespace blender::ed::sculpt_paint::canvas;
/* Does the paint tool with the given idname uses a canvas. */
-static bool paint_tool_uses_canvas(StringRef idname)
+static bool paint_tool_uses_canvas(blender::StringRef idname)
{
return ELEM(idname, "builtin_brush.Paint", "builtin_brush.Smear", "builtin.color_filter");
}
-static bool paint_tool_shading_color_follows_last_used(StringRef idname)
+static bool paint_tool_shading_color_follows_last_used(blender::StringRef idname)
{
/* TODO(jbakker): complete this list. */
return ELEM(idname, "builtin_brush.Mask");
@@ -147,59 +137,4 @@ eV3DShadingColorType ED_paint_shading_color_override(bContext *C,
return color_type;
}
-
-Image *ED_paint_canvas_image_get(const struct PaintModeSettings *settings, struct Object *ob)
-{
- switch (settings->canvas_source) {
- case PAINT_CANVAS_SOURCE_COLOR_ATTRIBUTE:
- return nullptr;
- case PAINT_CANVAS_SOURCE_IMAGE:
- return settings->canvas_image;
- case PAINT_CANVAS_SOURCE_MATERIAL: {
- TexPaintSlot *slot = get_active_slot(ob);
- if (slot == nullptr) {
- break;
- }
- return slot->ima;
- }
- }
- return nullptr;
-}
-
-int ED_paint_canvas_uvmap_layer_index_get(const struct PaintModeSettings *settings,
- struct Object *ob)
-{
- switch (settings->canvas_source) {
- case PAINT_CANVAS_SOURCE_COLOR_ATTRIBUTE:
- return -1;
- case PAINT_CANVAS_SOURCE_IMAGE: {
- /* Use active uv map of the object. */
- if (ob->type != OB_MESH) {
- return -1;
- }
-
- const Mesh *mesh = static_cast<Mesh *>(ob->data);
- return CustomData_get_active_layer_index(&mesh->ldata, CD_MLOOPUV);
- }
- case PAINT_CANVAS_SOURCE_MATERIAL: {
- /* Use uv map of the canvas. */
- TexPaintSlot *slot = get_active_slot(ob);
- if (slot == nullptr) {
- break;
- }
-
- if (ob->type != OB_MESH) {
- return -1;
- }
-
- if (slot->uvname == nullptr) {
- return -1;
- }
-
- const Mesh *mesh = static_cast<Mesh *>(ob->data);
- return CustomData_get_named_layer_index(&mesh->ldata, CD_MLOOPUV, slot->uvname);
- }
- }
- return -1;
-}
}