[Bf-blender-cvs] [33ddcf4] temp_display_optimization: Fix crash in viewport benchmark file with GLSL
Antony Riakiotakis
noreply at git.blender.org
Fri Jun 26 17:10:20 CEST 2015
Commit: 33ddcf4dc3d3de347e85894ff5ae8704b316c0a2
Author: Antony Riakiotakis
Date: Fri Jun 26 17:09:49 2015 +0200
Branches: temp_display_optimization
https://developer.blender.org/rB33ddcf4dc3d3de347e85894ff5ae8704b316c0a2
Fix crash in viewport benchmark file with GLSL
Total loops were calculated erroneously, probably due to ngon to loop
conversion.
===================================================================
M source/blender/blenkernel/intern/cdderivedmesh.c
M source/blender/gpu/GPU_buffers.h
===================================================================
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index d1e277c..1c4e4d5 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -1815,7 +1815,7 @@ static GPUDrawObject *cdDM_GPUobject_new(DerivedMesh *dm)
MFace *mface;
int totmat = dm->totmat;
GPUMaterialInfo *mat_info;
- int i, curmat, curpoint, totface;
+ int i, curmat, totelements, totface, totloops;
/* object contains at least one material (default included) so zero means uninitialized dm */
BLI_assert(totmat != 0);
@@ -1840,7 +1840,6 @@ static GPUDrawObject *cdDM_GPUobject_new(DerivedMesh *dm)
gdo = MEM_callocN(sizeof(GPUDrawObject), "GPUDrawObject");
gdo->totvert = dm->getNumVerts(dm);
gdo->totedge = dm->getNumEdges(dm);
- gdo->tot_loop_verts = dm->getNumLoops(dm);
/* count the number of materials used by this DerivedMesh */
for (i = 0; i < totmat; i++) {
@@ -1853,21 +1852,24 @@ static GPUDrawObject *cdDM_GPUobject_new(DerivedMesh *dm)
"GPUDrawObject.materials");
/* initialize the materials array */
- for (i = 0, curmat = 0, curpoint = 0; i < totmat; i++) {
+ for (i = 0, curmat = 0, totelements = 0, totloops = 0; i < totmat; i++) {
if (mat_info[i].elements > 0) {
- gdo->materials[curmat].start = curpoint;
+ gdo->materials[curmat].start = totelements;
/* can set it to points now but used in cdDM_drawobject_init_vert_points as counter */
gdo->materials[curmat].totelements = 0;
gdo->materials[curmat].totloops = mat_info[i].loops;
gdo->materials[curmat].mat_nr = i;
- curpoint += mat_info[i].elements;
+ totelements += mat_info[i].elements;
+ totloops += mat_info[i].loops;
curmat++;
}
}
+ gdo->tot_loop_verts = totloops;
+
/* store total number of points used for triangles */
- gdo->tot_triangle_point = curpoint;
+ gdo->tot_triangle_point = totelements;
gdo->triangle_to_mface = MEM_mallocN(sizeof(int) * (gdo->tot_triangle_point / 3),
"GPUDrawObject.triangle_to_mface");
diff --git a/source/blender/gpu/GPU_buffers.h b/source/blender/gpu/GPU_buffers.h
index 7f3a288..dfa1513 100644
--- a/source/blender/gpu/GPU_buffers.h
+++ b/source/blender/gpu/GPU_buffers.h
@@ -116,6 +116,7 @@ typedef struct GPUDrawObject {
int tot_triangle_point;
int tot_loose_point;
+ /* different than total loops since ngons get tesselated still */
int tot_loop_verts;
/* caches of the original DerivedMesh values */
More information about the Bf-blender-cvs
mailing list