[Bf-blender-cvs] [f06620f82f8] soc-2019-cycles-procedural: Add Alpha output to the Vertex Color node. EEVEE only.

OmarSquircleArt noreply at git.blender.org
Thu Jul 18 21:23:11 CEST 2019


Commit: f06620f82f84e117e5e739893ba13fb2dc9d23a3
Author: OmarSquircleArt
Date:   Thu Jul 18 21:23:58 2019 +0200
Branches: soc-2019-cycles-procedural
https://developer.blender.org/rBf06620f82f84e117e5e739893ba13fb2dc9d23a3

Add Alpha output to the Vertex Color node. EEVEE only.

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

M	source/blender/draw/intern/draw_cache_impl_mesh.c
M	source/blender/gpu/intern/gpu_codegen.c
M	source/blender/gpu/shaders/gpu_shader_material.glsl
M	source/blender/nodes/shader/nodes/node_shader_vertex_color.c

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

diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 306031809d1..f1f53f3dba3 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -305,7 +305,7 @@ typedef struct MeshRenderData {
 
   float (*poly_normals)[3];
   float *vert_weight;
-  char (*vert_color)[3];
+  char (*vert_color)[4];
   GPUPackedNormal *poly_normals_pack;
   GPUPackedNormal *vert_normals_pack;
   bool *edge_select_bool;
@@ -1481,7 +1481,7 @@ static void mesh_render_data_ensure_vert_normals_pack(MeshRenderData *rdata)
 /** Ensure #MeshRenderData.vert_color */
 static void UNUSED_FUNCTION(mesh_render_data_ensure_vert_color)(MeshRenderData *rdata)
 {
-  char(*vcol)[3] = rdata->vert_color;
+  char(*vcol)[4] = rdata->vert_color;
   if (vcol == NULL) {
     if (rdata->edit_bmesh) {
       BMesh *bm = rdata->edit_bmesh->bm;
@@ -1504,6 +1504,7 @@ static void UNUSED_FUNCTION(mesh_render_data_ensure_vert_color)(MeshRenderData *
           vcol[i][0] = lcol->r;
           vcol[i][1] = lcol->g;
           vcol[i][2] = lcol->b;
+          vcol[i][3] = lcol->a;
           i += 1;
         } while ((l_iter = l_iter->next) != l_first);
       }
@@ -1520,6 +1521,7 @@ static void UNUSED_FUNCTION(mesh_render_data_ensure_vert_color)(MeshRenderData *
         vcol[i][0] = rdata->mloopcol[i].r;
         vcol[i][1] = rdata->mloopcol[i].g;
         vcol[i][2] = rdata->mloopcol[i].b;
+        vcol[i][3] = rdata->mloopcol[i].a;
       }
     }
   }
@@ -1532,6 +1534,7 @@ fallback:
     vcol[i][0] = 255;
     vcol[i][1] = 255;
     vcol[i][2] = 255;
+    vcol[i][3] = 255;
   }
 }
 
@@ -3407,7 +3410,7 @@ static void mesh_create_loop_vcol(MeshRenderData *rdata, GPUVertBuf *vbo)
   for (uint i = 0; i < vcol_len; i++) {
     const char *attr_name = mesh_render_data_vcol_layer_uuid_get(rdata, i);
     vcol_id[i] = GPU_vertformat_attr_add(
-        &format, attr_name, GPU_COMP_U8, 3, GPU_FETCH_INT_TO_FLOAT_UNIT);
+        &format, attr_name, GPU_COMP_U8, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
     /* Auto layer */
     if (rdata->cd.layers.auto_vcol[i]) {
       attr_name = mesh_render_data_vcol_auto_layer_uuid_get(rdata, i);
@@ -3439,7 +3442,7 @@ static void mesh_create_loop_vcol(MeshRenderData *rdata, GPUVertBuf *vbo)
         for (uint j = 0; j < vcol_len; j++) {
           const uint layer_offset = rdata->cd.offset.vcol[j];
           const uchar *elem = &((MLoopCol *)BM_ELEM_CD_GET_VOID_P(loop, layer_offset))->r;
-          copy_v3_v3_uchar(GPU_vertbuf_raw_step(&vcol_step[j]), elem);
+          copy_v4_v4_uchar(GPU_vertbuf_raw_step(&vcol_step[j]), elem);
         }
       }
     }
