[Bf-blender-cvs] [4a061a87e66] blender2.8: DwM: mesh data now only creates data thats used
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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
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
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
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
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
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
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
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