Differential D16893 Diff 59975 source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_attributes.cc
| Show First 20 Lines • Show All 92 Lines • ▼ Show 20 Lines | |||||
| VBOType *vbo_data, | VBOType *vbo_data, | ||||
| const DRW_AttributeRequest &request) | const DRW_AttributeRequest &request) | ||||
| { | { | ||||
| const CustomData *custom_data = get_custom_data_for_domain(mr, request.domain); | const CustomData *custom_data = get_custom_data_for_domain(mr, request.domain); | ||||
| BLI_assert(custom_data); | BLI_assert(custom_data); | ||||
| const int layer_index = request.layer_index; | const int layer_index = request.layer_index; | ||||
| const MPoly *mpoly = mr->mpoly; | const MPoly *mpoly = mr->mpoly; | ||||
| const MLoop *mloop = mr->mloop; | const int *corner_verts = mr->corner_verts; | ||||
| const int *corner_edges = mr->corner_edges; | |||||
| const AttributeType *attr_data = static_cast<const AttributeType *>( | const AttributeType *attr_data = static_cast<const AttributeType *>( | ||||
| CustomData_get_layer_n(custom_data, request.cd_type, layer_index)); | CustomData_get_layer_n(custom_data, request.cd_type, layer_index)); | ||||
| using Converter = AttributeTypeConverter<AttributeType, VBOType>; | using Converter = AttributeTypeConverter<AttributeType, VBOType>; | ||||
| switch (request.domain) { | switch (request.domain) { | ||||
| case ATTR_DOMAIN_POINT: | case ATTR_DOMAIN_POINT: | ||||
| for (int ml_index = 0; ml_index < mr->loop_len; ml_index++, vbo_data++, mloop++) { | for (int ml_index = 0; ml_index < mr->loop_len; ml_index++, vbo_data++) { | ||||
| *vbo_data = Converter::convert_value(attr_data[mloop->v]); | *vbo_data = Converter::convert_value(attr_data[corner_verts[ml_index]]); | ||||
| } | } | ||||
| break; | break; | ||||
| case ATTR_DOMAIN_CORNER: | case ATTR_DOMAIN_CORNER: | ||||
| for (int ml_index = 0; ml_index < mr->loop_len; ml_index++, vbo_data++) { | for (int ml_index = 0; ml_index < mr->loop_len; ml_index++, vbo_data++) { | ||||
| *vbo_data = Converter::convert_value(attr_data[ml_index]); | *vbo_data = Converter::convert_value(attr_data[ml_index]); | ||||
| } | } | ||||
| break; | break; | ||||
| case ATTR_DOMAIN_EDGE: | case ATTR_DOMAIN_EDGE: | ||||
| for (int ml_index = 0; ml_index < mr->loop_len; ml_index++, vbo_data++, mloop++) { | for (int ml_index = 0; ml_index < mr->loop_len; ml_index++, vbo_data++) { | ||||
| *vbo_data = Converter::convert_value(attr_data[mloop->e]); | *vbo_data = Converter::convert_value(attr_data[corner_edges[ml_index]]); | ||||
| } | } | ||||
| break; | break; | ||||
| case ATTR_DOMAIN_FACE: | case ATTR_DOMAIN_FACE: | ||||
| for (int mp_index = 0; mp_index < mr->poly_len; mp_index++) { | for (int mp_index = 0; mp_index < mr->poly_len; mp_index++) { | ||||
| const MPoly &poly = mpoly[mp_index]; | const MPoly &poly = mpoly[mp_index]; | ||||
| const VBOType value = Converter::convert_value(attr_data[mp_index]); | const VBOType value = Converter::convert_value(attr_data[mp_index]); | ||||
| for (int l = 0; l < poly.totloop; l++) { | for (int l = 0; l < poly.totloop; l++) { | ||||
| *vbo_data++ = value; | *vbo_data++ = value; | ||||
| ▲ Show 20 Lines • Show All 92 Lines • Show Last 20 Lines | |||||