[Bf-blender-cvs] [a556f2f] strand_gpu: Argument for enabling integer buffers when setting attributes.

Lukas Tönne noreply at git.blender.org
Tue Jul 5 09:57:25 CEST 2016


Commit: a556f2f5eca0fbf5414ec924f30f800d27bd8e4c
Author: Lukas Tönne
Date:   Tue Jul 5 08:43:04 2016 +0200
Branches: strand_gpu
https://developer.blender.org/rBa556f2f5eca0fbf5414ec924f30f800d27bd8e4c

Argument for enabling integer buffers when setting attributes.

Mesh attributes seem to be using float buffers for everything.

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

M	source/blender/blenkernel/intern/cdderivedmesh.c
M	source/blender/blenkernel/intern/subsurf_ccg.c
M	source/blender/editors/space_view3d/drawstrands.c
M	source/blender/gpu/GPU_buffers.h
M	source/blender/gpu/intern/gpu_buffers.c

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

diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index 159d5b8..3c65d22 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -1122,7 +1122,7 @@ static void cdDM_drawMappedFacesGLSL(
 
 			if (do_draw) {
 				if (matconv[a].numdata) {
-					GPU_interleaved_attrib_setup(buffer, matconv[a].datatypes, matconv[a].numdata, max_element_size);
+					GPU_interleaved_attrib_setup(buffer, matconv[a].datatypes, matconv[a].numdata, max_element_size, true);
 				}
 				GPU_buffer_draw_elements(dm->drawObject->triangles, GL_TRIANGLES,
 				                         dm->drawObject->materials[a].start, dm->drawObject->materials[a].totelements);
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index b0d1932..0069f1d 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -3145,7 +3145,7 @@ static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm,
 
 			if (do_draw) {
 				if (matconv[a].numdata) {
-					GPU_interleaved_attrib_setup(buffer, matconv[a].datatypes, matconv[a].numdata, max_element_size);
+					GPU_interleaved_attrib_setup(buffer, matconv[a].datatypes, matconv[a].numdata, max_element_size, true);
 				}
 				GPU_buffer_draw_elements(dm->drawObject->triangles, GL_TRIANGLES,
 				                         dm->drawObject->materials[a].start, dm->drawObject->materials[a].totelements);
diff --git a/source/blender/editors/space_view3d/drawstrands.c b/source/blender/editors/space_view3d/drawstrands.c
index ca07efa..f03ccae 100644
--- a/source/blender/editors/space_view3d/drawstrands.c
+++ b/source/blender/editors/space_view3d/drawstrands.c
@@ -79,7 +79,7 @@ void draw_strands(Strands *strands, StrandData *data, Object *ob, RegionView3D *
 			GPU_strand_shader_get_attributes(strands->gpu_shader, &attrib, &num_attrib);
 			
 			int elemsize = GPU_attrib_element_size(attrib, num_attrib);
-			GPU_interleaved_attrib_setup(gds->root_points, attrib, num_attrib, elemsize);
+			GPU_interleaved_attrib_setup(gds->root_points, attrib, num_attrib, elemsize, false);
 			
 			glDrawArrays(GL_POINTS, 0, gds->totroots * elemsize);
 			
diff --git a/source/blender/gpu/GPU_buffers.h b/source/blender/gpu/GPU_buffers.h
index c769f01..32f2192 100644
--- a/source/blender/gpu/GPU_buffers.h
+++ b/source/blender/gpu/GPU_buffers.h
@@ -216,7 +216,8 @@ void GPU_uvedge_setup(struct DerivedMesh *dm);
 void GPU_triangle_setup(struct DerivedMesh *dm);
 
 int GPU_attrib_element_size(GPUAttrib data[], int numdata);
-void GPU_interleaved_attrib_setup(GPUBuffer *buffer, GPUAttrib data[], int numdata, int element_size);
+void GPU_interleaved_attrib_setup(GPUBuffer *buffer, GPUAttrib data[], int numdata, int element_size,
+                                  bool use_float_buffer);
 
 void GPU_buffer_bind(GPUBuffer *buffer, GPUBindingType binding);
 void GPU_buffer_unbind(GPUBuffer *buffer, GPUBindingType binding);
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index 3439083..082c135 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -778,7 +778,8 @@ int GPU_attrib_element_size(GPUAttrib data[], int numdata)
 	return elementsize;
 }
 
-void GPU_interleaved_attrib_setup(GPUBuffer *buffer, GPUAttrib data[], int numdata, int element_size)
+void GPU_interleaved_attrib_setup(GPUBuffer *buffer, GPUAttrib data[], int numdata, int element_size,
+                                  bool use_float_buffer)
 {
 	int i;
 	int elementsize;
@@ -821,8 +822,14 @@ void GPU_interleaved_attrib_setup(GPUBuffer *buffer, GPUAttrib data[], int numda
 				case GL_UNSIGNED_INT:
 				case GL_BYTE:
 				case GL_UNSIGNED_BYTE:
-					glVertexAttribIPointer(data[i].index, data[i].size, data[i].type,
-					                       elementsize, BUFFER_OFFSET(offset));
+					if (use_float_buffer) {
+						glVertexAttribPointer(data[i].index, data[i].size, data[i].type,
+						                      GL_TRUE, elementsize, BUFFER_OFFSET(offset));
+					}
+					else {
+						glVertexAttribIPointer(data[i].index, data[i].size, data[i].type,
+						                       elementsize, BUFFER_OFFSET(offset));
+					}
 					break;
 			}
 		}




More information about the Bf-blender-cvs mailing list