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:
authorClément Foucault <foucault.clem@gmail.com>2018-12-23 18:26:21 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-01-11 18:00:23 +0300
commitb98e6743dcaf8ec513bbbadc0015cb8729a72a18 (patch)
tree6eca66c816ff25cbe91b31a7a370ed0efcef723c /source/blender/draw/modes/paint_texture_mode.c
parent9177bb33f68f66609b29e1e53a90552cae8026b3 (diff)
Texture Paint: Add filtering option for texture paint overlay
The overlay should now use the texture interpolation setting in material mode. In image mode, there is now a new button to let the user choose the texture filter. The option is located in the Texture Slots popover and only shows in Image mode.
Diffstat (limited to 'source/blender/draw/modes/paint_texture_mode.c')
-rw-r--r--source/blender/draw/modes/paint_texture_mode.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/source/blender/draw/modes/paint_texture_mode.c b/source/blender/draw/modes/paint_texture_mode.c
index 200daf66c83..757b43b6c04 100644
--- a/source/blender/draw/modes/paint_texture_mode.c
+++ b/source/blender/draw/modes/paint_texture_mode.c
@@ -28,6 +28,8 @@
#include "BIF_gl.h"
+#include "BKE_node.h"
+
/* If builtin shaders are needed */
#include "GPU_shader.h"
#include "GPU_texture.h"
@@ -139,8 +141,6 @@ static void PAINT_TEXTURE_engine_init(void *UNUSED(vedata))
if (!e_data.fallback_sh) {
e_data.fallback_sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
- e_data.image_sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
-
e_data.image_sh = DRW_shader_create_with_lib(
datatoc_paint_texture_vert_glsl, NULL,
datatoc_paint_texture_frag_glsl,
@@ -189,7 +189,8 @@ static void PAINT_TEXTURE_cache_init(void *vedata)
Object *ob = draw_ctx->obact;
if (ob && ob->type == OB_MESH) {
Scene *scene = draw_ctx->scene;
- const bool use_material_slots = (scene->toolsettings->imapaint.mode == IMAGEPAINT_MODE_MATERIAL);
+ const ImagePaintSettings *imapaint = &scene->toolsettings->imapaint;
+ const bool use_material_slots = (imapaint->mode == IMAGEPAINT_MODE_MATERIAL);
const Mesh *me = ob->data;
const int mat_nr = max_ii(1, me->totcol);
@@ -200,6 +201,7 @@ static void PAINT_TEXTURE_cache_init(void *vedata)
for (int i = 0; i < mat_nr; i++) {
Material *ma = give_current_material(ob, i + 1);
Image *ima = (ma && ma->texpaintslot) ? ma->texpaintslot[ma->paint_active_slot].ima : NULL;
+ int interp = (ma && ma->texpaintslot) ? ma->texpaintslot[ma->paint_active_slot].interp : 0;
GPUTexture *tex = ima ?
GPU_texture_from_blender(ima, NULL, GL_TEXTURE_2D, false, 0.0f) : NULL;
@@ -208,6 +210,7 @@ static void PAINT_TEXTURE_cache_init(void *vedata)
DRW_shgroup_uniform_texture(grp, "image", tex);
DRW_shgroup_uniform_float(grp, "alpha", &draw_ctx->v3d->overlay.texture_paint_mode_opacity, 1);
DRW_shgroup_uniform_block(grp, "globalsBlock", globals_ubo);
+ DRW_shgroup_uniform_bool_copy(grp, "nearestInterp", interp == SHD_INTERP_CLOSEST);
stl->g_data->shgroup_image_array[i] = grp;
}
else {
@@ -216,7 +219,7 @@ static void PAINT_TEXTURE_cache_init(void *vedata)
}
}
else {
- Image *ima = scene->toolsettings->imapaint.canvas;
+ Image *ima = imapaint->canvas;
GPUTexture *tex = ima ?
GPU_texture_from_blender(ima, NULL, GL_TEXTURE_2D, false, 0.0f) : NULL;
@@ -225,6 +228,7 @@ static void PAINT_TEXTURE_cache_init(void *vedata)
DRW_shgroup_uniform_texture(grp, "image", tex);
DRW_shgroup_uniform_float(grp, "alpha", &draw_ctx->v3d->overlay.texture_paint_mode_opacity, 1);
DRW_shgroup_uniform_block(grp, "globalsBlock", globals_ubo);
+ DRW_shgroup_uniform_bool_copy(grp, "nearestInterp", imapaint->interp == IMAGEPAINT_INTERP_CLOSEST);
stl->g_data->shgroup_image_array[0] = grp;
}
else {