Fix T37670: Paint mode + procedural map colours error
Summary: Seems to be known TODO in the code, but no idea why it was never solved, especially since tweak is so much easy. It might be arguable that we need to support painting color space, but it's still much better to convert to sRGB space. It's gonna to cover 90% of cases anyway. Reviewers: campbellbarton, brecht Reviewed By: brecht Maniphest Tasks: T37670 Differential Revision: http://developer.blender.org/D65
This commit is contained in:
parent
e63d5f2356
commit
d3f3fb89cc
Notes:
blender-bot
2023-05-31 04:43:10 +02:00
Referenced by issue #37670, Paint mode + procedural map colours error
|
@ -45,6 +45,7 @@
|
|||
#include "BKE_texture.h"
|
||||
#include "BKE_icons.h"
|
||||
|
||||
#include "IMB_colormanagement.h"
|
||||
#include "IMB_imbuf.h"
|
||||
#include "IMB_imbuf_types.h"
|
||||
|
||||
|
@ -639,6 +640,16 @@ float BKE_brush_sample_tex_3D(const Scene *scene, Brush *br,
|
|||
rgba[2] = intensity;
|
||||
rgba[3] = 1.0f;
|
||||
}
|
||||
else {
|
||||
if (br->mtex.tex->type == TEX_IMAGE && br->mtex.tex->ima) {
|
||||
ImBuf *tex_ibuf = BKE_image_pool_acquire_ibuf(br->mtex.tex->ima, &br->mtex.tex->iuser, pool);
|
||||
/* For consistency, sampling always returns color in linear space */
|
||||
if (tex_ibuf->rect_float == NULL) {
|
||||
IMB_colormanagement_colorspace_to_scene_linear_v3(rgba, tex_ibuf->rect_colorspace);
|
||||
}
|
||||
BKE_image_pool_release_ibuf(br->mtex.tex->ima, tex_ibuf, pool);
|
||||
}
|
||||
}
|
||||
|
||||
return intensity;
|
||||
}
|
||||
|
|
|
@ -275,6 +275,10 @@ static ImBuf *brush_painter_imbuf_new(BrushPainter *painter, int size)
|
|||
if (is_texbrush) {
|
||||
brush_imbuf_tex_co(&tex_mapping, x, y, texco);
|
||||
BKE_brush_sample_tex_3D(scene, brush, texco, rgba, thread, pool);
|
||||
/* TODO(sergey): Support texture paint color space. */
|
||||
if (!use_float) {
|
||||
linearrgb_to_srgb_v3_v3(rgba, rgba);
|
||||
}
|
||||
mul_v3_v3(rgba, brush_rgb);
|
||||
}
|
||||
else {
|
||||
|
@ -362,6 +366,10 @@ static void brush_painter_imbuf_update(BrushPainter *painter, ImBuf *oldtexibuf,
|
|||
if (is_texbrush) {
|
||||
brush_imbuf_tex_co(&tex_mapping, x, y, texco);
|
||||
BKE_brush_sample_tex_3D(scene, brush, texco, rgba, thread, pool);
|
||||
/* TODO(sergey): Support texture paint color space. */
|
||||
if (!use_float) {
|
||||
linearrgb_to_srgb_v3_v3(rgba, rgba);
|
||||
}
|
||||
mul_v3_v3(rgba, brush_rgb);
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -3758,8 +3758,9 @@ static void do_projectpaint_draw(ProjPaintState *ps, ProjPixel *projPixel, const
|
|||
copy_v3_v3(rgb, ps->brush->rgb);
|
||||
|
||||
if (ps->is_texbrush) {
|
||||
/* XXX actually should convert texrgb from linear to srgb here */
|
||||
mul_v3_v3(rgb, texrgb);
|
||||
/* TODO(sergey): Support texture paint color space. */
|
||||
linearrgb_to_srgb_v3_v3(rgb, rgb);
|
||||
}
|
||||
|
||||
rgb_float_to_uchar(rgba_ub, rgb);
|
||||
|
|
Loading…
Reference in New Issue