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