[Bf-blender-cvs] [f83a2447496] blender2.8: Mesh Batch Cache: Optimization, make use of gawain attrib aliases.
Clément Foucault
noreply at git.blender.org
Mon May 15 16:16:49 CEST 2017
Commit: f83a24474967170a0a5323abe0e987f3a392f793
Author: Clément Foucault
Date: Sat May 13 22:53:11 2017 +0200
Branches: blender2.8
https://developer.blender.org/rBf83a24474967170a0a5323abe0e987f3a392f793
Mesh Batch Cache: Optimization, make use of gawain attrib aliases.
===================================================================
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 3b8d758ae58..264875ef131 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -1932,16 +1932,8 @@ static VertexBuffer *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata
/* initialize vertex format */
unsigned int orco_id = VertexFormat_add_attrib(format, "orco", COMP_F32, 3, KEEP_FLOAT);
unsigned int *uv_id = MEM_mallocN(sizeof(*uv_id) * rdata->uv_len, "UV attrib format");
- unsigned int *uv_auto_id = MEM_mallocN(sizeof(*uv_id) * rdata->uv_len, "UV attrib format");
unsigned int *vcol_id = MEM_mallocN(sizeof(*vcol_id) * rdata->vcol_len, "Vcol attrib format");
- unsigned int *vcol_auto_id = MEM_mallocN(sizeof(*vcol_id) * rdata->vcol_len, "Vcol attrib format");
unsigned int *tangent_id = MEM_mallocN(sizeof(*tangent_id) * rdata->uv_len, "Tangent attrib format");
- /* XXX TODO : We are allocating for the active layers
- * but we only need to bind the right layer to the default attrib.
- * This is a gawain limitation to solve. */
- unsigned int active_uv_id = VertexFormat_add_attrib(format, "u", COMP_F32, 2, KEEP_FLOAT);
- unsigned int active_vcol_id = VertexFormat_add_attrib(format, "c", COMP_U8, 3, NORMALIZE_INT_TO_FLOAT);
- unsigned int active_tangent_id = VertexFormat_add_attrib(format, "t", COMP_F32, 4, KEEP_FLOAT);
for (int i = 0; i < rdata->uv_len; i++) {
/* UV */
@@ -1949,13 +1941,20 @@ static VertexBuffer *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata
uv_id[i] = VertexFormat_add_attrib(format, attrib_name, COMP_F32, 2, KEEP_FLOAT);
/* Auto Name */
- /* TODO Remove when when have aliases */
attrib_name = mesh_render_data_uv_auto_layer_uuid_get(rdata, i);
- uv_auto_id[i] = VertexFormat_add_attrib(format, attrib_name, COMP_F32, 3, KEEP_FLOAT);
+ VertexFormat_add_alias(format, attrib_name);
+
+ if (i == rdata->uv_active) {
+ VertexFormat_add_alias(format, "u");
+ }
/* Tangent */
attrib_name = mesh_render_data_tangent_layer_uuid_get(rdata, i);
tangent_id[i] = VertexFormat_add_attrib(format, attrib_name, COMP_F32, 3, KEEP_FLOAT);
+
+ if (i == rdata->uv_active) {
+ VertexFormat_add_alias(format, "t");
+ }
}
for (int i = 0; i < rdata->vcol_len; i++) {
@@ -1965,7 +1964,11 @@ static VertexBuffer *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata
/* Auto layer */
if (rdata->auto_vcol[i]) {
attrib_name = mesh_render_data_vcol_auto_layer_uuid_get(rdata, i);
- vcol_auto_id[i] = VertexFormat_add_attrib(format, attrib_name, COMP_U8, 3, NORMALIZE_INT_TO_FLOAT);
+ VertexFormat_add_alias(format, attrib_name);
+ }
+
+ if (i == rdata->vcol_active) {
+ VertexFormat_add_alias(format, "c");
}
}
@@ -1992,52 +1995,18 @@ static VertexBuffer *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata
VertexBuffer_set_attrib(vbo, uv_id[j], vidx + 1, tri_uvs[1]);
VertexBuffer_set_attrib(vbo, uv_id[j], vidx + 2, tri_uvs[2]);
- /* TODO remove this when aliases will be implemented */
- VertexBuffer_set_attrib(vbo, uv_auto_id[j], vidx + 0, tri_uvs[0]);
- VertexBuffer_set_attrib(vbo, uv_auto_id[j], vidx + 1, tri_uvs[1]);
- VertexBuffer_set_attrib(vbo, uv_auto_id[j], vidx + 2, tri_uvs[2]);
-
mesh_render_data_looptri_tans_get(rdata, i, j, &tri_tans);
VertexBuffer_set_attrib(vbo, tangent_id[j], vidx + 0, tri_tans[0]);
VertexBuffer_set_attrib(vbo, tangent_id[j], vidx + 1, tri_tans[1]);
VertexBuffer_set_attrib(vbo, tangent_id[j], vidx + 2, tri_tans[2]);
}
- /* TODO remove this when aliases will be implemented */
- if (rdata->uv_len != 0) {
- mesh_render_data_looptri_uvs_get(rdata, i, rdata->uv_active, &tri_uvs);
- VertexBuffer_set_attrib(vbo, active_uv_id, vidx + 0, tri_uvs[0]);
- VertexBuffer_set_attrib(vbo, active_uv_id, vidx + 1, tri_uvs[1]);
- VertexBuffer_set_attrib(vbo, active_uv_id, vidx + 2, tri_uvs[2]);
-
- mesh_render_data_looptri_tans_get(rdata, i, rdata->tangent_active, &tri_tans);
- VertexBuffer_set_attrib(vbo, active_tangent_id, vidx + 0, tri_tans[0]);
- VertexBuffer_set_attrib(vbo, active_tangent_id, vidx + 1, tri_tans[1]);
- VertexBuffer_set_attrib(vbo, active_tangent_id, vidx + 2, tri_tans[2]);
- }
-
/* VCOLs */
for (int j = 0; j < rdata->vcol_len; j++) {
mesh_render_data_looptri_cols_get(rdata, i, j, &tri_cols);
VertexBuffer_set_attrib(vbo, vcol_id[j], vidx + 0, tri_cols[0]);
VertexBuffer_set_attrib(vbo, vcol_id[j], vidx + 1, tri_cols[1]);
VertexBuffer_set_attrib(vbo, vcol_id[j], vidx + 2, tri_cols[2]);
-
- /* Auto layer */
- if (rdata->auto_vcol[j]) {
- /* TODO remove this when aliases will be implemented */
- VertexBuffer_set_attrib(vbo, vcol_auto_id[j], vidx + 0, tri_cols[0]);
- VertexBuffer_set_attrib(vbo, vcol_auto_id[j], vidx + 1, tri_cols[1]);
- VertexBuffer_set_attrib(vbo, vcol_auto_id[j], vidx + 2, tri_cols[2]);
- }
- }
-
- /* TODO remove this when aliases will be implemented */
- if (rdata->vcol_len != 0) {
- mesh_render_data_looptri_cols_get(rdata, i, rdata->vcol_active, &tri_cols);
- VertexBuffer_set_attrib(vbo, active_vcol_id, vidx + 0, tri_cols[0]);
- VertexBuffer_set_attrib(vbo, active_vcol_id, vidx + 1, tri_cols[1]);
- VertexBuffer_set_attrib(vbo, active_vcol_id, vidx + 2, tri_cols[2]);
}
/* ORCO */
@@ -2054,9 +2023,7 @@ static VertexBuffer *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata
}
MEM_freeN(uv_id);
- MEM_freeN(uv_auto_id);
MEM_freeN(vcol_id);
- MEM_freeN(vcol_auto_id);
MEM_freeN(tangent_id);
}
return cache->shaded_triangles_data;
More information about the Bf-blender-cvs
mailing list