Commit: 624f3c254f2b70fd78bbf7b562a7c6b156db78b8
Author: Clément Foucault
Date:   Thu Jan 5 10:48:22 2017 +0100
Branches: clay-engine
https://developer.blender.org/rB624f3c254f2b70fd78bbf7b562a7c6b156db78b8

(Clay) Added Render settings:
- Default clay settings inside Scene RNA
- Material clay settings RNA is here and will be used once we can render 
multiple meshes

===================================================================

M       release/scripts/startup/bl_ui/properties_material.py
M       release/scripts/startup/bl_ui/properties_render.py
M       source/blender/draw/engines/clay/clay.c
M       source/blender/draw/engines/clay/shaders/clay_frag.glsl
M       source/blender/draw/intern/DRW_render.h
M       source/blender/draw/intern/draw_manager.c
M       source/blender/makesdna/DNA_material_types.h
M       source/blender/makesdna/DNA_scene_types.h
M       source/blender/makesrna/intern/rna_material.c
M       source/blender/makesrna/intern/rna_scene.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/properties_material.py 
b/release/scripts/startup/bl_ui/properties_material.py
index d916007..408db68 100644
--- a/release/scripts/startup/bl_ui/properties_material.py
+++ b/release/scripts/startup/bl_ui/properties_material.py
@@ -106,7 +106,7 @@ class MaterialButtonsPanel:
 class MATERIAL_PT_context_material(MaterialButtonsPanel, Panel):
     bl_label = ""
     bl_options = {'HIDE_HEADER'}
-    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY'}
 
     @classmethod
     def poll(cls, context):
@@ -1052,5 +1052,14 @@ class MATERIAL_PT_custom_props(MaterialButtonsPanel, 
PropertyPanel, Panel):
     _context_path = "material"
     _property_type = bpy.types.Material
 
+
+class MATERIAL_PT_clay_settings(MaterialButtonsPanel, Panel):
+    bl_label = "Matcap"
+    COMPAT_ENGINES = {'BLENDER_CLAY'}
+
+    def draw(self, context):
+        settings = context.material.clay_settings
+        self.layout.template_icon_view(settings, "matcap_icon")
+
 if __name__ == "__main__":  # only for live edit.
     bpy.utils.register_module(__name__)
diff --git a/release/scripts/startup/bl_ui/properties_render.py 
b/release/scripts/startup/bl_ui/properties_render.py
index 850606e..3a9c431 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -584,5 +584,14 @@ class RENDER_PT_bake(RenderButtonsPanel, Panel):
             sub.prop(rd, "bake_user_scale", text="User Scale")
 
 
+class RENDER_PT_clay(RenderButtonsPanel, Panel):
+    bl_label = "Default Clay"
+    COMPAT_ENGINES = {'BLENDER_CLAY'}
+
+    def draw(self, context):
+        settings = context.scene.clay_settings
+        self.layout.template_icon_view(settings, "matcap_icon")
+
+
 if __name__ == "__main__":  # only for live edit.
     bpy.utils.register_module(__name__)
diff --git a/source/blender/draw/engines/clay/clay.c 
b/source/blender/draw/engines/clay/clay.c
index d35b887..cfc2916 100644
--- a/source/blender/draw/engines/clay/clay.c
+++ b/source/blender/draw/engines/clay/clay.c
@@ -50,6 +50,7 @@ static struct CLAY_data {
 
        /* Matcap textures */
        struct GPUTexture *matcap_array;
+       int matcap_id;
 
        /* Ssao */
        float dfdyfac[2];
@@ -91,26 +92,85 @@ static void add_icon_to_rect(PreviewImage *prv, float 
*final_rect, int layer)
                                   false, prv->w[0], prv->h[0], prv->w[0], 
prv->w[0]);
 }
 
