Commit: 88fddd118fbf14a4724c597e3a2278333540ec09
Author: Campbell Barton
Date: Tue Apr 11 21:19:23 2017 +1000
Branches: blender2.8
https://developer.blender.org/rB88fddd118fbf14a4724c597e3a2278333540ec09
Draw Manager: replace varargs with a pointer array
Allows to ensure correct number of args
===================================================================
M source/blender/draw/intern/DRW_render.h
M source/blender/draw/intern/draw_manager.c
===================================================================
diff --git a/source/blender/draw/intern/DRW_render.h
b/source/blender/draw/intern/DRW_render.h
index 7475e562833..a19e0c71155 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -211,7 +211,12 @@ DRWShadingGroup *DRW_shgroup_line_batch_create(struct
GPUShader *shader, DRWPass
void DRW_shgroup_free(struct DRWShadingGroup *shgroup);
void DRW_shgroup_call_add(DRWShadingGroup *shgroup, struct Batch *geom, float
(*obmat)[4]);
-void DRW_shgroup_dynamic_call_add(DRWShadingGroup *shgroup, ...);
+void DRW_shgroup_dynamic_call_add_array(DRWShadingGroup *shgroup, const void
**attr, unsigned int attr_len);
+#define DRW_shgroup_dynamic_call_add(shgroup, ...) do { \
+ const void *array[] = {__VA_ARGS__}; \
+ DRW_shgroup_dynamic_call_add_array(shgroup, array, (sizeof(array) /
sizeof(*array))); \
+} while (0)
+
void DRW_shgroup_state_set(DRWShadingGroup *shgroup, DRWState state);
void DRW_shgroup_attrib_int(DRWShadingGroup *shgroup, const char *name, int
size);
void DRW_shgroup_attrib_float(DRWShadingGroup *shgroup, const char *name, int
size);
diff --git a/source/blender/draw/intern/draw_manager.c
b/source/blender/draw/intern/draw_manager.c
index b5ed450cb0a..1260decb071 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -572,20 +572,17 @@ void DRW_shgroup_call_add(DRWShadingGroup *shgroup, Batch
*geom, float (*obmat)[
BLI_addtail(&shgroup->calls, call);
}
-void DRW_shgroup_dynamic_call_add(DRWShadingGroup *shgroup, ...)
+void DRW_shgroup_dynamic_call_add_array(DRWShadingGroup *shgroup, const void
*attr[], unsigned int attr_len)
{
- va_list params;
- int i;
DRWInterface *interface = shgroup->interface;
- int size = sizeof(ListBase) + sizeof(void *) * interface->attribs_count;
+ unsigned int data_size = sizeof(void *) * interface->attribs_count;
+ int size = sizeof(ListBase) + data_size;
DRWDynamicCall *call = MEM_callocN(size, "DRWDynamicCall");
- va_start(params, shgroup);
- for (i = 0; i < interface->attribs_count; ++i) {
- call->data[i] = va_arg(params, void *);
- }
- va_end(params);
+ BLI_assert(attr_len == interface->attribs_count);
+
+ memcpy(call->data, attr, data_size);
interface->instance_count += 1;
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs