Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/intern/draw_pbvh.cc
| Show First 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | |||||
| { | { | ||||
| switch (type) { | switch (type) { | ||||
| case CD_PBVH_CO_TYPE: | case CD_PBVH_CO_TYPE: | ||||
| case CD_PBVH_NO_TYPE: | case CD_PBVH_NO_TYPE: | ||||
| case CD_PBVH_FSET_TYPE: | case CD_PBVH_FSET_TYPE: | ||||
| case CD_PBVH_MASK_TYPE: | case CD_PBVH_MASK_TYPE: | ||||
| case CD_PROP_COLOR: | case CD_PROP_COLOR: | ||||
| case CD_PROP_BYTE_COLOR: | case CD_PROP_BYTE_COLOR: | ||||
| case CD_MLOOPUV: | case CD_PROP_FLOAT2: | ||||
| return true; | return true; | ||||
| } | } | ||||
| return false; | return false; | ||||
| } | } | ||||
| struct PBVHVbo { | struct PBVHVbo { | ||||
| uint64_t type; | uint64_t type; | ||||
| ▲ Show 20 Lines • Show All 558 Lines • ▼ Show 20 Lines | switch (vbo.type) { | ||||
| foreach_faces( | foreach_faces( | ||||
| [&](int /*buffer_i*/, int /*tri_i*/, int /*vertex_i*/, const MLoopTri * /*tri*/) { | [&](int /*buffer_i*/, int /*tri_i*/, int /*vertex_i*/, const MLoopTri * /*tri*/) { | ||||
| *static_cast<uchar3 *>(GPU_vertbuf_raw_step(&access)) = fset_color; | *static_cast<uchar3 *>(GPU_vertbuf_raw_step(&access)) = fset_color; | ||||
| }); | }); | ||||
| } | } | ||||
| break; | break; | ||||
| } | } | ||||
| case CD_MLOOPUV: { | |||||
| MLoopUV *mloopuv = static_cast<MLoopUV *>( | |||||
| CustomData_get_layer_named(args->ldata, CD_MLOOPUV, vbo.name.c_str())); | |||||
| foreach_faces([&](int /*buffer_i*/, int tri_i, int /*vertex_i*/, const MLoopTri *tri) { | |||||
| *static_cast<float2 *>(GPU_vertbuf_raw_step(&access)) = mloopuv[tri->tri[tri_i]].uv; | |||||
| }); | |||||
| break; | |||||
| } | |||||
| case CD_PROP_COLOR: | case CD_PROP_COLOR: | ||||
| if (vbo.domain == ATTR_DOMAIN_POINT) { | if (vbo.domain == ATTR_DOMAIN_POINT) { | ||||
| MPropCol *mpropcol = static_cast<MPropCol *>( | MPropCol *mpropcol = static_cast<MPropCol *>( | ||||
| CustomData_get_layer_named(args->vdata, CD_PROP_COLOR, vbo.name.c_str())); | CustomData_get_layer_named(args->vdata, CD_PROP_COLOR, vbo.name.c_str())); | ||||
| foreach_faces( | foreach_faces( | ||||
| [&](int /*buffer_i*/, int /*tri_i*/, int vertex_i, const MLoopTri * /*tri*/) { | [&](int /*buffer_i*/, int /*tri_i*/, int vertex_i, const MLoopTri * /*tri*/) { | ||||
| ushort color[4]; | ushort color[4]; | ||||
| ▲ Show 20 Lines • Show All 205 Lines • ▼ Show 20 Lines | switch (type) { | ||||
| break; | break; | ||||
| case CD_PBVH_NO_TYPE: | case CD_PBVH_NO_TYPE: | ||||
| GPU_vertformat_attr_add(&format, "nor", GPU_COMP_I16, 3, GPU_FETCH_INT_TO_FLOAT_UNIT); | GPU_vertformat_attr_add(&format, "nor", GPU_COMP_I16, 3, GPU_FETCH_INT_TO_FLOAT_UNIT); | ||||
| break; | break; | ||||
| case CD_PROP_FLOAT2: | case CD_PROP_FLOAT2: | ||||
| GPU_vertformat_attr_add(&format, "a", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); | GPU_vertformat_attr_add(&format, "a", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); | ||||
| need_aliases = true; | need_aliases = true; | ||||
| break; | break; | ||||
| case CD_MLOOPUV: | |||||
| GPU_vertformat_attr_add(&format, "uvs", GPU_COMP_F32, 2, GPU_FETCH_FLOAT); | |||||
| need_aliases = true; | |||||
| break; | |||||
| case CD_PBVH_FSET_TYPE: | case CD_PBVH_FSET_TYPE: | ||||
| GPU_vertformat_attr_add(&format, "fset", GPU_COMP_U8, 3, GPU_FETCH_INT_TO_FLOAT_UNIT); | GPU_vertformat_attr_add(&format, "fset", GPU_COMP_U8, 3, GPU_FETCH_INT_TO_FLOAT_UNIT); | ||||
| break; | break; | ||||
| case CD_PBVH_MASK_TYPE: | case CD_PBVH_MASK_TYPE: | ||||
| GPU_vertformat_attr_add(&format, "msk", GPU_COMP_U8, 1, GPU_FETCH_INT_TO_FLOAT_UNIT); | GPU_vertformat_attr_add(&format, "msk", GPU_COMP_U8, 1, GPU_FETCH_INT_TO_FLOAT_UNIT); | ||||
| break; | break; | ||||
| case CD_PROP_FLOAT: | case CD_PROP_FLOAT: | ||||
| GPU_vertformat_attr_add(&format, "f", GPU_COMP_F32, 1, GPU_FETCH_FLOAT); | GPU_vertformat_attr_add(&format, "f", GPU_COMP_F32, 1, GPU_FETCH_FLOAT); | ||||
| Show All 23 Lines | if (need_aliases) { | ||||
| if (ELEM(type, CD_PROP_COLOR, CD_PROP_BYTE_COLOR)) { | if (ELEM(type, CD_PROP_COLOR, CD_PROP_BYTE_COLOR)) { | ||||
| prefix = "c"; | prefix = "c"; | ||||
| is_active = blender::StringRef(args->active_color) == layer->name; | is_active = blender::StringRef(args->active_color) == layer->name; | ||||
| is_render = blender::StringRef(args->render_color) == layer->name; | is_render = blender::StringRef(args->render_color) == layer->name; | ||||
| } | } | ||||
| else { | else { | ||||
| switch (type) { | switch (type) { | ||||
| case CD_MLOOPUV: | case CD_PROP_FLOAT2: | ||||
| prefix = "u"; | prefix = "u"; | ||||
| break; | break; | ||||
| default: | default: | ||||
| break; | break; | ||||
| } | } | ||||
| const char *active_name = CustomData_get_active_layer_name(cdata, type); | const char *active_name = CustomData_get_active_layer_name(cdata, type); | ||||
| const char *render_name = CustomData_get_render_layer_name(cdata, type); | const char *render_name = CustomData_get_render_layer_name(cdata, type); | ||||
| ▲ Show 20 Lines • Show All 447 Lines • Show Last 20 Lines | |||||