diff options
author | Thomas Dinges <blender@dingto.org> | 2014-06-14 01:40:39 +0400 |
---|---|---|
committer | Thomas Dinges <blender@dingto.org> | 2014-06-14 01:40:54 +0400 |
commit | 0ce3a755f83b047f49f78da1729a73b56b9c9d55 (patch) | |
tree | 2223b355e1c994db2225cdf85860d9d9e652fb35 /intern/cycles/blender/blender_mesh.cpp | |
parent | 7e205836884e892995105518791ab49816da37ef (diff) |
Cycles: Add support for uchar4 attributes.
* Added support for uchar4 attributes to Cycles' attribute system.
* This is used for Vertex Colors now, which saves some memory (4 unsigned characters, instead of 4 floats).
* GPU Texture Limit on sm_20 and sm_21 decreased from 95 to 94, because we need a new texture for the uchar4 attributes. This is no problem for sm_30 or newer.
Part of my GSoC 2014.
Diffstat (limited to 'intern/cycles/blender/blender_mesh.cpp')
-rw-r--r-- | intern/cycles/blender/blender_mesh.cpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp index 27ea552c6a7..07375484a73 100644 --- a/intern/cycles/blender/blender_mesh.cpp +++ b/intern/cycles/blender/blender_mesh.cpp @@ -347,25 +347,25 @@ static void create_mesh(Scene *scene, Mesh *mesh, BL::Mesh b_mesh, const vector< continue; Attribute *attr = mesh->attributes.add( - ustring(l->name().c_str()), TypeDesc::TypeColor, ATTR_ELEMENT_CORNER); + ustring(l->name().c_str()), TypeDesc::TypeColor, ATTR_ELEMENT_CORNER_BYTE); BL::MeshColorLayer::data_iterator c; - float3 *fdata = attr->data_float3(); + uchar4 *cdata = attr->data_uchar4(); size_t i = 0; for(l->data.begin(c); c != l->data.end(); ++c, ++i) { - fdata[0] = color_srgb_to_scene_linear(get_float3(c->color1())); - fdata[1] = color_srgb_to_scene_linear(get_float3(c->color2())); - fdata[2] = color_srgb_to_scene_linear(get_float3(c->color3())); + cdata[0] = color_float_to_byte(color_srgb_to_scene_linear(get_float3(c->color1()))); + cdata[1] = color_float_to_byte(color_srgb_to_scene_linear(get_float3(c->color2()))); + cdata[2] = color_float_to_byte(color_srgb_to_scene_linear(get_float3(c->color3()))); if(nverts[i] == 4) { - fdata[3] = fdata[0]; - fdata[4] = fdata[2]; - fdata[5] = color_srgb_to_scene_linear(get_float3(c->color4())); - fdata += 6; + cdata[3] = cdata[0]; + cdata[4] = cdata[2]; + cdata[5] = color_float_to_byte(color_srgb_to_scene_linear(get_float3(c->color4()))); + cdata += 6; } else - fdata += 3; + cdata += 3; } } } |