Commit: e05800d23b40a6eda0b154de934f8f8c6e1b3438
Author: Clément Foucault
Date:   Thu Feb 9 20:55:31 2017 +0100
Branches: blender2.8
https://developer.blender.org/rBe05800d23b40a6eda0b154de934f8f8c6e1b3438

Clay Engine: converted Empties to the new instancing method

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

M       source/blender/draw/intern/draw_mode_pass.c
M       source/blender/gpu/CMakeLists.txt
M       source/blender/gpu/GPU_shader.h
M       source/blender/gpu/intern/gpu_shader.c
A       
source/blender/gpu/shaders/gpu_shader_instance_variying_size_variying_color_vert.glsl
R100    source/blender/gpu/shaders/gpu_shader_3D_instance_vert.glsl     
source/blender/gpu/shaders/gpu_shader_instance_vert.glsl

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

diff --git a/source/blender/draw/intern/draw_mode_pass.c 
b/source/blender/draw/intern/draw_mode_pass.c
index 53ee769c04..a5b2d0a09c 100644
--- a/source/blender/draw/intern/draw_mode_pass.c
+++ b/source/blender/draw/intern/draw_mode_pass.c
@@ -38,61 +38,14 @@
 /* Store list of shading group for easy access*/
 
 /* Empties */
-static DRWShadingGroup *plain_axes_wire;
-static DRWShadingGroup *plain_axes_active;
-static DRWShadingGroup *plain_axes_select;
-static DRWShadingGroup *plain_axes_transform;
-static DRWShadingGroup *plain_axes_group;
-static DRWShadingGroup *plain_axes_group_active;
-
-static DRWShadingGroup *cube_wire;
-static DRWShadingGroup *cube_active;
-static DRWShadingGroup *cube_select;
-static DRWShadingGroup *cube_transform;
-static DRWShadingGroup *cube_group;
-static DRWShadingGroup *cube_group_active;
-
-static DRWShadingGroup *circle_wire;
-static DRWShadingGroup *circle_active;
-static DRWShadingGroup *circle_select;
-static DRWShadingGroup *circle_transform;
-static DRWShadingGroup *circle_group;
-static DRWShadingGroup *circle_group_active;
-
-static DRWShadingGroup *sphere_wire;
-static DRWShadingGroup *sphere_active;
-static DRWShadingGroup *sphere_select;
-static DRWShadingGroup *sphere_transform;
-static DRWShadingGroup *sphere_group;
-static DRWShadingGroup *sphere_group_active;
-
-static DRWShadingGroup *cone_wire;
-static DRWShadingGroup *cone_active;
-static DRWShadingGroup *cone_select;
-static DRWShadingGroup *cone_transform;
-static DRWShadingGroup *cone_group;
-static DRWShadingGroup *cone_group_active;
-
-static DRWShadingGroup *single_arrow_wire;
-static DRWShadingGroup *single_arrow_active;
-static DRWShadingGroup *single_arrow_select;
-static DRWShadingGroup *single_arrow_transform;
-static DRWShadingGroup *single_arrow_group;
-static DRWShadingGroup *single_arrow_group_active;
-
-static DRWShadingGroup *single_arrow_line_wire;
-static DRWShadingGroup *single_arrow_line_active;
-static DRWShadingGroup *single_arrow_line_select;
-static DRWShadingGroup *single_arrow_line_transform;
-static DRWShadingGroup *single_arrow_line_group;
-static DRWShadingGroup *single_arrow_line_group_active;
-
-static DRWShadingGroup *arrows_wire;
-static DRWShadingGroup *arrows_active;
-static DRWShadingGroup *arrows_select;
-static DRWShadingGroup *arrows_transform;
-static DRWShadingGroup *arrows_group;
-static DRWShadingGroup *arrows_group_active;
+static DRWShadingGroup *plain_axes;
+static DRWShadingGroup *cube;
+static DRWShadingGroup *circle;
+static DRWShadingGroup *sphere;
+static DRWShadingGroup *cone;
+static DRWShadingGroup *single_arrow;
+static DRWShadingGroup *single_arrow_line;
+static DRWShadingGroup *arrows;
 
 /* Lamps */
 static DRWShadingGroup *lamp_center;
@@ -117,17 +70,6 @@ static float colorActive[4], colorSelect[4], 
colorTransform[4], colorGroup[4], c
 static float colorEmpty[4], colorLamp[4], colorCamera[4], colorSpeaker[4];
 static float lampCenterSize, lampCircleRad, lampCircleShadowRad, 
