[Bf-blender-cvs] [da9c2607c4b] blender2.8: DWM: Add short to float / int uniform function.

Clément Foucault noreply at git.blender.org
Tue May 23 13:51:18 CEST 2017


Commit: da9c2607c4b2e4a32f8dec3243af4696b157f4de
Author: Clément Foucault
Date:   Tue May 23 13:59:44 2017 +0200
Branches: blender2.8
https://developer.blender.org/rBda9c2607c4b2e4a32f8dec3243af4696b157f4de

DWM: Add short to float / int uniform function.

Short values are common in DNA, this enables using them directly without storing temporary float somewhere.

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

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 a48f850b987..5c1c978806b 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -288,7 +288,8 @@ void DRW_shgroup_uniform_float(DRWShadingGroup *shgroup, const char *name, const
 void DRW_shgroup_uniform_vec2(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize);
 void DRW_shgroup_uniform_vec3(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize);
 void DRW_shgroup_uniform_vec4(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize);
-void DRW_shgroup_uniform_short(DRWShadingGroup *shgroup, const char *name, const short *value, int arraysize);
+void DRW_shgroup_uniform_short_to_int(DRWShadingGroup *shgroup, const char *name, const short *value, int arraysize);
+void DRW_shgroup_uniform_short_to_float(DRWShadingGroup *shgroup, const char *name, const short *value, int arraysize);
 void DRW_shgroup_uniform_int(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize);
 void DRW_shgroup_uniform_ivec2(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize);
 void DRW_shgroup_uniform_ivec3(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize);
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index a652b9b9426..e561acca021 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -113,7 +113,8 @@ static void DRW_engines_enable_external(void);
 /* Structures */
 typedef enum {
 	DRW_UNIFORM_BOOL,
-	DRW_UNIFORM_SHORT,
+	DRW_UNIFORM_SHORT_TO_INT,
+	DRW_UNIFORM_SHORT_TO_FLOAT,
 	DRW_UNIFORM_INT,
 	DRW_UNIFORM_FLOAT,
 	DRW_UNIFORM_TEXTURE,
@@ -1036,9 +1037,14 @@ void DRW_shgroup_uniform_vec4(DRWShadingGroup *shgroup, const char *name, const
 	DRW_interface_uniform(shgroup, name, DRW_UNIFORM_FLOAT, value, 4, arraysize, 0);
 }
 
-void DRW_shgroup_uniform_short(DRWShadingGroup *shgroup, const char *name, const short *value, int arraysize)
+void DRW_shgroup_uniform_short_to_int(DRWShadingGroup *shgroup, const char *name, const short *value, int arraysize)
 {
-	DRW_interface_uniform(shgroup, name, DRW_UNIFORM_SHORT, value, 1, arraysize, 0);
+	DRW_interface_uniform(shgroup, name, DRW_UNIFORM_SHORT_TO_INT, value, 1, arraysize, 0);
+}
+
+void DRW_shgroup_uniform_short_to_float(DRWShadingGroup *shgroup, const char *name, const short *value, int arraysize)
+{
+	DRW_interface_uniform(shgroup, name, DRW_UNIFORM_SHORT_TO_FLOAT, value, 1, arraysize, 0);
 }
 
 void DRW_shgroup_uniform_int(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize)
@@ -1630,6 +1636,7 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state)
 	DRWInterface *interface = shgroup->interface;
 	GPUTexture *tex;
 	int val;
+	float fval;
 
 	if (DST.shader != shgroup->shader) {
 		if (DST.shader) GPU_shader_unbind();
@@ -1651,11 +1658,16 @@ static void draw_shgroup(DRWShadingGroup *shgroup, DRWState pass_state)
 		DRWBoundTexture *bound_tex;
 
 		switch (uni->type) {
-			case DRW_UNIFORM_SHORT:
+			case DRW_UNIFORM_SHORT_TO_INT:
 				val = (int)*((short *)uni->value);
 				GPU_shader_uniform_vector_int(
 				        shgroup->shader, uni->location, uni->length, uni->arraysize, (int *)&val);
 				break;
+			case DRW_UNIFORM_SHORT_TO_FLOAT:
+				fval = (float)*((short *)uni->value);
+				GPU_shader_uniform_vector(
+				        shgroup->shader, uni->location, uni->length, uni->arraysize, (float *)&fval);
+				break;
 			case DRW_UNIFORM_BOOL:
 			case DRW_UNIFORM_INT:
 				GPU_shader_uniform_vector_int(




More information about the Bf-blender-cvs mailing list