[Bf-blender-cvs] [77d0aec3d1f] blender2.8: Mesh Batch Cache: Use compressed format.

Clément Foucault noreply at git.blender.org
Mon May 15 17:55:42 CEST 2017


Commit: 77d0aec3d1fb2c5b8b18db9aea964d0e65b6c0ce
Author: Clément Foucault
Date:   Mon May 15 17:55:02 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB77d0aec3d1fb2c5b8b18db9aea964d0e65b6c0ce

Mesh Batch Cache: Use compressed format.

We don't compress UV by default because that would mean restricting them to [0, 1]
Leaving all other code for later settings switch.

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

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 cf8f11f6ed2..4b0c7527727 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -1630,7 +1630,7 @@ static void add_overlay_loose_vert(
 	if (vbo_nor) {
 		short *nor = mesh_render_data_vert_nor(rdata, v);
 #if USE_10_10_10
-		PackedNormal vnor = convert_i10_s3(edge_nor);
+		PackedNormal vnor = convert_i10_s3(nor);
 		VertexBuffer_set_attrib(vbo_nor, vnor_id, base_vert_idx, &vnor);
 #else
 		VertexBuffer_set_attrib(vbo_nor, vnor_id, base_vert_idx, nor);
@@ -1898,7 +1898,7 @@ void DRW_mesh_batch_cache_free(Mesh *me)
 
 /* Batch cache usage. */
 
-//#define USE_COMP_MESH_DATA
+#define USE_COMP_MESH_DATA
 static VertexBuffer *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata, MeshBatchCache *cache)
 {
 	BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOP | MR_DATATYPE_POLY));
@@ -1923,7 +1923,7 @@ static VertexBuffer *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata
 		for (int i = 0; i < rdata->uv_len; i++) {
 			/* UV */
 			attrib_name = mesh_render_data_uv_layer_uuid_get(rdata, i);
-#ifdef USE_COMP_MESH_DATA
+#if defined(USE_COMP_MESH_DATA) && 0 /* these are clamped. Maybe use them as an option in the future */
 			uv_id[i] = VertexFormat_add_attrib(format, attrib_name, COMP_I16, 2, NORMALIZE_INT_TO_FLOAT);
 #else
 			uv_id[i] = VertexFormat_add_attrib(format, attrib_name, COMP_F32, 2, KEEP_FLOAT);
@@ -1940,7 +1940,7 @@ static VertexBuffer *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata
 			/* Tangent */
 			attrib_name = mesh_render_data_tangent_layer_uuid_get(rdata, i);
 #ifdef USE_COMP_MESH_DATA
-#  if USE_10_10_10
+#  if USE_10_10_10 && 0 /* Tangents need more precision than this */
 			tangent_id[i] = VertexFormat_add_attrib(format, attrib_name, COMP_I10, 3, NORMALIZE_INT_TO_FLOAT);
 #  else
 			tangent_id[i] = VertexFormat_add_attrib(format, attrib_name, COMP_I16, 3, NORMALIZE_INT_TO_FLOAT);
@@ -1989,7 +1989,7 @@ static VertexBuffer *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata
 				for (int j = 0; j < rdata->uv_len; j++) {
 					/* UVs */
 					mesh_render_data_looptri_uvs_get(rdata, i, j, &tri_uvs);
-#ifdef USE_COMP_MESH_DATA
+#if defined(USE_COMP_MESH_DATA) && 0 /* these are clamped. Maybe use them as an option in the future */
 					short s_uvs[3][2];
 					normal_float_to_short_v2(s_uvs[0], tri_uvs[0]);
 					normal_float_to_short_v2(s_uvs[1], tri_uvs[1]);
@@ -2004,12 +2004,13 @@ static VertexBuffer *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata
 					/* Tangent */
 					mesh_render_data_looptri_tans_get(rdata, i, j, &tri_tans);
 #ifdef USE_COMP_MESH_DATA
-#  if USE_10_10_10
-					PackedNormal s_tan[3] = {
+#  if USE_10_10_10 && 0 /* Tangents need more precision than this */
+					PackedNormal s_tan_pack[3] = {
 					    convert_i10_v3(tri_tans[0]),
 					    convert_i10_v3(tri_tans[1]),
 					    convert_i10_v3(tri_tans[2])
 					};
+					PackedNormal *s_tan[3] = { &s_tan_pack[0], &s_tan_pack[1], &s_tan_pack[2] };
 #  else
 					short s_tan[3][3];
 					normal_float_to_short_v3(s_tan[0], tri_tans[0]);
@@ -2086,11 +2087,12 @@ static VertexBuffer *mesh_batch_cache_get_tri_pos_and_normals(
 			{
 				if (is_smooth) {
 #if USE_10_10_10
-					PackedNormal snor[3] = {
+					PackedNormal snor_pack[3] = {
 						convert_i10_s3(tri_vert_nors[0]),
 						convert_i10_s3(tri_vert_nors[1]),
 						convert_i10_s3(tri_vert_nors[2])
-					}
+					};
+					PackedNormal *snor[3] = { &snor_pack[0], &snor_pack[1], &snor_pack[2] };
 #else
 					short **snor = tri_vert_nors;
 #endif
@@ -2100,7 +2102,8 @@ static VertexBuffer *mesh_batch_cache_get_tri_pos_and_normals(
 				}
 				else {
 #if USE_10_10_10
-					PackedNormal snor = convert_i10_s3(tri_nor);
+					PackedNormal snor_pack = convert_i10_s3(tri_nor);
+					PackedNormal *snor = &snor_pack;
 #else
 					short *snor = tri_nor;
 #endif




More information about the Bf-blender-cvs mailing list