colorLampNoAlpha[4];
 
-static DRWShadingGroup *shgroup_instance_uniform_color(DRWPass *pass, struct 
Batch *geom, float color[4])
-{
-       GPUShader *sh_inst = 
GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR_INSTANCE);
-
-       DRWShadingGroup *grp = DRW_shgroup_instance_create(sh_inst, pass, geom);
-       DRW_shgroup_attrib_float(grp, "InstanceModelMatrix", 16);
-       DRW_shgroup_uniform_vec4(grp, "color", color, 1);
-
-       return grp;
-}
-
 static DRWShadingGroup *shgroup_dynlines_uniform_color(DRWPass *pass, float 
color[4])
 {
        GPUShader *sh = 
GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
@@ -186,6 +128,18 @@ static DRWShadingGroup *shgroup_lamp(DRWPass *pass, struct 
Batch *geom, float *s
        return grp;
 }
 
+static DRWShadingGroup *shgroup_empty(DRWPass *pass, struct Batch *geom)
+{
+       GPUShader *sh_inst = 
GPU_shader_get_builtin_shader(GPU_SHADER_INSTANCE_VARIYING_COLOR_VARIYING_SIZE);
+
+       DRWShadingGroup *grp = DRW_shgroup_instance_create(sh_inst, pass, geom);
+       DRW_shgroup_attrib_float(grp, "color", 3);
+       DRW_shgroup_attrib_float(grp, "size", 1);
+       DRW_shgroup_attrib_float(grp, "InstanceModelMatrix", 16);
+
+       return grp;
+}
+
 /* This Function setup the passes needed for the mode rendering.
  * The passes are populated by the rendering engine using the DRW_shgroup_* 
functions. */
 void DRW_pass_setup_common(DRWPass **wire_overlay, DRWPass **wire_outline, 
DRWPass **non_meshes, DRWPass **ob_center)
@@ -235,68 +189,28 @@ void DRW_pass_setup_common(DRWPass **wire_overlay, 
DRWPass **wire_outline, DRWPa
 
                /* Empties */
                geom = DRW_cache_plain_axes_get();
-               plain_axes_wire = shgroup_instance_uniform_color(*non_meshes, 
geom, colorEmpty);
-               plain_axes_active = shgroup_instance_uniform_color(*non_meshes, 
geom, colorActive);
-               plain_axes_select = shgroup_instance_uniform_color(*non_meshes, 
geom, colorSelect);
-               plain_axes_transform = 
shgroup_instance_uniform_color(*non_meshes, geom, colorTransform);
-               plain_axes_group = shgroup_instance_uniform_color(*non_meshes, 
geom, colorGroup);
-               plain_axes_group_active = 
shgroup_instance_uniform_color(*non_meshes, geom, colorGroupActive);
+               plain_axes = shgroup_empty(*non_meshes, geom);
 
                geom = DRW_cache_cube_get();
-               cube_wire = shgroup_instance_uniform_color(*non_meshes, geom, 
colorEmpty);
-               cube_active = shgroup_instance_uniform_color(*non_meshes, geom, 
colorActive);
-               cube_select = shgroup_instance_uniform_color(*non_meshes, geom, 
colorSelect);
-               cube_transform = shgroup_instance_uniform_color(*non_meshes, 
geom, colorTransform);
-               cube_group = shgroup_instance_uniform_color(*non_meshes, geom, 
colorGroup);
-               cube_group_active = shgroup_instance_uniform_color(*non_meshes, 
geom, colorGroupActive);
+               cube = shgroup_empty(*non_meshes, geom);
 
                geom = DRW_cache_circle_get();
-               circle_wire = shgroup_instance_uniform_color(*non_meshes, geom, 
colorEmpty);
-               circle_active = shgroup_instance_uniform_color(*non_meshes, 
geom, colorActive);
-               circle_select = shgroup_instance_uniform_color(*non_meshes, 
geom, colorSelect);
-               circle_transform = shgroup_instance_uniform_color(*non_meshes, 
geom, colorTransform);
-               circle_group = shgroup_instance_uniform_color(*non_meshes, 
geom, colorGroup);
-               circle_group_active = 
shgroup_instance_uniform_color(*non_meshes, geom, colorGroupActive);
+               circle = shgroup_empty(*non_meshes, geom);
 
                geom = DRW_cache_empty_sphere_get();
-               sphere_wire = shgroup_instance_uniform_color(*non_meshes, geom, 
colorEmpty);
-               sphere_active = shgroup_instance_uniform_color(*non_meshes, 
geom, colorActive);
-               sphere_select = shgroup_instance_uniform_color(*non_meshes, 
geom, colorSelect);
-               sphere_transform = shgroup_instance_uniform_color(*non_meshes, 
geom, colorTransform);
-               sphere_group = shgroup_instance_uniform_color(*non_meshes, 
geom, colorGroup);
-               sphere_group_active = 
shgroup_instance_uniform_color(*non_meshes, geom, colorGroupActive);
+               sphere = shgroup_empty(*non_meshes, geom);
 
                geom = DRW_cache_empty_cone_get();
-               cone_wire = shgroup_instance_uniform_color(*non_meshes, geom, 
colorEmpty);
-               cone_active = shgroup_instance_uniform_color(*non_meshes, geom, 
colorActive);
-               cone_select = shgroup_instance_uniform_color(*non_meshes, geom, 
colorSelect);
-               cone_transform = shgroup_instance_uniform_color(*non_meshes, 
geom, colorTransform);
-               cone_group = shgroup_instance_uniform_color(*non_meshes, geom, 
colorGroup);
-               cone_group_active = shgroup_instance_uniform_color(*non_meshes, 
geom, colorGroupActive);
+               cone = shgroup_empty(*non_meshes, geom);
 
                geom = DRW_cache_single_arrow_get();
-               single_arrow_wire = shgroup_instance_uniform_color(*non_meshes, 
geom, colorEmpty);
-               single_arrow_active = 
shgroup_instance_uniform_color(*non_meshes, geom, colorActive);
-               single_arrow_select = 
shgroup_instance_uniform_color(*non_meshes, geom, colorSelect);
-               single_arrow_transform = 
shgroup_instance_uniform_color(*non_meshes, geom, colorTransform);
-               single_arrow_group = 
shgroup_instance_uniform_color(*non_meshes, geom, colorGroup);
-               single_arrow_group_active = 
shgroup_instance_uniform_color(*non_meshes, geom, colorGroupActive);
+               single_arrow = shgroup_empty(*non_meshes, geom);
 
                geom = DRW_cache_single_line_get();
-               single_arrow_line_wire = 
shgroup_instance_uniform_color(*non_meshes, geom, colorEmpty);
-               single_arrow_line_active = 
shgroup_instance_uniform_color(*non_meshes, geom, colorActive);
-               single_arrow_line_select = 
shgroup_instance_uniform_color(*non_meshes, geom, colorSelect);
-               single_arrow_line_transform = 
shgroup_instance_uniform_color(*non_meshes, geom, colorTransform);
-               single_arrow_line_group = 
shgroup_instance_uniform_color(*non_meshes, geom, colorGroup);
-               single_arrow_line_group_active = 
shgroup_instance_uniform_color(*non_meshes, geom, colorGroupActive);
+               single_arrow_line = shgroup_empty(*non_meshes, geom);
 
                geom = DRW_cache_single_arrow_get();
-               arrows_wire = shgroup_instance_uniform_color(*non_meshes, geom, 
colorEmpty);
-               arrows_active = shgroup_instance_uniform_color(*non_meshes, 
geom, colorActive);
-               arrows_select = shgroup_instance_uniform_color(*non_meshes, 
geom, colorSelect);
-               arrows_transform = shgroup_instance_uniform_color(*non_meshes, 
geom, colorTransform);
-               arrows_group = shgroup_instance_uniform_color(*non_meshes, 
geom, colorGroup);
-               arrows_group_active = 
shgroup_instance_uniform_color(*non_meshes, geom, colorGroupActive);
+               arrows = shgroup_empty(*non_meshes, geom);
 
                /* Lamps */
                lampCenterSize = (U.obcenter_dia + 1.5f) * U.pixelsize;
@@ -374,7 +288,9 @@ void DRW_pass_setup_common(DRWPass **wire_overlay, DRWPass 
**wire_outline, DRWPa
 /* ******************************************** WIRES 
*********************************************** */
 
 /* TODO FINISH */
-static int draw_object_wire_theme(Object *ob)
+/* Get the wire color theme_id of an object based on it's state
+ * **color is a way to get a pointer to the static color var associated */
+static int draw_object_wire_theme(Object *ob, float **color)
 {
        const bool is_edit = (ob->mode & OB_MODE_EDIT) != 0;
        /* confusing logic here, there are 2 methods of setting the color
@@ -419,6 +335,22 @@ static int draw_object_wire_theme(Object *ob)
                }
        }
 
+       if (color != NULL) {
+               switch (theme_id) {
+                       case TH_WIRE_

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to