[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