@@ -3449,7 +3452,7 @@ static void mesh_create_loop_vcol(MeshRenderData *rdata, GPUVertBuf *vbo)
       for (uint j = 0; j < vcol_len; j++) {
         const MLoopCol *layer_data = rdata->cd.layers.vcol[j];
         const uchar *elem = &layer_data[loop].r;
-        copy_v3_v3_uchar(GPU_vertbuf_raw_step(&vcol_step[j]), elem);
+        copy_v4_v4_uchar(GPU_vertbuf_raw_step(&vcol_step[j]), elem);
       }
     }
   }
diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c
index 2505a4c2117..b663e52cae4 100644
--- a/source/blender/gpu/intern/gpu_codegen.c
+++ b/source/blender/gpu/intern/gpu_codegen.c
@@ -1075,11 +1075,11 @@ static char *code_generate_vertex(ListBase *nodes, const char *vert_code, bool u
 
   BLI_dynstr_append(ds,
                     "#define USE_ATTR\n"
-                    "vec3 srgb_to_linear_attr(vec3 c) {\n"
-                    "\tc = max(c, vec3(0.0));\n"
-                    "\tvec3 c1 = c * (1.0 / 12.92);\n"
-                    "\tvec3 c2 = pow((c + 0.055) * (1.0 / 1.055), vec3(2.4));\n"
-                    "\treturn mix(c1, c2, step(vec3(0.04045), c));\n"
+                    "vec4 srgb_to_linear_attr(vec4 c) {\n"
+                    "\tc = max(c, vec4(0.0));\n"
+                    "\tvec4 c1 = c * (1.0 / 12.92);\n"
+                    "\tvec4 c2 = pow((c + 0.055) * (1.0 / 1.055), vec4(2.4));\n"
+                    "\treturn mix(c1, c2, step(vec4(0.04045), c));\n"
                     "}\n\n");
 
   /* Prototype because defined later. */
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index ae56a4ab9da..975ee94f90f 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -2410,11 +2410,11 @@ void node_volume_info(sampler3D densitySampler,
   outTemprature = (flame > 0.01) ? temperature.x + flame * (temperature.y - temperature.x) : 0.0;
 }
 
-void node_attribute(vec3 attr, out vec4 outcol, out vec3 outvec, out float outf)
+void node_attribute(vec4 attr, out vec4 outcol, out vec3 outvec, out float outfac)
 {
-  outcol = vec4(attr, 1.0);
-  outvec = attr;
-  outf = dot(vec3(1.0 / 3.0), attr);
+  outcol = attr;
+  outvec = attr.xyz;
+  outfac = dot(vec3(1.0 / 3.0), attr.xyz);
 }
 
 void node_uvmap(vec3 attr_uv, out vec3 outvec)
@@ -2422,9 +2422,10 @@ void node_uvmap(vec3 attr_uv, out vec3 outvec)
   outvec = attr_uv;
 }
 
-void node_vertex_color(vec3 vertexColor, out vec4 outColor)
+void node_vertex_color(vec4 vertexColor, out vec4 outColor, out float outAlpha)
 {
-  outColor = vec4(vertexColor, 1.0);
+  outColor = vertexColor;
+  outAlpha = vertexColor.a;
 }
 
 void tangent_orco_x(vec3 orco_in, out vec3 orco_out)
diff --git a/source/blender/nodes/shader/nodes/node_shader_vertex_color.c b/source/blender/nodes/shader/nodes/node_shader_vertex_color.c
index 257354cf508..8848fc37c66 100644
--- a/source/blender/nodes/shader/nodes/node_shader_vertex_color.c
+++ b/source/blender/nodes/shader/nodes/node_shader_vertex_color.c
@@ -21,6 +21,7 @@
 
 static bNodeSocketTemplate sh_node_vertex_color_out[] = {
     {SOCK_RGBA, 0, N_("Color")},
+    {SOCK_FLOAT, 0, N_("Alpha")},
     {-1, 0, ""},
 };



More information about the Bf-blender-cvs mailing list