+static void load_matcaps(PreviewImage *prv[24], int nbr)
+{
+       int w = prv[0]->w[0];
+       int h = prv[0]->h[0];
+       float *final_rect = MEM_callocN(sizeof(float) * 4 * w * h * nbr, "Clay 
Matcap array rect");
+
+       for (int i = 0; i < nbr; ++i) {
+               add_icon_to_rect(prv[i], final_rect, i);
+               BKE_previewimg_free(&prv[i]);
+       }
+
+       data.matcap_array = DRW_texture_create_2D_array(w, h, nbr, final_rect);
+
+       MEM_freeN(final_rect);
+}
+
+static int matcap_to_index(int matcap)
+{
+       if (matcap == ICON_MATCAP_02) return 1;
+       else if (matcap == ICON_MATCAP_03) return 2;
+       else if (matcap == ICON_MATCAP_04) return 3;
+       else if (matcap == ICON_MATCAP_05) return 4;
+       else if (matcap == ICON_MATCAP_06) return 5;
+       else if (matcap == ICON_MATCAP_07) return 6;
+       else if (matcap == ICON_MATCAP_08) return 7;
+       else if (matcap == ICON_MATCAP_09) return 8;
+       else if (matcap == ICON_MATCAP_10) return 9;
+       else if (matcap == ICON_MATCAP_11) return 10;
+       else if (matcap == ICON_MATCAP_12) return 11;
+       else if (matcap == ICON_MATCAP_13) return 12;
+       else if (matcap == ICON_MATCAP_14) return 13;
+       else if (matcap == ICON_MATCAP_15) return 14;
+       else if (matcap == ICON_MATCAP_16) return 15;
+       else if (matcap == ICON_MATCAP_17) return 16;
+       else if (matcap == ICON_MATCAP_18) return 17;
+       else if (matcap == ICON_MATCAP_19) return 18;
+       else if (matcap == ICON_MATCAP_20) return 19;
+       else if (matcap == ICON_MATCAP_21) return 20;
+       else if (matcap == ICON_MATCAP_22) return 21;
+       else if (matcap == ICON_MATCAP_23) return 22;
+       else if (matcap == ICON_MATCAP_24) return 23;
+       return 0;
+}
+
 static void clay_init_engine(void)
 {
        DRWBatch *batch;
 
        /* Create Texture Array */
        {
-               PreviewImage *prv[2];
-               int layers = 2; /* For now only use the 24 internal matcaps */
-
-               prv[0] = UI_icon_to_preview(ICON_MATCAP_02);
-               float *final_rect = MEM_callocN(sizeof(float) * 4 * 
prv[0]->w[0] * prv[0]->h[0] * layers, "Clay Matcap array rect");
-               add_icon_to_rect(prv[0], final_rect, 0);
-
-               prv[1] = UI_icon_to_preview(ICON_MATCAP_03);
-               add_icon_to_rect(prv[1], final_rect, 1);
-
-               data.matcap_array = DRW_texture_create_2D_array(prv[1]->w[0], 
prv[1]->h[0], layers, final_rect);
-               MEM_freeN(final_rect);
-               BKE_previewimg_free(&prv[0]);
-               BKE_previewimg_free(&prv[1]);
+               PreviewImage *prv[24]; /* For now use all of the 24 internal 
matcaps */
+
+               /* TODO only load used matcaps */
+               prv[0]  = UI_icon_to_preview(ICON_MATCAP_01);
+               prv[1]  = UI_icon_to_preview(ICON_MATCAP_02);
+               prv[2]  = UI_icon_to_preview(ICON_MATCAP_03);
+               prv[3]  = UI_icon_to_preview(ICON_MATCAP_04);
+               prv[4]  = UI_icon_to_preview(ICON_MATCAP_05);
+               prv[5]  = UI_icon_to_preview(ICON_MATCAP_06);
+               prv[6]  = UI_icon_to_preview(ICON_MATCAP_07);
+               prv[7]  = UI_icon_to_preview(ICON_MATCAP_08);
+               prv[8]  = UI_icon_to_preview(ICON_MATCAP_09);
+               prv[9]  = UI_icon_to_preview(ICON_MATCAP_10);
+               prv[10] = UI_icon_to_preview(ICON_MATCAP_11);
+               prv[11] = UI_icon_to_preview(ICON_MATCAP_12);
+               prv[12] = UI_icon_to_preview(ICON_MATCAP_13);
+               prv[13] = UI_icon_to_preview(ICON_MATCAP_14);
+               prv[14] = UI_icon_to_preview(ICON_MATCAP_15);
+               prv[15] = UI_icon_to_preview(ICON_MATCAP_16);
+               prv[16] = UI_icon_to_preview(ICON_MATCAP_17);
+               prv[17] = UI_icon_to_preview(ICON_MATCAP_18);
+               prv[18] = UI_icon_to_preview(ICON_MATCAP_19);
+               prv[19] = UI_icon_to_preview(ICON_MATCAP_20);
+               prv[20] = UI_icon_to_preview(ICON_MATCAP_21);
+               prv[21] = UI_icon_to_preview(ICON_MATCAP_22);
+               prv[22] = UI_icon_to_preview(ICON_MATCAP_23);
+               prv[23] = UI_icon_to_preview(ICON_MATCAP_24);
+
+               load_matcaps(prv, 24);
        }
 
        /* Depth prepass */
@@ -130,6 +190,7 @@ static void clay_init_engine(void)
        /* Shading pass */
        {
                int bindloc = 0;
+               data.matcap_id = 5;
 
                data.clay_sh = DRW_shader_create(datatoc_clay_vert_glsl, NULL, 
datatoc_clay_frag_glsl, NULL);
                data.clay_itf = DRW_interface_create(data.clay_sh);
@@ -137,6 +198,7 @@ static void clay_init_engine(void)
                DRW_interface_uniform_ivec2(data.clay_sh, data.clay_itf, 
"screenres", DRW_viewport_size_get(), 1);
                DRW_interface_uniform_buffer(data.clay_sh, data.clay_itf, 
"depthtex", SCENE_DEPTH, bindloc++);
                DRW_interface_uniform_texture(data.clay_sh, data.clay_itf, 
"matcaps", data.matcap_array, bindloc++);
+               DRW_interface_uniform_int(data.clay_sh, data.clay_itf, 
"matcap_index", &data.matcap_id, 1);
 
                /* SSAO */
                DRW_interface_uniform_mat4(data.clay_sh, data.clay_itf, 
"WinMatrix", data.winmat);
@@ -241,6 +303,17 @@ static void clay_view_draw(RenderEngine *UNUSED(engine), 
const struct bContext *
        if (!data.clay_sh)
                clay_init_engine();
 
+       /* Settings */
+       EngineDataClay *engine_data = &CTX_data_scene(context)->claydata;
+
+       if (engine_data->matcap_icon < ICON_MATCAP_01 ||
+           engine_data->matcap_icon > ICON_MATCAP_24)
+       {
+               engine_data->matcap_icon = ICON_MATCAP_01;
+       }
+
+       data.matcap_id = matcap_to_index(engine_data->matcap_icon);
+
        /* TODO : tag to refresh by the deps graph */
        /* ideally only refresh when objects are added/removed */
        /* or render properties / materials change */
diff --git a/source/blender/draw/engines/clay/shaders/clay_frag.glsl 
b/source/blender/draw/engines/clay/shaders/clay_frag.glsl
index 7e684e6..ad65db52 100644
--- a/source/blender/draw/engines/clay/shaders/clay_frag.glsl
+++ b/source/blender/draw/engines/clay/shaders/clay_frag.glsl
@@ -3,6 +3,7 @@ uniform ivec2 screenres;
 uniform sampler2D depthtex;
 uniform sampler2DArray matcaps;
 uniform mat4 WinMatrix;
+uniform int matcap_index;
 
 /* store the view space vectors for the corners of the view frustum here.
  * It helps to quickly reconstruct view space vectors by using uv coordinates,
@@ -51,6 +52,6 @@ void main() {
        vec3 position = get_view_space_from_depth(uvs, viewvecs[0].xyz, 
viewvecs[1].xyz, depth);
        vec3 normal = calculate_view_space_normal(position);
        // vec4 col = texture(matcaps, vec3(uvs, step(0.5, uvs.x)));
-       vec4 col = texture(matcaps, vec3(abs(normal.xy * .5 + 0.5), step(0.5, 
uvs.x)));
+       vec4 col = texture(matcaps, vec3(abs(normal.xy * .5 + 0.5), 
float(matcap_index)));
        fragColor = col;
 }
\ No newline at end of file
diff --git a/source/blender/draw/intern/DRW_render.h 
b/source/blender/draw/intern/DRW_render.h
index 407ba44..49a65cc 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -38,6 +38,7 @@
 
 #include "BLT_translation.h"
 
+#include "DNA_material_types.h"
 #include "DNA_scene_types.h"
 
 #include "MEM_guardedalloc.h"
diff --git a/source/blender/draw/intern/draw_manager.c 
b/source/blender/draw/intern/draw_manager.c
index 4fdf61b..78c0497 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -237,7 +237,7 @@ void DRW_interface_uniform_mat4(struct GPUShader *shader, 
DRWInterface *interfac
 
 void DRW_get_dfdy_factors(float dfdyfac[2])
 {
-       GPU_get_dfdy_factors(dfdyfac);  
+       GPU_get_dfdy_factors(dfdyfac);
 }
 
 /* ****************************************** DRAW 
******************************************/
diff --git a/source/blender/makesdna/DNA_material_types.h 
b/source/blender/makesdna/DNA_material_types.h
index 0c500e3..e078eb8 100644
--- a/source/blender/makesdna/DNA_material_types.h
+++ b/source/blender/makesdna/DNA_material_types.h
@@ -90,6 +90,11 @@ typedef struct TexPaintSlot {
        int pad;
 } TexPaintSlot;
 
+typedef struct EngineSettingsClay {
+       short matcap_icon; /* Icon ID */
+       short pad;
+} EngineSettingsClay;
+
 typedef struct Material {
        ID id;
        struct AnimData *adt;   /* animation data (must be immediately after id 
for utilities to use it) */ 
@@ -203,6 +208,10 @@ typedef struct Material {
 
        struct TexPaintSlot *texpaintslot; /* cached slot for painting. Make 
sure to recalculate before use
                                       

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to