[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