Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2020-05-28 02:14:45 +0300
committerClément Foucault <foucault.clem@gmail.com>2020-05-28 14:42:11 +0300
commitbf690ecd39a3ed8807bcc1330d1e7e93bd5b8304 (patch)
tree7701367c4a6abe56798c8f84f96939b55c523b41
parent68d6b73fde5885b266e6c8ce742455a82a14aea2 (diff)
DRW: Add DRW_shgroup_uniform_vec4_array_copy
-rw-r--r--source/blender/draw/intern/DRW_render.h4
-rw-r--r--source/blender/draw/intern/draw_manager_data.c18
2 files changed, 22 insertions, 0 deletions
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index c4d9396307a..e6e66eea32f 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -521,6 +521,10 @@ void DRW_shgroup_uniform_float_copy(DRWShadingGroup *shgroup, const char *name,
void DRW_shgroup_uniform_vec2_copy(DRWShadingGroup *shgroup, const char *name, const float *value);
void DRW_shgroup_uniform_vec3_copy(DRWShadingGroup *shgroup, const char *name, const float *value);
void DRW_shgroup_uniform_vec4_copy(DRWShadingGroup *shgroup, const char *name, const float *value);
+void DRW_shgroup_uniform_vec4_array_copy(DRWShadingGroup *shgroup,
+ const char *name,
+ const float (*value)[4],
+ int arraysize);
bool DRW_shgroup_is_empty(DRWShadingGroup *shgroup);
diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c
index ff27fa958ef..aa401bcffa5 100644
--- a/source/blender/draw/intern/draw_manager_data.c
+++ b/source/blender/draw/intern/draw_manager_data.c
@@ -436,6 +436,24 @@ void DRW_shgroup_uniform_vec4_copy(DRWShadingGroup *shgroup, const char *name, c
drw_shgroup_uniform(shgroup, name, DRW_UNIFORM_FLOAT_COPY, value, 4, 1);
}
+void DRW_shgroup_uniform_vec4_array_copy(DRWShadingGroup *shgroup,
+ const char *name,
+ const float (*value)[4],
+ int arraysize)
+{
+ int location = GPU_shader_get_uniform_ensure(shgroup->shader, name);
+
+ if (location == -1) {
+ /* Nice to enable eventually, for now eevee uses uniforms that might not exist. */
+ // BLI_assert(0);
+ return;
+ }
+
+ for (int i = 0; i < arraysize; i++) {
+ drw_shgroup_uniform_create_ex(shgroup, location + i, DRW_UNIFORM_FLOAT_COPY, &value[i], 4, 1);
+ }
+}
+
/** \} */
/* -------------------------------------------------------------------- */