[Bf-blender-cvs] [76eebcd] temp-derivedmesh-looptri: Merge branch 'master' into temp-derivedmesh-looptri

Antony Riakiotakis noreply at git.blender.org
Thu Jul 16 17:34:10 CEST 2015


Commit: 76eebcde3a7ae4487abb15f63d956673bc4517a3
Author: Antony Riakiotakis
Date:   Thu Jul 16 17:33:32 2015 +0200
Branches: temp-derivedmesh-looptri
https://developer.blender.org/rB76eebcde3a7ae4487abb15f63d956673bc4517a3

Merge branch 'master' into temp-derivedmesh-looptri

Conflicts:
	source/blender/gpu/GPU_buffers.h
	source/blender/gpu/intern/gpu_buffers.c

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



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

diff --cc source/blender/blenkernel/intern/cdderivedmesh.c
index 6381322,c16af7c..b7ccec2
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@@ -654,12 -666,12 +654,12 @@@ static void cdDM_drawMappedFaces
  		unsigned int *fi_map;
  
  		findex_buffer = GPU_buffer_alloc(dm->drawObject->tot_loop_verts * sizeof(int), false);
- 		fi_map = GPU_buffer_lock(findex_buffer);
+ 		fi_map = GPU_buffer_lock(findex_buffer, GPU_BINDING_ARRAY);
  
  		if (fi_map) {
 -			for (i = 0; i < dm->numTessFaceData; i++, mf++) {
 +			for (i = 0; i < totpoly; i++, mpoly++) {
  				int selcol = 0xFFFFFFFF;
 -				orig = (index_mf_to_mpoly) ? DM_origindex_mface_mpoly(index_mf_to_mpoly, index_mp_to_orig, i) : i;
 +				orig = (index_mp_to_orig) ? index_mp_to_orig[i] : i;
  
  				if ((orig != ORIGINDEX_NONE) && (!useHide || !(me->mpoly[orig].flag & ME_HIDE))) {
  					WM_framebuffer_index_get(orig + 1, &selcol);
@@@ -670,9 -686,10 +670,9 @@@
  			}
  
  			start_element = 0;
 -			mf = cddm->mface;
 +			mpoly = cddm->mpoly;
  
- 			GPU_buffer_unlock(findex_buffer);
+ 			GPU_buffer_unlock(findex_buffer, GPU_BINDING_ARRAY);
  			GPU_buffer_bind_as_color(findex_buffer);
  		}
  	}
@@@ -1058,9 -1107,14 +1058,9 @@@ static void cdDM_drawMappedFacesGLSL
  					}
  				}
  
 -				if (mface->v4) {
 -					tot_loops += 4;
 -				}
 -				else {
 -					tot_loops += 3;
 -				}
 +				tot_loops += mpoly->totloop;
  			}
- 			GPU_buffer_unlock(buffer);
+ 			GPU_buffer_unlock(buffer, GPU_BINDING_ARRAY);
  		}
  
  		for (a = 0; a < tot_active_mat; a++) {
diff --cc source/blender/gpu/GPU_buffers.h
index 3a8b71c,9c2ca6c..0176394
--- a/source/blender/gpu/GPU_buffers.h
+++ b/source/blender/gpu/GPU_buffers.h
@@@ -202,14 -212,12 +212,14 @@@ void GPU_interleaved_attrib_unbind(void
  typedef struct GPU_PBVH_Buffers GPU_PBVH_Buffers;
  
  /* build */
 -GPU_PBVH_Buffers *GPU_build_mesh_pbvh_buffers(const int (*face_vert_indices)[4],
 -        const struct MFace *mface, const struct MVert *mvert,
 -        const int *face_indices, int totface);
 +GPU_PBVH_Buffers *GPU_build_mesh_pbvh_buffers(
 +        const int (*face_vert_indices)[4],
 +        const struct MPoly *mpoly, const struct MLoop *mloop, const struct MLoopTri *looptri,
 +        const struct MVert *verts,
 +        const int *face_indices, int totprim);
  
  GPU_PBVH_Buffers *GPU_build_grid_pbvh_buffers(int *grid_indices, int totgrid,
-                                     unsigned int **grid_hidden, int gridsize);
+                                     unsigned int **grid_hidden, int gridsize, const struct CCGKey *key);
  
  GPU_PBVH_Buffers *GPU_build_bmesh_pbvh_buffers(int smooth_shading);
  
diff --cc source/blender/gpu/intern/gpu_buffers.c
index 370a11f,d30ca9f..b5ea91a
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@@ -1337,51 -1344,50 +1341,43 @@@ GPU_PBVH_Buffers *GPU_build_mesh_pbvh_b
  	/* An element index buffer is used for smooth shading, but flat
  	 * shading requires separate vertex normals so an index buffer is
  	 * can't be used there. */
- 	if (gpu_vbo_enabled() && buffers->smooth)
- 		glGenBuffersARB(1, &buffers->index_buf);
+ 	if (buffers->smooth)
+ 		buffers->index_buf = GPU_buffer_alloc(sizeof(unsigned short) * tottri * 3, false);
  
  	if (buffers->index_buf) {
- 		/* Generate index buffer object */
- 		glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, buffers->index_buf);
- 		glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB,
- 		                sizeof(unsigned short) * tottri * 3, NULL, GL_STATIC_DRAW_ARB);
- 
  		/* Fill the triangle buffer */
- 		tri_data = glMapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB);
+ 		tri_data = GPU_buffer_lock(buffers->index_buf, GPU_BINDING_INDEX);
  		if (tri_data) {
 -			for (i = 0; i < totface; ++i) {
 -				const MFace *f = mface + face_indices[i];
 -				int v[3];
 +			for (i = 0; i < looptri_num; ++i) {
 +				const MLoopTri *lt = &looptri[face_indices[i]];
  
  				/* Skip hidden faces */
 -				if (paint_is_face_hidden(f, mvert))
 +				if (paint_is_face_hidden(lt, mvert, mloop))
  					continue;
  
 -				v[0] = 0;
 -				v[1] = 1;
 -				v[2] = 2;
 -
 -				for (j = 0; j < (f->v4 ? 2 : 1); ++j) {
 -					for (k = 0; k < 3; ++k) {
 -						*tri_data = face_vert_indices[i][v[k]];
 -						tri_data++;
 -					}
 -					v[0] = 3;
 -					v[1] = 0;
 -					v[2] = 2;
 +				for (j = 0; j < 3; ++j) {
 +					*tri_data = face_vert_indices[i][j];
 +					tri_data++;
  				}
  			}
- 			glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB);
+ 			GPU_buffer_unlock(buffers->index_buf, GPU_BINDING_INDEX);
  		}
  		else {
- 			glDeleteBuffersARB(1, &buffers->index_buf);
- 			buffers->index_buf = 0;
+ 			GPU_buffer_free(buffers->index_buf);
+ 			buffers->index_buf = NULL;
  		}
  
  		glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
  	}
  
- 	if (gpu_vbo_enabled() && (buffers->index_buf || !buffers->smooth))
- 		glGenBuffersARB(1, &buffers->vert_buf);
- 
  	buffers->tot_tri = tottri;
  
 -	buffers->mface = mface;
 +	buffers->mpoly = mpoly;
 +	buffers->mloop = mloop;
 +	buffers->looptri = looptri;
 +
  	buffers->face_indices = face_indices;
 -	buffers->totface = totface;
 +	buffers->totface = looptri_num;
  
  	return buffers;
  }




More information about the Bf-blender-cvs mailing list