[Bf-blender-cvs] [4a061a87e66] blender2.8: DwM: mesh data now only creates data thats used

2017-06-27 Thread Campbell Barton
Commit: 4a061a87e6625c396ccbc20c4636f447c453323c
Author: Campbell Barton
Date:   Wed Jun 28 13:38:24 2017 +1000
Branches: blender2.8
https://developer.blender.org/rB4a061a87e6625c396ccbc20c4636f447c453323c

DwM: mesh data now only creates data thats used

Read from the GPUMaterial to find custom-data layers used for drawing.

This resolves problem where having UV's would always calculate tangents
causing noticeable slow down compared to 2.7x.

===

M   source/blender/draw/engines/eevee/eevee_materials.c
M   source/blender/draw/intern/draw_cache.c
M   source/blender/draw/intern/draw_cache.h
M   source/blender/draw/intern/draw_cache_impl.h
M   source/blender/draw/intern/draw_cache_impl_mesh.c

===

diff --git a/source/blender/draw/engines/eevee/eevee_materials.c 
b/source/blender/draw/engines/eevee/eevee_materials.c
index c23918d5c2d..5393c8d305e 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -576,6 +576,7 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, 
EEVEE_SceneLayerData *sl
if (ELEM(ob->type, OB_MESH)) {
const int materials_len = MAX2(1, (is_sculpt_mode ? 1 : 
ob->totcol));
struct DRWShadingGroup **shgrp_array = 
BLI_array_alloca(shgrp_array, materials_len);
+   struct GPUMaterial **gpumat_array = 
BLI_array_alloca(gpumat_array, materials_len);
 
bool use_flat_nor = false;
 
@@ -602,9 +603,15 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, 
EEVEE_SceneLayerData *sl
shgrp = BLI_ghash_lookup(material_hash, (const void 
*)ma);
if (shgrp) {
shgrp_array[i] = shgrp;  /* ADD_SHGROUP_CALL 
below */
+   /* This will have been created already, just 
perform a lookup. */
+   gpumat_array[i] = (use_gpumat) ? 
EEVEE_material_mesh_get(
+   draw_ctx->scene, 
ma,stl->effects->use_ao, stl->effects->use_bent_normals) : NULL;
continue;
}
 
+   /* May not be set below. */
+   gpumat_array[i] = NULL;
+
if (use_gpumat) {
Scene *scene = draw_ctx->scene;
struct GPUMaterial *gpumat = 
EEVEE_material_mesh_get(scene, ma,
@@ -616,6 +623,8 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, 
EEVEE_SceneLayerData *sl
 
BLI_ghash_insert(material_hash, ma, 
shgrp);
shgrp_array[i] = shgrp;  /* 
ADD_SHGROUP_CALL below */
+
+   gpumat_array[i] = gpumat;
}
else {
/* Shader failed : pink color */
@@ -643,7 +652,7 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, 
EEVEE_SceneLayerData *sl
}
 
/* Get per-material split surface */
-   struct Gwn_Batch **mat_geom = 
DRW_cache_object_surface_material_get(ob);
+   struct Gwn_Batch **mat_geom = 
DRW_cache_object_surface_material_get(ob, gpumat_array, materials_len);
if (mat_geom) {
for (int i = 0; i < materials_len; ++i) {
ADD_SHGROUP_CALL(shgrp_array[i], ob, 
mat_geom[i]);
diff --git a/source/blender/draw/intern/draw_cache.c 
b/source/blender/draw/intern/draw_cache.c
index 7636bce9aca..b62559fdb0e 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -522,11 +522,12 @@ Gwn_Batch *DRW_cache_object_surface_get(Object *ob)
}
 }
 
-Gwn_Batch **DRW_cache_object_surface_material_get(struct Object *ob)
+Gwn_Batch **DRW_cache_object_surface_material_get(
+struct Object *ob, struct GPUMaterial **gpumat_array, uint 
gpumat_array_len)
 {
switch (ob->type) {
case OB_MESH:
-   return DRW_cache_mesh_surface_shaded_get(ob);
+   return DRW_cache_mesh_surface_shaded_get(ob, 
gpumat_array, gpumat_array_len);
default:
return NULL;
}
@@ -2212,12 +2213,13 @@ Gwn_Batch 
*DRW_cache_mesh_surface_vert_colors_get(Object *ob)
 }
 
 /* Return list of batches */
-Gwn_Batch **DRW_cache_mesh_surface_shaded_get(Object *ob)
+Gwn_Batch **DRW_cache_mesh_surface_shaded_get(
+Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len)
 {
BLI_assert(ob->type == OB_MESH);
 
Mesh *me = ob->data;
-   return DRW_mesh_batch_cache_get_surface_shaded(me);
+   return 

[Bf-blender-cvs] [e78c0840f2e] blender2.8: DwM: create eevee materials before the mesh

2017-06-27 Thread Campbell Barton
Commit: e78c0840f2eef95f5a3f85dd0222b533f8fe1699
Author: Campbell Barton
Date:   Wed Jun 28 13:33:55 2017 +1000
Branches: blender2.8
https://developer.blender.org/rBe78c0840f2eef95f5a3f85dd0222b533f8fe1699

DwM: create eevee materials before the mesh

To know which custom-data layers will be needed in the mesh.

No functional change yet.

===

M   source/blender/draw/engines/eevee/eevee_materials.c

===

diff --git a/source/blender/draw/engines/eevee/eevee_materials.c 
b/source/blender/draw/engines/eevee/eevee_materials.c
index 7bc45bf62e3..c23918d5c2d 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -30,6 +30,7 @@
 
 #include "BLI_dynstr.h"
 #include "BLI_ghash.h"
+#include "BLI_alloca.h"
 
 #include "BKE_particle.h"
 
@@ -571,9 +572,11 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, 
EEVEE_SceneLayerData *sl
ADD_SHGROUP_CALL(depth_shgrp, ob, geom);
ADD_SHGROUP_CALL(depth_clip_shgrp, ob, geom);
 
-   /* Get per-material split surface */
-   struct Gwn_Batch **mat_geom = DRW_cache_object_surface_material_get(ob);
-   if (mat_geom) {
+   /* First get materials for this mesh. */
+   if (ELEM(ob->type, OB_MESH)) {
+   const int materials_len = MAX2(1, (is_sculpt_mode ? 1 : 
ob->totcol));
+   struct DRWShadingGroup **shgrp_array = 
BLI_array_alloca(shgrp_array, materials_len);
+
bool use_flat_nor = false;
 
if (is_default_mode_shader) {
@@ -582,7 +585,7 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, 
EEVEE_SceneLayerData *sl
}
}
 
-   for (int i = 0; i < MAX2(1, (is_sculpt_mode ? 1 : ob->totcol)); 
++i) {
+   for (int i = 0; i < materials_len; ++i) {
DRWShadingGroup *shgrp = NULL;
Material *ma = give_current_material(ob, i + 1);
 
@@ -594,13 +597,15 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, 
EEVEE_SceneLayerData *sl
float *spec_p = >spec;
float *rough_p = >gloss_mir;
 
+   const bool use_gpumat = (ma->use_nodes && ma->nodetree);
+
shgrp = BLI_ghash_lookup(material_hash, (const void 
*)ma);
if (shgrp) {
-   ADD_SHGROUP_CALL(shgrp, ob, mat_geom[i]);
+   shgrp_array[i] = shgrp;  /* ADD_SHGROUP_CALL 
below */
continue;
}
 
-   if (ma->use_nodes && ma->nodetree) {
+   if (use_gpumat) {
Scene *scene = draw_ctx->scene;
struct GPUMaterial *gpumat = 
EEVEE_material_mesh_get(scene, ma,
stl->effects->use_ao, 
stl->effects->use_bent_normals);
@@ -610,8 +615,7 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, 
EEVEE_SceneLayerData *sl
add_standard_uniforms(shgrp, sldata, 
vedata);
 
BLI_ghash_insert(material_hash, ma, 
shgrp);
-
-   ADD_SHGROUP_CALL(shgrp, ob, 
mat_geom[i]);
+   shgrp_array[i] = shgrp;  /* 
ADD_SHGROUP_CALL below */
}
else {
/* Shader failed : pink color */
@@ -634,7 +638,15 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, 
EEVEE_SceneLayerData *sl
 
BLI_ghash_insert(material_hash, ma, shgrp);
 
-   ADD_SHGROUP_CALL(shgrp, ob, mat_geom[i]);
+   shgrp_array[i] = shgrp;  /* ADD_SHGROUP_CALL 
below */
+   }
+   }
+
+   /* Get per-material split surface */
+   struct Gwn_Batch **mat_geom = 
DRW_cache_object_surface_material_get(ob);
+   if (mat_geom) {
+   for (int i = 0; i < materials_len; ++i) {
+   ADD_SHGROUP_CALL(shgrp_array[i], ob, 
mat_geom[i]);
}
}
}

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


[Bf-blender-cvs] [fc3d0da2fd3] blender2.8: DWM: Fix own error checking wrong layer type

2017-06-27 Thread Campbell Barton
Commit: fc3d0da2fd36d41d79932db3d9ea7e428127a7b8
Author: Campbell Barton
Date:   Wed Jun 28 11:39:05 2017 +1000
Branches: blender2.8
https://developer.blender.org/rBfc3d0da2fd36d41d79932db3d9ea7e428127a7b8

DWM: Fix own error checking wrong layer type

Would calculate all tangents for every UV layer.

===

M   source/blender/draw/intern/draw_cache_impl_mesh.c

===

diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c 
b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 2f3ee5b3e59..a008af73549 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -473,7 +473,7 @@ static MeshRenderData *mesh_render_data_create(Mesh *me, 
const int types)
/* Tangents*/
BLI_snprintf(rdata->cd.uuid.tangent[i], 
sizeof(*rdata->cd.uuid.tangent), "t%u", hash);
 
-   if 
(!CustomData_has_layer(>cd.output.ldata, CD_MLOOPTANGENT)) {
+   if 
(!CustomData_has_layer(>cd.output.ldata, CD_TANGENT)) {
 
/* Tangent Names */
char 
tangent_names[MAX_MTFACE][MAX_NAME];

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


[Bf-blender-cvs] [87dd9c31a01] blender2.8: GPU: split GPU_material_from_nodetree in two

2017-06-27 Thread Campbell Barton
Commit: 87dd9c31a01e734964f3d3657cd9f1ae8706cf7b
Author: Campbell Barton
Date:   Wed Jun 28 10:50:33 2017 +1000
Branches: blender2.8
https://developer.blender.org/rB87dd9c31a01e734964f3d3657cd9f1ae8706cf7b

GPU: split GPU_material_from_nodetree in two

Add GPU_material_from_nodetree_find to avoid having to construct other
arguments which won't be used in the case the material is exists.

===

M   source/blender/draw/engines/eevee/eevee_materials.c
M   source/blender/gpu/GPU_material.h
M   source/blender/gpu/intern/gpu_material.c

===

diff --git a/source/blender/draw/engines/eevee/eevee_materials.c 
b/source/blender/draw/engines/eevee/eevee_materials.c
index 74cb6b0d7a0..7bc45bf62e3 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -351,40 +351,55 @@ void EEVEE_materials_init(void)
 
 struct GPUMaterial *EEVEE_material_world_lightprobe_get(struct Scene *scene, 
World *wo)
 {
+   const void *engine = _engine_viewport_eevee_type;
+   const int options = VAR_WORLD_PROBE;
+
+   GPUMaterial *mat = GPU_material_from_nodetree_find(>gpumaterial, 
engine, options);
+   if (mat != NULL) {
+   return mat;
+   }
return GPU_material_from_nodetree(
-   scene, wo->nodetree, >gpumaterial, 
_engine_viewport_eevee_type,
-   VAR_WORLD_PROBE,
-   datatoc_lightprobe_vert_glsl, datatoc_lightprobe_geom_glsl, 
e_data.frag_shader_lib,
-   SHADER_DEFINES "#define PROBE_CAPTURE\n");
+   scene, wo->nodetree, >gpumaterial, engine, options,
+   datatoc_lightprobe_vert_glsl, datatoc_lightprobe_geom_glsl, 
e_data.frag_shader_lib,
+   SHADER_DEFINES "#define PROBE_CAPTURE\n");
 }
 
 struct GPUMaterial *EEVEE_material_world_background_get(struct Scene *scene, 
World *wo)
 {
+   const void *engine = _engine_viewport_eevee_type;
+   int options = VAR_WORLD_BACKGROUND;
+
+   GPUMaterial *mat = GPU_material_from_nodetree_find(>gpumaterial, 
engine, options);
+   if (mat != NULL) {
+   return mat;
+   }
return GPU_material_from_nodetree(
-   scene, wo->nodetree, >gpumaterial, 
_engine_viewport_eevee_type,
-   VAR_WORLD_BACKGROUND,
-   datatoc_background_vert_glsl, NULL, e_data.frag_shader_lib,
-   SHADER_DEFINES "#define WORLD_BACKGROUND\n");
+   scene, wo->nodetree, >gpumaterial, engine, options,
+   datatoc_background_vert_glsl, NULL, e_data.frag_shader_lib,
+   SHADER_DEFINES "#define WORLD_BACKGROUND\n");
 }
 
 struct GPUMaterial *EEVEE_material_mesh_get(
 struct Scene *scene, Material *ma,
 bool use_ao, bool use_bent_normals)
 {
-   struct GPUMaterial *mat;
-
+   const void *engine = _engine_viewport_eevee_type;
int options = VAR_MAT_MESH;
 
if (use_ao) options |= VAR_MAT_AO;
if (use_bent_normals) options |= VAR_MAT_BENT;
 
+   GPUMaterial *mat = GPU_material_from_nodetree_find(>gpumaterial, 
engine, options);
+   if (mat) {
+   return mat;
+   }
+
char *defines = eevee_get_defines(options);
 
mat = GPU_material_from_nodetree(
-   scene, ma->nodetree, >gpumaterial, 
_engine_viewport_eevee_type,
-   options,
-   datatoc_lit_surface_vert_glsl, NULL, e_data.frag_shader_lib,
-   defines);
+   scene, ma->nodetree, >gpumaterial, engine, options,
+   datatoc_lit_surface_vert_glsl, NULL, e_data.frag_shader_lib,
+   defines);
 
MEM_freeN(defines);
 
@@ -395,20 +410,23 @@ struct GPUMaterial *EEVEE_material_hair_get(
 struct Scene *scene, Material *ma,
 bool use_ao, bool use_bent_normals)
 {
-   struct GPUMaterial *mat;
-
+   const void *engine = _engine_viewport_eevee_type;
int options = VAR_MAT_MESH | VAR_MAT_HAIR;
 
if (use_ao) options |= VAR_MAT_AO;
if (use_bent_normals) options |= VAR_MAT_BENT;
 
+   GPUMaterial *mat = GPU_material_from_nodetree_find(>gpumaterial, 
engine, options);
+   if (mat) {
+   return mat;
+   }
+
char *defines = eevee_get_defines(options);
 
mat = GPU_material_from_nodetree(
-   scene, ma->nodetree, >gpumaterial, 
_engine_viewport_eevee_type,
-   options,
-   datatoc_lit_surface_vert_glsl, NULL, e_data.frag_shader_lib,
-   defines);
+   scene, ma->nodetree, >gpumaterial, engine, options,
+   datatoc_lit_surface_vert_glsl, NULL, e_data.frag_shader_lib,
+   defines);
 
MEM_freeN(defines);
 
diff --git a/source/blender/gpu/GPU_material.h 
b/source/blender/gpu/GPU_material.h
index 4345a31839a..b12a59f607d 100644
--- a/source/blender/gpu/GPU_material.h
+++ 

[Bf-blender-cvs] [037876659f4] blender2.8: Fix own error removing texface

2017-06-27 Thread Campbell Barton
Commit: 037876659f473b7a7e14bdd300b7285a22ef095b
Author: Campbell Barton
Date:   Wed Jun 28 10:23:27 2017 +1000
Branches: blender2.8
https://developer.blender.org/rB037876659f473b7a7e14bdd300b7285a22ef095b

Fix own error removing texface

Setting the name crashed with NULL poly layer.

===

M   source/blender/blenkernel/intern/mesh.c

===

diff --git a/source/blender/blenkernel/intern/mesh.c 
b/source/blender/blenkernel/intern/mesh.c
index 215e9ec677b..8c9690b01df 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -581,43 +581,44 @@ bool BKE_mesh_uv_cdlayer_rename_index(Mesh *me, const int 
poly_index, const int
ldata = >ldata;
fdata = >fdata;
}
-   cdlp = (poly_index != -1) ? >layers[poly_index] : NULL;
-   cdlu = >layers[loop_index];
-   cdlf = fdata && do_tessface ? >layers[face_index] : NULL;
 
-   if (cdlp == NULL && cdlf == NULL) {
-   return false;
-   }
+   cdlu = >layers[loop_index];
+   cdlp = (poly_index != -1) ? >layers[poly_index] : NULL;
+   cdlf = (face_index != -1) && fdata && do_tessface ? 
>layers[face_index] : NULL;
 
if (cdlu->name != new_name) {
/* Mesh validate passes a name from the CD layer as the new 
name,
 * Avoid memcpy from self to self in this case.
 */
BLI_strncpy(cdlu->name, new_name, sizeof(cdlu->name));
-   CustomData_set_layer_unique_name(ldata, cdlu - ldata->layers);
+   CustomData_set_layer_unique_name(ldata, loop_index);
+   }
+
+   if (cdlp == NULL && cdlf == NULL) {
+   return false;
}
 
/* Loop until we do have exactly the same name for all layers! */
for (i = 1;
-(cdlp && !STREQ(cdlp->name, cdlu->name)) ||
-(cdlf && !STREQ(cdlp->name, cdlf->name));
+(cdlp && !STREQ(cdlu->name, cdlp->name)) ||
+(cdlf && !STREQ(cdlu->name, cdlf->name));
 i++)
{
switch (i % step) {
case 0:
if (cdlp) {
BLI_strncpy(cdlp->name, cdlu->name, 
sizeof(cdlp->name));
-   CustomData_set_layer_unique_name(pdata, 
cdlp - pdata->layers);
+   CustomData_set_layer_unique_name(pdata, 
poly_index);
}
break;
case 1:
BLI_strncpy(cdlu->name, cdlp->name, 
sizeof(cdlu->name));
-   CustomData_set_layer_unique_name(ldata, cdlu - 
ldata->layers);
+   CustomData_set_layer_unique_name(ldata, 
loop_index);
break;
case 2:
if (cdlf) {
BLI_strncpy(cdlf->name, cdlu->name, 
sizeof(cdlf->name));
-   CustomData_set_layer_unique_name(fdata, 
cdlf - fdata->layers);
+   CustomData_set_layer_unique_name(fdata, 
face_index);
}
break;
}

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


[Bf-blender-cvs] [87a95558a0c] blender2.8: Fix own error removing texface

2017-06-27 Thread Campbell Barton
Commit: 87a95558a0c055dfc5b610641b2c188995fc352c
Author: Campbell Barton
Date:   Wed Jun 28 10:11:49 2017 +1000
Branches: blender2.8
https://developer.blender.org/rB87a95558a0c055dfc5b610641b2c188995fc352c

Fix own error removing texface

Using pointer offsets from different arrays

===

M   source/blender/blenkernel/intern/mesh.c

===

diff --git a/source/blender/blenkernel/intern/mesh.c 
b/source/blender/blenkernel/intern/mesh.c
index 9c0881e79ff..215e9ec677b 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -594,7 +594,7 @@ bool BKE_mesh_uv_cdlayer_rename_index(Mesh *me, const int 
poly_index, const int
 * Avoid memcpy from self to self in this case.
 */
BLI_strncpy(cdlu->name, new_name, sizeof(cdlu->name));
-   CustomData_set_layer_unique_name(pdata, cdlu - pdata->layers);
+   CustomData_set_layer_unique_name(ldata, cdlu - ldata->layers);
}
 
/* Loop until we do have exactly the same name for all layers! */

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


[Bf-blender-cvs] [df70e3de634] blender2.8: DWM: separate tangents from UV conversion

2017-06-27 Thread Campbell Barton
Commit: df70e3de63447eaa53cf08d28c997dcb35441c74
Author: Campbell Barton
Date:   Wed Jun 28 09:55:40 2017 +1000
Branches: blender2.8
https://developer.blender.org/rBdf70e3de63447eaa53cf08d28c997dcb35441c74

DWM: separate tangents from UV conversion

Prepare for different number of UV/Tangent layers.

===

M   source/blender/draw/intern/draw_cache_impl_mesh.c

===

diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c 
b/source/blender/draw/intern/draw_cache_impl_mesh.c
index ca61d3f7013..2f3ee5b3e59 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -146,6 +146,7 @@ typedef struct MeshRenderData {
intvcol_active;
 
float (**tangent)[4];
+   int  tangent_len;
int  tangent_active;
 
bool *auto_vcol;
@@ -370,6 +371,11 @@ static MeshRenderData *mesh_render_data_create(Mesh *me, 
const int types)
cd_ldata = >ldata;
}
 
+
+   rdata->cd.layers.uv_active = 
CustomData_get_active_layer(cd_ldata, CD_MLOOPUV);
+   rdata->cd.layers.vcol_active = 
CustomData_get_active_layer(cd_ldata, CD_MLOOPCOL);
+   rdata->cd.layers.tangent_active = rdata->cd.layers.uv_active;
+
rdata->orco = CustomData_get_layer(cd_vdata, CD_ORCO);
/* If orco is not available compute it ourselves */
if (!rdata->orco) {
@@ -401,6 +407,7 @@ static MeshRenderData *mesh_render_data_create(Mesh *me, 
const int types)
 #endif
 
rdata->cd.layers.uv_len = CustomData_number_of_layers(cd_ldata, 
CD_MLOOPUV);
+   rdata->cd.layers.tangent_len = rdata->cd.layers.uv_len;
rdata->cd.layers.vcol_len = 
CustomData_number_of_layers(cd_ldata, CD_MLOOPCOL);
 
rdata->cd.layers.uv = MEM_mallocN(sizeof(*rdata->cd.layers.uv) 
* rdata->cd.layers.uv_len, __func__);
@@ -544,13 +551,6 @@ static MeshRenderData *mesh_render_data_create(Mesh *me, 
const int types)
}
}
 
-   rdata->cd.layers.uv_active = CustomData_get_active_layer_index(
-   cd_ldata, CD_MLOOPUV) - 
CustomData_get_layer_index(cd_ldata, CD_MLOOPUV);
-   rdata->cd.layers.vcol_active = 
CustomData_get_active_layer_index(
-   cd_ldata, CD_MLOOPCOL) - 
CustomData_get_layer_index(cd_ldata, CD_MLOOPCOL);
-   rdata->cd.layers.tangent_active = 
CustomData_get_active_layer_index(
-   cd_ldata, CD_MLOOPTANGENT) - 
CustomData_get_layer_index(cd_ldata, CD_MLOOPTANGENT);
-
 #undef me
}
 
@@ -1633,8 +1633,9 @@ static Gwn_VertBuf 
*mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata,
if (i == rdata->cd.layers.uv_active) {
GWN_vertformat_alias_add(format, "u");
}
+   }
 
-   /* Tangent */
+   for (int i = 0; i < rdata->cd.layers.tangent_len; i++) {
attrib_name = 
mesh_render_data_tangent_layer_uuid_get(rdata, i);
/* WATCH IT : only specifying 3 component instead of 4 
(4th is sign).
 * That may cause some problem but I could not make it 
to fail (fclem) */
@@ -1645,7 +1646,7 @@ static Gwn_VertBuf 
*mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata,
tangent_id[i] = GWN_vertformat_attr_add(format, 
attrib_name, GWN_COMP_F32, 3, GWN_FETCH_FLOAT);
 #endif
 
-   if (i == rdata->cd.layers.uv_active) {
+   if (i == rdata->cd.layers.tangent_active) {
GWN_vertformat_alias_add(format, "t");
}
}
@@ -1682,7 +1683,7 @@ static Gwn_VertBuf 
*mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata,
if (rdata->edit_bmesh == NULL ||

BM_elem_flag_test((rdata->edit_bmesh->looptris[i])[0]->f, BM_ELEM_HIDDEN) == 0)
{
-   /* UVs & TANGENTs */
+   /* UVs */
for (int j = 0; j < rdata->cd.layers.uv_len; 
j++) {
/* UVs */
mesh_render_data_looptri_uvs_get(rdata, 
i, j, _uvs);
@@ -1697,8 +1698,11 @@ static Gwn_VertBuf 
*mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata,
GWN_vertbuf_attr_set(vbo, uv_id[j], 
vidx + 0, s_uvs[0]);
GWN_vertbuf_attr_set(vbo, uv_id[j], 
vidx + 1, s_uvs[1]);

[Bf-blender-cvs] [dbaa6c2aa26] blender2.8: GPU: GPU_generate_pass_new now takes vertex-attrs

2017-06-27 Thread Campbell Barton
Commit: dbaa6c2aa26cc9a045f5621c9def8ca7cf5861f0
Author: Campbell Barton
Date:   Wed Jun 28 09:37:44 2017 +1000
Branches: blender2.8
https://developer.blender.org/rBdbaa6c2aa26cc9a045f5621c9def8ca7cf5861f0

GPU: GPU_generate_pass_new now takes vertex-attrs

Needed so we can tell which custom-data layers to use from the mesh.

===

M   source/blender/gpu/intern/gpu_codegen.c
M   source/blender/gpu/intern/gpu_codegen.h
M   source/blender/gpu/intern/gpu_material.c

===

diff --git a/source/blender/gpu/intern/gpu_codegen.c 
b/source/blender/gpu/intern/gpu_codegen.c
index 1f0f5e375ce..8586ee67d5d 100644
--- a/source/blender/gpu/intern/gpu_codegen.c
+++ b/source/blender/gpu/intern/gpu_codegen.c
@@ -1846,9 +1846,11 @@ static void gpu_nodes_prune(ListBase *nodes, GPUNodeLink 
*outlink)
}
 }
 
-GPUPass *GPU_generate_pass_new(ListBase *nodes, struct GPUNodeLink 
*frag_outlink,
-   const char *vert_code, const char *geom_code,
-   const char *frag_lib, const char *defines)
+GPUPass *GPU_generate_pass_new(
+ListBase *nodes, struct GPUNodeLink *frag_outlink,
+GPUVertexAttribs *attribs,
+const char *vert_code, const char *geom_code,
+const char *frag_lib, const char *defines)
 {
GPUShader *shader;
GPUPass *pass;
@@ -1858,9 +1860,7 @@ GPUPass *GPU_generate_pass_new(ListBase *nodes, struct 
GPUNodeLink *frag_outlink
/* prune unused nodes */
gpu_nodes_prune(nodes, frag_outlink);
 
-   /* Hacky */
-   GPUVertexAttribs attribs;
-   gpu_nodes_get_vertex_attributes(nodes, );
+   gpu_nodes_get_vertex_attributes(nodes, attribs);
 
/* generate code and compile with opengl */
fragmentgen = code_generate_fragment(nodes, frag_outlink->output, true);
diff --git a/source/blender/gpu/intern/gpu_codegen.h 
b/source/blender/gpu/intern/gpu_codegen.h
index 9263fe3bc3f..159b1f4ef8e 100644
--- a/source/blender/gpu/intern/gpu_codegen.h
+++ b/source/blender/gpu/intern/gpu_codegen.h
@@ -167,14 +167,17 @@ struct GPUPass {
 
 typedef struct GPUPass GPUPass;
 
-GPUPass *GPU_generate_pass_new(ListBase *nodes, struct GPUNodeLink 
*frag_outlink,
-   const char *vert_code, const char *geom_code,
-   const char *frag_lib, const char *defines);
-GPUPass *GPU_generate_pass(ListBase *nodes, struct GPUNodeLink *outlink,
-   struct GPUVertexAttribs *attribs, int *builtin,
-   const GPUMatType type, const char *name,
-   const bool use_opensubdiv,
-   const bool use_new_shading);
+GPUPass *GPU_generate_pass_new(
+ListBase *nodes, struct GPUNodeLink *frag_outlink,
+struct GPUVertexAttribs *attribs,
+const char *vert_code, const char *geom_code,
+const char *frag_lib, const char *defines);
+GPUPass *GPU_generate_pass(
+ListBase *nodes, struct GPUNodeLink *outlink,
+struct GPUVertexAttribs *attribs, int *builtin,
+const GPUMatType type, const char *name,
+const bool use_opensubdiv,
+const bool use_new_shading);
 
 struct GPUShader *GPU_pass_shader(GPUPass *pass);
 
diff --git a/source/blender/gpu/intern/gpu_material.c 
b/source/blender/gpu/intern/gpu_material.c
index c00baef2856..15253477c7c 100644
--- a/source/blender/gpu/intern/gpu_material.c
+++ b/source/blender/gpu/intern/gpu_material.c
@@ -2132,7 +2132,8 @@ GPUMaterial *GPU_material_from_nodetree(
/* Let Draw manager finish the construction. */
if (mat->outlink) {
outlink = mat->outlink;
-   mat->pass = GPU_generate_pass_new(>nodes, outlink, 
vert_code, geom_code, frag_lib, defines);
+   mat->pass = GPU_generate_pass_new(
+   >nodes, outlink, >attribs, vert_code, 
geom_code, frag_lib, defines);
}
 
/* note that even if building the shader fails in some way, we still 
keep

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


[Bf-blender-cvs] [2ed82d2e6bb] blender2.8: Fix missing globalsBlock in edit mode latice drawing

2017-06-27 Thread Luca Rood
Commit: 2ed82d2e6bb6d7887e4a07ad9600b7b579a74a38
Author: Luca Rood
Date:   Tue Jun 27 18:39:45 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB2ed82d2e6bb6d7887e4a07ad9600b7b579a74a38

Fix missing globalsBlock in edit mode latice drawing

This was causing lattice vertices not to be drawn.

===

M   source/blender/draw/modes/edit_lattice_mode.c

===

diff --git a/source/blender/draw/modes/edit_lattice_mode.c 
b/source/blender/draw/modes/edit_lattice_mode.c
index 790d2627a14..722010148ff 100644
--- a/source/blender/draw/modes/edit_lattice_mode.c
+++ b/source/blender/draw/modes/edit_lattice_mode.c
@@ -177,6 +177,8 @@ static void EDIT_LATTICE_cache_init(void *vedata)
"Lattice Verts",
DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | 
DRW_STATE_POINT);
stl->g_data->vert_shgrp = 
DRW_shgroup_create(e_data.overlay_vert_sh, psl->vert_pass);
+
+   DRW_shgroup_uniform_block(stl->g_data->vert_shgrp, 
"globalsBlock", globals_ubo);
}
 }

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


[Bf-blender-cvs] [230d089a300] greasepencil-object: Cleanup: Improve debug messages

2017-06-27 Thread Antonio Vazquez
Commit: 230d089a30006f37cfa9df8471fa3f39dc22bee4
Author: Antonio Vazquez
Date:   Tue Jun 27 17:43:21 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB230d089a30006f37cfa9df8471fa3f39dc22bee4

Cleanup: Improve debug messages

===

M   source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
M   source/blender/draw/engines/gpencil/gpencil_engine.c

===

diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c 
b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
index 912789ab958..a3d86ce8320 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -132,7 +132,7 @@ static void gpencil_batch_cache_check_free_slots(bGPdata 
*gpd)
 static void gpencil_batch_cache_init(bGPdata *gpd, int cfra)
 {
if (G.debug_value == 668) {
-   printf("gpencil_batch_cache_init for %s\n", gpd->id.name);
+   printf("gpencil_batch_cache_init: %s\n", gpd->id.name);
}
GpencilBatchCache *cache = gpd->batch_cache;
 
@@ -167,7 +167,7 @@ void gpencil_batch_cache_clear(bGPdata *gpd)
return;
}
if (G.debug_value == 668) {
-   printf("gpencil_batch_cache_clear for %s\n", gpd->id.name);
+   printf("gpencil_batch_cache_clear: %s\n", gpd->id.name);
}
 
if (cache->cache_size > 0) {
@@ -595,7 +595,7 @@ static void gpencil_draw_onionskins(GpencilBatchCache 
*cache, GPENCIL_e_data *e_
 void DRW_gpencil_populate_datablock(GPENCIL_e_data *e_data, void *vedata, 
Scene *scene, Object *ob, ToolSettings *ts, bGPdata *gpd)
 {
if (G.debug_value == 668) {
-   printf("DRW_gpencil_populate_datablock for %s\n", gpd->id.name);
+   printf("DRW_gpencil_populate_datablock: %s\n", gpd->id.name);
}

GpencilBatchCache *cache = gpencil_batch_cache_get(gpd, CFRA);
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c 
b/source/blender/draw/engines/gpencil/gpencil_engine.c
index 00251ff8bc8..07b7311ffcd 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -177,7 +177,7 @@ static void GPENCIL_cache_populate(void *vedata, Object *ob)
/* object datablock (this is not draw now) */
if (ob->type == OB_GPENCIL && ob->gpd) {
if (G.debug_value == 668) {
-   printf("GPENCIL_cache_populate: Object\n");
+   printf("GPENCIL_cache_populate: %s\n", ob->id.name);
}
/* allocate memory for saving gp objects */
stl->g_data->gp_object_cache = 
gpencil_object_cache_allocate(stl->g_data->gp_object_cache, 
>g_data->gp_cache_size, >g_data->gp_cache_used);
@@ -203,6 +203,10 @@ static void GPENCIL_cache_finish(void *vedata)
DRW_gpencil_populate_datablock(_data, vedata, scene, 
ob, ts, ob->gpd);
/* save end shading group */
stl->g_data->gp_object_cache[i].end_grp = 
stl->storage->shgroup_id - 1;
+   if (G.debug_value == 668) {
+   printf("GPENCIL_cache_finish: %s %d->%d\n", 
ob->id.name, 
+   
stl->g_data->gp_object_cache[i].init_grp, 
stl->g_data->gp_object_cache[i].end_grp);
+   }
}
}
 }
@@ -238,7 +242,10 @@ static void GPENCIL_draw_scene(void *vedata)
/* Stroke Pass: DRW_STATE_WRITE_COLOR | 
DRW_STATE_BLEND | DRW_STATE_WRITE_DEPTH
 * draw only a subset that always start with a 
fill and end with stroke because the
 * shading groups are created by pairs */
-   DRW_draw_pass_subset(psl->stroke_pass, 
+   if (G.debug_value == 668) {
+   printf("GPENCIL_draw_scene: %s 
%d->%d\n", ob->id.name, init_grp, end_grp);
+   }
+   DRW_draw_pass_subset(psl->stroke_pass,
stl->shgroups[init_grp].shgrps_fill, 
stl->shgroups[end_grp].shgrps_stroke);

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


[Bf-blender-cvs] [d04f30c5d84] blender2.8: Implement weight colors for lattices in draw manager

2017-06-27 Thread Luca Rood
Commit: d04f30c5d84889b9c4c77e102726c6d595518984
Author: Luca Rood
Date:   Tue Jun 27 15:59:13 2017 +0200
Branches: blender2.8
https://developer.blender.org/rBd04f30c5d84889b9c4c77e102726c6d595518984

Implement weight colors for lattices in draw manager

===

M   source/blender/draw/intern/draw_cache.c
M   source/blender/draw/intern/draw_cache.h
M   source/blender/draw/intern/draw_cache_impl.h
M   source/blender/draw/intern/draw_cache_impl_lattice.c
M   source/blender/draw/modes/edit_lattice_mode.c
M   source/blender/draw/modes/object_mode.c

===

diff --git a/source/blender/draw/intern/draw_cache.c 
b/source/blender/draw/intern/draw_cache.c
index 82a26582421..7636bce9aca 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -30,6 +30,7 @@
 #include "DNA_object_types.h"
 #include "DNA_particle_types.h"
 #include "DNA_modifier_types.h"
+#include "DNA_lattice_types.h"
 
 #include "BLI_utildefines.h"
 #include "BLI_math.h"
@@ -2400,12 +2401,18 @@ Gwn_Batch *DRW_cache_lattice_verts_get(Object *ob)
return DRW_lattice_batch_cache_get_all_verts(lt);
 }
 
-Gwn_Batch *DRW_cache_lattice_wire_get(Object *ob)
+Gwn_Batch *DRW_cache_lattice_wire_get(Object *ob, bool use_weight)
 {
BLI_assert(ob->type == OB_LATTICE);
 
-   struct Lattice *lt = ob->data;
-   return DRW_lattice_batch_cache_get_all_edges(lt);
+   Lattice *lt = ob->data;
+   int actdef = -1;
+
+   if (use_weight && ob->defbase.first && lt->editlatt->latt->dvert) {
+   actdef = ob->actdef - 1;
+   }
+
+   return DRW_lattice_batch_cache_get_all_edges(lt, use_weight, actdef);
 }
 
 Gwn_Batch *DRW_cache_lattice_vert_overlay_get(Object *ob)
diff --git a/source/blender/draw/intern/draw_cache.h 
b/source/blender/draw/intern/draw_cache.h
index 82ff949c5c8..0bb291caa9c 100644
--- a/source/blender/draw/intern/draw_cache.h
+++ b/source/blender/draw/intern/draw_cache.h
@@ -143,7 +143,7 @@ struct Gwn_Batch *DRW_cache_surf_surface_get(struct Object 
*ob);
 
 /* Lattice */
 struct Gwn_Batch *DRW_cache_lattice_verts_get(struct Object *ob);
-struct Gwn_Batch *DRW_cache_lattice_wire_get(struct Object *ob);
+struct Gwn_Batch *DRW_cache_lattice_wire_get(struct Object *ob, bool 
use_weight);
 struct Gwn_Batch *DRW_cache_lattice_vert_overlay_get(struct Object *ob);
 
 /* Particles */
diff --git a/source/blender/draw/intern/draw_cache_impl.h 
b/source/blender/draw/intern/draw_cache_impl.h
index 8786dda9d51..f02f73d1f9d 100644
--- a/source/blender/draw/intern/draw_cache_impl.h
+++ b/source/blender/draw/intern/draw_cache_impl.h
@@ -66,7 +66,7 @@ struct Gwn_Batch 
*DRW_curve_batch_cache_get_overlay_select(struct Curve *cu);
 struct Gwn_Batch *BLI_displist_batch_calc_surface(struct ListBase *lb);
 
 /* Lattice */
-struct Gwn_Batch *DRW_lattice_batch_cache_get_all_edges(struct Lattice *lt);
+struct Gwn_Batch *DRW_lattice_batch_cache_get_all_edges(struct Lattice *lt, 
bool use_weight, const int actdef);
 struct Gwn_Batch *DRW_lattice_batch_cache_get_all_verts(struct Lattice *lt);
 struct Gwn_Batch *DRW_lattice_batch_cache_get_overlay_verts(struct Lattice 
*lt);
 
diff --git a/source/blender/draw/intern/draw_cache_impl_lattice.c 
b/source/blender/draw/intern/draw_cache_impl_lattice.c
index dfba2aedcda..84b061aff9a 100644
--- a/source/blender/draw/intern/draw_cache_impl_lattice.c
+++ b/source/blender/draw/intern/draw_cache_impl_lattice.c
@@ -36,8 +36,12 @@
 
 #include "DNA_curve_types.h"
 #include "DNA_lattice_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_userdef_types.h"
 
 #include "BKE_lattice.h"
+#include "BKE_deform.h"
+#include "BKE_texture.h"
 
 #include "GPU_batch.h"
 
@@ -130,6 +134,8 @@ typedef struct LatticeRenderData {
BPoint *bp;
 
int actbp;
+
+   struct MDeformVert *dvert;
 } LatticeRenderData;
 
 enum {
@@ -149,6 +155,8 @@ static LatticeRenderData 
*lattice_render_data_create(Lattice *lt, const int type
 
rdata->edit_latt = editlatt;
 
+   rdata->dvert = lt->dvert;
+
if (types & (LR_DATATYPE_VERT)) {
rdata->vert_len = lattice_render_verts_len_get(lt);
}
@@ -160,6 +168,8 @@ static LatticeRenderData 
*lattice_render_data_create(Lattice *lt, const int type
}
}
else {
+   rdata->dvert = NULL;
+
if (types & (LR_DATATYPE_VERT)) {
rdata->vert_len = lattice_render_verts_len_get(lt);
}
@@ -209,6 +219,60 @@ static const BPoint *lattice_render_data_vert_bpoint(const 
LatticeRenderData *rd
return >bp[vert_idx];
 }
 
+/* TODO, move into shader? */
+static void rgb_from_weight(float r_rgb[3], const float weight)
+{
+   const float blend = ((weight / 2.0f) + 0.5f);
+
+   if (weight <= 0.25f) {/* 

[Bf-blender-cvs] [f0ada8377b9] greasepencil-object: Cleanup: Remove unused uniform

2017-06-27 Thread Antonio Vazquez
Commit: f0ada8377b9019b090c77cd384dad846ac0f8638
Author: Antonio Vazquez
Date:   Tue Jun 27 16:52:51 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rBf0ada8377b9019b090c77cd384dad846ac0f8638

Cleanup: Remove unused uniform

===

M   source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c

===

diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c 
b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
index 15fa8d41a5a..912789ab958 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -258,17 +258,6 @@ static DRWShadingGroup 
*DRW_gpencil_shgroup_fill_create(GPENCIL_e_data *e_data,
DRW_shgroup_uniform_int(grp, "t_clamp", 
>shgroups[id].t_clamp, 1);
}
 
-   /* object scale */
-   if ((ob) && (id > -1)) {
-   stl->shgroups[id].obj_scale = (ob->size[0] + ob->size[1] + 
ob->size[2]) / 3.0f;
-   DRW_shgroup_uniform_float(grp, "objscale", 
>shgroups[id].obj_scale, 1);
-   }
-   else {
-   stl->storage->obj_scale = 1.0f;
-   DRW_shgroup_uniform_float(grp, "objscale", 
>storage->obj_scale, 1);
-   }
-
-
return grp;
 }

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


[Bf-blender-cvs] [f11bcbed9d0] master: Fix T51913: Context tab for textures issue

2017-06-27 Thread Dalai Felinto
Commit: f11bcbed9d0402db271bc610eaec156583e746fa
Author: Dalai Felinto
Date:   Tue Jun 27 16:53:43 2017 +0200
Branches: master
https://developer.blender.org/rBf11bcbed9d0402db271bc610eaec156583e746fa

Fix T51913: Context tab for textures issue

The original code was doing a sanity check to see if existing index was
out of range. However the comparison was wrong.

So if the previous ct->user (active index of texture node) was larger
than then number of available texture nodes + 1 in the other material,
we would never re-set the index to 0.

Bug introduced on c31f74de6bb7.

There was an early attempt of fixing this (2b2ac5d3cc) but it was just working
by pure, luck. And failing in cases like the one from this bug report.

===

M   source/blender/editors/space_buttons/buttons_texture.c

===

diff --git a/source/blender/editors/space_buttons/buttons_texture.c 
b/source/blender/editors/space_buttons/buttons_texture.c
index 72de7e5c81c..1d67ac620b0 100644
--- a/source/blender/editors/space_buttons/buttons_texture.c
+++ b/source/blender/editors/space_buttons/buttons_texture.c
@@ -470,7 +470,7 @@ void buttons_texture_context_compute(const bContext *C, 
SpaceButs *sbuts)
}
else {
/* set one user as active based on active index */
-   if (ct->index == BLI_listbase_count_ex(>users, ct->index + 
1))
+   if (ct->index >= BLI_listbase_count_ex(>users, ct->index + 
1))
ct->index = 0;
 
ct->user = BLI_findlink(>users, ct->index);

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


[Bf-blender-cvs] [41b118c9d96] soc-2017-normal-tools: Merge branch 'master' into soc-2017-normal-tools

2017-06-27 Thread Bastien Montagne
Commit: 41b118c9d96514399f464e21fb778200cd687541
Author: Bastien Montagne
Date:   Tue Jun 27 15:08:56 2017 +0200
Branches: soc-2017-normal-tools
https://developer.blender.org/rB41b118c9d96514399f464e21fb778200cd687541

Merge branch 'master' into soc-2017-normal-tools

Conflicts:
source/blender/python/intern/bpy_props.c

===



===



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


[Bf-blender-cvs] [6e83ace809b] blender2.8: LightProbes: Change 3d view display shape.

2017-06-27 Thread Clément Foucault
Commit: 6e83ace809be366f7e8ba55bf0d9e5b2d819b587
Author: Clément Foucault
Date:   Tue Jun 27 14:59:53 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB6e83ace809be366f7e8ba55bf0d9e5b2d819b587

LightProbes: Change 3d view display shape.

Introduce specific shape for each probe type to easily identify them.

===

M   source/blender/draw/intern/draw_cache.c
M   source/blender/draw/intern/draw_cache.h
M   source/blender/draw/modes/object_mode.c

===

diff --git a/source/blender/draw/intern/draw_cache.c 
b/source/blender/draw/intern/draw_cache.c
index 5d0485b03e6..82a26582421 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -68,7 +68,9 @@ static struct DRWShapeCache {
Gwn_Batch *drw_lamp_spot;
Gwn_Batch *drw_lamp_spot_square;
Gwn_Batch *drw_speaker;
-   Gwn_Batch *drw_lightprobe;
+   Gwn_Batch *drw_lightprobe_cube;
+   Gwn_Batch *drw_lightprobe_planar;
+   Gwn_Batch *drw_lightprobe_grid;
Gwn_Batch *drw_bone_octahedral;
Gwn_Batch *drw_bone_octahedral_wire;
Gwn_Batch *drw_bone_box;
@@ -118,7 +120,9 @@ void DRW_shape_cache_free(void)
BATCH_DISCARD_ALL_SAFE(SHC.drw_lamp_spot);
BATCH_DISCARD_ALL_SAFE(SHC.drw_lamp_spot_square);
BATCH_DISCARD_ALL_SAFE(SHC.drw_speaker);
-   BATCH_DISCARD_ALL_SAFE(SHC.drw_lightprobe);
+   BATCH_DISCARD_ALL_SAFE(SHC.drw_lightprobe_cube);
+   BATCH_DISCARD_ALL_SAFE(SHC.drw_lightprobe_planar);
+   BATCH_DISCARD_ALL_SAFE(SHC.drw_lightprobe_grid);
BATCH_DISCARD_ALL_SAFE(SHC.drw_bone_octahedral);
BATCH_DISCARD_ALL_SAFE(SHC.drw_bone_octahedral_wire);
BATCH_DISCARD_ALL_SAFE(SHC.drw_bone_box);
@@ -1329,13 +1333,21 @@ Gwn_Batch *DRW_cache_speaker_get(void)
 /** \name Probe
  * \{ */
 
-Gwn_Batch *DRW_cache_lightprobe_get(void)
+Gwn_Batch *DRW_cache_lightprobe_cube_get(void)
 {
-#define CIRCLE_RESOL 16
-   if (!SHC.drw_lightprobe) {
+   if (!SHC.drw_lightprobe_cube) {
int v_idx = 0;
-   float v[3] = {0.0f, 1.0f, 0.0f};
-   /* TODO something nicer than just a circle */
+   const float sin_pi_3 = 0.86602540378f;
+   const float cos_pi_3 = 0.5f;
+   float v[7][3] = {
+   {0.0f, 1.0f, 0.0f},
+   {sin_pi_3, cos_pi_3, 0.0f},
+   {sin_pi_3, -cos_pi_3, 0.0f},
+   {0.0f, -1.0f, 0.0f},
+   {-sin_pi_3, -cos_pi_3, 0.0f},
+   {-sin_pi_3, cos_pi_3, 0.0f},
+   {0.0f, 0.0f, 0.0f},
+   };
 
/* Position Only 3D format */
static Gwn_VertFormat format = { 0 };
@@ -1345,35 +1357,114 @@ Gwn_Batch *DRW_cache_lightprobe_get(void)
}
 
Gwn_VertBuf *vbo = GWN_vertbuf_create_with_format();
-   GWN_vertbuf_data_alloc(vbo, CIRCLE_RESOL * 2 + 8);
+   GWN_vertbuf_data_alloc(vbo, (6 + 3) * 2);
 
-   GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v);
-   for (int a = 1; a < CIRCLE_RESOL; a++) {
-   v[0] = sinf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
-   v[1] = cosf((2.0f * M_PI * a) / ((float)CIRCLE_RESOL));
-   GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v);
+   for (int i = 0; i < 6; ++i) {
+   GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[i]);
+   GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[(i + 
1) % 6]);
+   }
 
-   if ((a % 2 == 0) && (a % 4 != 0)) {
-   v[0] *= 0.5f;
-   v[1] *= 0.5f;
-   GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, 
v);
-   v[0] *= 3.0f;
-   v[1] *= 3.0f;
-   GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, 
v);
-   v[0] /= 1.5f;
-   v[1] /= 1.5f;
+   GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[1]);
+   GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[6]);
+
+   GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[5]);
+   GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[6]);
+
+   GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[3]);
+   GWN_vertbuf_attr_set(vbo, attr_id.pos, v_idx++, v[6]);
+
+   SHC.drw_lightprobe_cube = GWN_batch_create(GWN_PRIM_LINES, vbo, 
NULL);
+   }
+   return SHC.drw_lightprobe_cube;
+}
+
+Gwn_Batch *DRW_cache_lightprobe_grid_get(void)
+{
+   if (!SHC.drw_lightprobe_grid) {
+   int v_idx = 0;
+   

[Bf-blender-cvs] [95c2c1c06f1] greasepencil-object: Initialize index fields for shgroups

2017-06-27 Thread Antonio Vazquez
Commit: 95c2c1c06f12e6166a992bea98b9ff3c6558a008
Author: Antonio Vazquez
Date:   Tue Jun 27 13:02:30 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB95c2c1c06f12e6166a992bea98b9ff3c6558a008

Initialize index fields for shgroups

===

M   source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c

===

diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c 
b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
index 50354161091..15fa8d41a5a 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -74,6 +74,8 @@ void gpencil_object_cache_add(tGPencilObjectCache *cache, 
Object *ob, int *gp_ca
 {
/* save object */
cache[*gp_cache_used].ob = ob;
+   cache[*gp_cache_used].init_grp = 0;
+   cache[*gp_cache_used].end_grp = -1;
 
/* increase slots used in cache */
++*gp_cache_used;

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


[Bf-blender-cvs] [9343e9cde38] greasepencil-object: Merge branch 'blender2.8' into greasepencil-object

2017-06-27 Thread Antonio Vazquez
Commit: 9343e9cde386e9c56562b991f4f480d587a7fbd7
Author: Antonio Vazquez
Date:   Tue Jun 27 12:43:31 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB9343e9cde386e9c56562b991f4f480d587a7fbd7

Merge branch 'blender2.8' into greasepencil-object

===



===



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


[Bf-blender-cvs] [b3693fa30ed] greasepencil-object: Fix error in GP modes for undo

2017-06-27 Thread Antonio Vazquez
Commit: b3693fa30ede00cd9eb9c5fc84c5150db4ce84df
Author: Antonio Vazquez
Date:   Tue Jun 27 12:39:36 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rBb3693fa30ede00cd9eb9c5fc84c5150db4ce84df

Fix error in GP modes for undo

When undo the special gp modes did not work.

===

M   source/blender/editors/util/undo.c

===

diff --git a/source/blender/editors/util/undo.c 
b/source/blender/editors/util/undo.c
index f5830e451e3..d06c93c1842 100644
--- a/source/blender/editors/util/undo.c
+++ b/source/blender/editors/util/undo.c
@@ -47,6 +47,7 @@
 #include "BKE_global.h"
 #include "BKE_main.h"
 #include "BKE_screen.h"
+#include "BKE_workspace.h"
 
 #include "ED_armature.h"
 #include "ED_particle.h"
@@ -135,6 +136,11 @@ static int ed_undo_step(bContext *C, int step, const char 
*undoname)
if (ED_gpencil_session_active()) {
return ED_undo_gpencil_step(C, step, undoname);
}
+   if (sa && (sa->spacetype == SPACE_VIEW3D)) {
+   if (obact && (obact->type == OB_GPENCIL)) {
+   ED_gpencil_toggle_brush_cursor(C, false);
+   }
+   }
 
if (sa && (sa->spacetype == SPACE_IMAGE)) {
SpaceImage *sima = (SpaceImage *)sa->spacedata.first;
@@ -207,10 +213,30 @@ static int ed_undo_step(bContext *C, int step, const char 
*undoname)
WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, 
scene);
}
}
-   
+
+   /* Set special modes for grease pencil */
+   if (sa && (sa->spacetype == SPACE_VIEW3D)) {
+   obact = CTX_data_active_object(C);
+   if (obact && (obact->type == OB_GPENCIL)) {
+   /* set cursor */
+   if (obact->mode == OB_MODE_GPENCIL_PAINT) {
+   WM_cursor_modal_set(CTX_wm_window(C), 
BC_PAINTBRUSHCURSOR);
+   }
+   else if (obact->mode == OB_MODE_GPENCIL_SCULPT) {
+   WM_cursor_modal_set(CTX_wm_window(C), 
BC_CROSSCURSOR);
+   ED_gpencil_toggle_brush_cursor(C, true);
+   }
+   else {
+   WM_cursor_modal_set(CTX_wm_window(C), 
CURSOR_STD);
+   }
+   /* set workspace mode */
+   BKE_workspace_object_mode_set(CTX_wm_workspace(C), 
obact->mode);
+   }
+   }
+
WM_event_add_notifier(C, NC_WINDOW, NULL);
WM_event_add_notifier(C, NC_WM | ND_UNDO, NULL);
-
+   
if (win) {
win->addmousemove = true;
}

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


[Bf-blender-cvs] [76498ed5705] greasepencil-object: Avoid load files with gp modes enabled

2017-06-27 Thread Antonio Vazquez
Commit: 76498ed57051e78a83e736a895d991f8626cddd8
Author: Antonio Vazquez
Date:   Tue Jun 27 12:05:17 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rB76498ed57051e78a83e736a895d991f8626cddd8

Avoid load files with gp modes enabled

The new files must be loaded in Object mode and not in special grease pencil 
modes.

===

M   source/blender/blenloader/intern/readfile.c

===

diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index fac207a43b0..f3e4c224cc9 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -4873,6 +4873,18 @@ static void lib_link_object(FileData *fd, Main *main)
}

ob->gpd = newlibadr_us(fd, ob->id.lib, ob->gpd);
+   if (ob->type == OB_GPENCIL) {
+   /* if load a gpencil object must be in object 
mode except for undo */
+   if ((!fd->memfile) && (ob->gpd)) {
+   ob->mode &= ~OB_MODE_GPENCIL_EDIT;
+   ob->mode &= ~OB_MODE_GPENCIL_PAINT;
+   ob->mode &= ~OB_MODE_GPENCIL_SCULPT;
+   ob->mode |= OB_MODE_OBJECT;
+   ob->gpd->flag &= 
~GP_DATA_STROKE_EDITMODE;
+   ob->gpd->flag &= 
~GP_DATA_STROKE_PAINTMODE;
+   ob->gpd->flag &= 
~GP_DATA_STROKE_SCULPTMODE;
+   }
+   }
ob->duplilist = NULL;

ob->id.tag &= ~LIB_TAG_NEED_LINK;

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


[Bf-blender-cvs] [cbfdd02f2c4] blender2.8: Fix typo in Eevee hair UV handling

2017-06-27 Thread Luca Rood
Commit: cbfdd02f2c47aa495a4df89204fdaeadfc2ed6cb
Author: Luca Rood
Date:   Tue Jun 27 11:58:59 2017 +0200
Branches: blender2.8
https://developer.blender.org/rBcbfdd02f2c47aa495a4df89204fdaeadfc2ed6cb

Fix typo in Eevee hair UV handling

===

M   source/blender/draw/intern/draw_cache_impl_particles.c

===

diff --git a/source/blender/draw/intern/draw_cache_impl_particles.c 
b/source/blender/draw/intern/draw_cache_impl_particles.c
index f3f658dbd8d..178d0a19e80 100644
--- a/source/blender/draw/intern/draw_cache_impl_particles.c
+++ b/source/blender/draw/intern/draw_cache_impl_particles.c
@@ -337,7 +337,7 @@ static void 
particle_batch_cache_ensure_pos_and_seg(ParticleSystem *psys, Modifi
 
if (ELEM(from, PART_FROM_FACE, 
PART_FROM_VOLUME)) {
ChildParticle *particle 
= >child[i];
-   int num = 
psys->part->childtype == particle->num;
+   int num = particle->num;
 
if (num != 
DMCACHE_NOTFOUND) {
MFace *mface = 
psmd->dm_final->getTessFaceData(psmd->dm_final, num, CD_MFACE);

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


[Bf-blender-cvs] [bb0e8f1c552] master: Cleanup: remove unused function

2017-06-27 Thread Campbell Barton
Commit: bb0e8f1c552adfb67f34551f061f2b901e1f2d90
Author: Campbell Barton
Date:   Tue Jun 27 18:05:44 2017 +1000
Branches: master
https://developer.blender.org/rBbb0e8f1c552adfb67f34551f061f2b901e1f2d90

Cleanup: remove unused function

===

M   source/blender/collada/EffectExporter.cpp
M   source/blender/collada/EffectExporter.h

===

diff --git a/source/blender/collada/EffectExporter.cpp 
b/source/blender/collada/EffectExporter.cpp
index 55dc936939c..2bf0859b0f0 100644
--- a/source/blender/collada/EffectExporter.cpp
+++ b/source/blender/collada/EffectExporter.cpp
@@ -196,18 +196,6 @@ void 
EffectsExporter::writeTextures(COLLADASW::EffectProfile ,
}
 }
 
-void EffectsExporter::exportUVMats(Object *ob)
-{
-   std::vector tex_indices;
-   int active_uv_layer = -1;
-   std::set uv_textures;
-   if (ob->type == OB_MESH && ob->totcol && 
this->export_settings->export_texture_type == BC_TEXTURE_TYPE_UV) {
-   bool active_uv_only = this->export_settings->active_uv_only;
-   Mesh *me = (Mesh *)ob->data;
-   active_uv_layer = CustomData_get_active_layer_index(>pdata, 
CD_MTEXPOLY);
-   }
-}
-
 void EffectsExporter::operator()(Material *ma, Object *ob)
 {
// create a list of indices to textures of type TEX_IMAGE
diff --git a/source/blender/collada/EffectExporter.h 
b/source/blender/collada/EffectExporter.h
index 95e931dc0d1..7d45a085777 100644
--- a/source/blender/collada/EffectExporter.h
+++ b/source/blender/collada/EffectExporter.h
@@ -47,7 +47,6 @@ class EffectsExporter: COLLADASW::LibraryEffects
 {
 public:
EffectsExporter(COLLADASW::StreamWriter *sw, const ExportSettings 
*export_settings);
-   void exportUVMats(Object *ob);
void exportEffects(Scene *sce);
void operator()(Material *ma, Object *ob);

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


[Bf-blender-cvs] [3cb562c9941] blender2.8: mikktspace: minor optimization

2017-06-27 Thread Campbell Barton
Commit: 3cb562c99416486051533d75b6be194c2819f7b9
Author: Campbell Barton
Date:   Tue Jun 27 15:34:12 2017 +1000
Branches: blender2.8
https://developer.blender.org/rB3cb562c99416486051533d75b6be194c2819f7b9

mikktspace: minor optimization

Add a safe version of normalize since all uses of normalize
did zero length checks, move this into a function.

Also avoid unnecessary conversion.

Gives minor speedup here (approx 3-5%).

===

M   intern/mikktspace/mikktspace.c

===

diff --git a/intern/mikktspace/mikktspace.c b/intern/mikktspace/mikktspace.c
index 0342ae0146f..7fbfe57be5c 100644
--- a/intern/mikktspace/mikktspace.c
+++ b/intern/mikktspace/mikktspace.c
@@ -93,9 +93,23 @@ static float Length( const SVec3 v )
return sqrtf(LengthSquared(v));
 }
 
+#if 0  // UNUSED
 static SVec3   Normalize( const SVec3 v )
 {
-   return vscale(1 / Length(v), v);
+   return vscale(1.0f / Length(v), v);
+}
+#endif
+
+static SVec3   NormalizeSafe( const SVec3 v )
+{
+   const float len = Length(v);
+   if (len != 0.0f) {
+   return vscale(1.0f / len, v);
+   }
+   else
+   {
+   return v;
+   }
 }
 
 static float   vdot( const SVec3 v1, const SVec3 v2)
@@ -110,12 +124,13 @@ static tbool NotZero(const float fX)
return fabsf(fX) > FLT_MIN;
 }
 
+#if 0  // UNUSED
 static tbool VNotZero(const SVec3 v)
 {
// might change this to an epsilon based test
return NotZero(v.x) || NotZero(v.y) || NotZero(v.z);
 }
-
+#endif
 
 
 typedef struct {
@@ -202,8 +217,8 @@ static STSpace AvgTSpace(const STSpace * pTS0, const 
STSpace * pTS1)
ts_res.fMagT = 0.5f*(pTS0->fMagT+pTS1->fMagT);
ts_res.vOs = vadd(pTS0->vOs,pTS1->vOs);
ts_res.vOt = vadd(pTS0->vOt,pTS1->vOt);
-   if ( VNotZero(ts_res.vOs) ) ts_res.vOs = Normalize(ts_res.vOs);
-   if ( VNotZero(ts_res.vOt) ) ts_res.vOt = Normalize(ts_res.vOt);
+   ts_res.vOs = NormalizeSafe(ts_res.vOs);
+   ts_res.vOt = NormalizeSafe(ts_res.vOt);
}
 
return ts_res;
@@ -238,7 +253,7 @@ tbool genTangSpace(const SMikkTSpaceContext * pContext, 
const float fAngularThre
int iNrActiveGroups = 0, index = 0;
const int iNrFaces = pContext->m_pInterface->m_getNumFaces(pContext);
tbool bRes = TFALSE;
-   const float fThresCos = (float) 
cos((fAngularThreshold*(float)M_PI)/180.0f);
+   const float fThresCos = cosf((fAngularThreshold*(float)M_PI)/180.0f);
 
// verify all call-backs have been set
if ( pContext->m_pInterface->m_getNumFaces==NULL ||
@@ -258,7 +273,7 @@ tbool genTangSpace(const SMikkTSpaceContext * pContext, 
const float fAngularThre
if (iNrTrianglesIn<=0) return TFALSE;
 
// allocate memory for an index list
-   piTriListIn = (int *) malloc(sizeof(int)*3*iNrTrianglesIn);
+   piTriListIn = (int *) malloc(sizeof(int[3])*iNrTrianglesIn);
pTriInfos = (STriInfo *) malloc(sizeof(STriInfo)*iNrTrianglesIn);
if (piTriListIn==NULL || pTriInfos==NULL)
{
@@ -311,7 +326,7 @@ tbool genTangSpace(const SMikkTSpaceContext * pContext, 
const float fAngularThre
// based on the 4 rules, identify groups based on connectivity
iNrMaxGroups = iNrTrianglesIn*3;
pGroups = (SGroup *) malloc(sizeof(SGroup)*iNrMaxGroups);
-   piGroupTrianglesBuffer = (int *) malloc(sizeof(int)*iNrTrianglesIn*3);
+   piGroupTrianglesBuffer = (int *) malloc(sizeof(int[3])*iNrTrianglesIn);
if (pGroups==NULL || piGroupTrianglesBuffer==NULL)
{
if (pGroups!=NULL) free(pGroups);
@@ -427,6 +442,7 @@ typedef struct {
 } STmpVert;
 
 static const int g_iCells = 2048;
+static const float g_iCells_fl = 2048.0f;
 
 #ifdef _MSC_VER
 #  define NOINLINE __declspec(noinline)
@@ -439,7 +455,7 @@ static const int g_iCells = 2048;
 // results for the same effective input value fVal.
 static NOINLINE int FindGridCell(const float fMin, const float fMax, const 
float fVal)
 {
-   const float fIndex = g_iCells * ((fVal-fMin)/(fMax-fMin));
+   const float fIndex = g_iCells_fl * ((fVal-fMin)/(fMax-fMin));
const int iIndex = (int)fIndex;
return iIndex < g_iCells ? (iIndex >= 0 ? iIndex : 0) : (g_iCells - 1);
 }
@@ -488,7 +504,7 @@ static void GenerateSharedVerticesIndexList(int 
piTriList_in_and_out[], const SM
}
 
// make allocations
-   piHashTable = (int *) malloc(sizeof(int)*iNrTrianglesIn*3);
+   piHashTable = (int *) malloc(sizeof(int[3])*iNrTrianglesIn);
piHashCount = (int *) malloc(sizeof(int)*g_iCells);
piHashOffsets = (int *) malloc(sizeof(int)*g_iCells);
piHashCount2 = (int *) malloc(sizeof(int)*g_iCells);
@@ -544,7 +560,7 @@ static void GenerateSharedVerticesIndexList(int