| 238 | } |
| 239 | |
| 240 | static void UpdateNormalOverride(EnvObject* obj, Model* model) { |
| 241 | PROFILER_ZONE(g_profiler_ctx, "UpdateNormalOverride"); |
| 242 | obj->normal_override.resize(model->faces.size() / 3); |
| 243 | obj->normal_override_custom.resize(model->faces.size() / 3, vec4(0.0f)); |
| 244 | for (int i = 0, len = obj->normal_override.size(); i < len; ++i) { |
| 245 | vec3 vert[3]; |
| 246 | for (int vert_index = 0; vert_index < 3; ++vert_index) { |
| 247 | int start = model->faces[i * 3 + vert_index] * 3; |
| 248 | for (int axis = 0; axis < 3; ++axis) { |
| 249 | vert[vert_index][axis] = model->vertices[start + axis]; |
| 250 | } |
| 251 | vert[vert_index] = obj->GetTransform() * vert[vert_index]; |
| 252 | } |
| 253 | vec3 normal = normalize(cross(vert[1] - vert[0], vert[2] - vert[0])); |
| 254 | obj->normal_override[i] = mix(normal, obj->normal_override_custom[i].xyz(), obj->normal_override_custom[i][3]); // model->face_normals[i]; |
| 255 | } |
| 256 | } |
| 257 | |
| 258 | const size_t kAttribIdCountVboInstancing = 11; |
| 259 | const size_t kAttribIdCountUboInstancing = 7; |
no test coverage detected