Multires: Cleanup, move utility function to a more public place

This commit is contained in:
Sergey Sharybin 2019-01-17 10:47:14 +01:00
parent a676b2b4b4
commit 9db73be975
3 changed files with 32 additions and 25 deletions

View File

@ -259,6 +259,12 @@ BLI_INLINE int BKE_subdiv_rotate_quad_to_corner(
const float quad_u, const float quad_v,
float *r_corner_u, float *r_corner_v);
/* Inverse of above. */
BLI_INLINE void BKE_subdiv_rotate_corner_to_quad(
const int corner,
const float corner_u, const float corner_v,
float *r_quad_u, float *r_quad_v);
#include "intern/subdiv_inline.h"
#endif /* __BKE_SUBDIV_H__ */

View File

@ -208,30 +208,6 @@ static void subdiv_ccg_eval_grid_element(
}
}
BLI_INLINE void rotate_corner_to_quad(
const int corner,
const float u, const float v,
float *r_u, float *r_v)
{
if (corner == 0) {
*r_u = 0.5f - v * 0.5f;
*r_v = 0.5f - u * 0.5f;
}
else if (corner == 1) {
*r_u = 0.5f + u * 0.5f;
*r_v = 0.5f - v * 0.5f;
}
else if (corner == 2) {
*r_u = 0.5f + v * 0.5f;
*r_v = 0.5f + u * 0.5f;
}
else {
BLI_assert(corner == 3);
*r_u = 0.5f - u * 0.5f;
*r_v = 0.5f + v * 0.5f;
}
}
static void subdiv_ccg_eval_regular_grid(CCGEvalGridsData *data,
const int face_index)
{
@ -251,7 +227,8 @@ static void subdiv_ccg_eval_regular_grid(CCGEvalGridsData *data,
for (int x = 0; x < grid_size; x++) {
const float grid_u = (float)x * grid_size_1_inv;
float u, v;
rotate_corner_to_quad(corner, grid_u, grid_v, &u, &v);
BKE_subdiv_rotate_corner_to_quad(
corner, grid_u, grid_v, &u, &v);
const size_t grid_element_index = (size_t)y * grid_size + x;
const size_t grid_element_offset =
grid_element_index * element_size;

View File

@ -77,4 +77,28 @@ BLI_INLINE int BKE_subdiv_rotate_quad_to_corner(
return corner;
}
BLI_INLINE void BKE_subdiv_rotate_corner_to_quad(
const int corner,
const float corner_u, const float corner_v,
float *r_quad_u, float *r_quad_v)
{
if (corner == 0) {
*r_quad_u = 0.5f - corner_v * 0.5f;
*r_quad_v = 0.5f - corner_u * 0.5f;
}
else if (corner == 1) {
*r_quad_u = 0.5f + corner_u * 0.5f;
*r_quad_v = 0.5f - corner_v * 0.5f;
}
else if (corner == 2) {
*r_quad_u = 0.5f + corner_v * 0.5f;
*r_quad_v = 0.5f + corner_u * 0.5f;
}
else {
BLI_assert(corner == 3);
*r_quad_u = 0.5f - corner_u * 0.5f;
*r_quad_v = 0.5f + corner_v * 0.5f;
}
}
#endif /* __SUBDIV_INLINE_H__ */