Blender V4.3
subdiv_inline.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2018 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#pragma once
10
11#include "BLI_assert.h"
12#include "BLI_compiler_compat.h"
13
14#include "BKE_subdiv.hh"
15
16namespace blender::bke::subdiv {
17
18BLI_INLINE void ptex_face_uv_to_grid_uv(const float ptex_u,
19 const float ptex_v,
20 float *r_grid_u,
21 float *r_grid_v)
22{
23 *r_grid_u = 1.0f - ptex_v;
24 *r_grid_v = 1.0f - ptex_u;
25}
26
27BLI_INLINE void grid_uv_to_ptex_face_uv(const float grid_u,
28 const float grid_v,
29 float *r_ptex_u,
30 float *r_ptex_v)
31{
32 *r_ptex_u = 1.0f - grid_v;
33 *r_ptex_v = 1.0f - grid_u;
34}
35
36BLI_INLINE int grid_size_from_level(const int level)
37{
38 return (1 << (level - 1)) + 1;
39}
40
41BLI_INLINE int rotate_quad_to_corner(const float quad_u,
42 const float quad_v,
43 float *r_corner_u,
44 float *r_corner_v)
45{
46 int corner;
47 if (quad_u <= 0.5f && quad_v <= 0.5f) {
48 corner = 0;
49 *r_corner_u = 2.0f * quad_u;
50 *r_corner_v = 2.0f * quad_v;
51 }
52 else if (quad_u > 0.5f && quad_v <= 0.5f) {
53 corner = 1;
54 *r_corner_u = 2.0f * quad_v;
55 *r_corner_v = 2.0f * (1.0f - quad_u);
56 }
57 else if (quad_u > 0.5f && quad_v > 0.5f) {
58 corner = 2;
59 *r_corner_u = 2.0f * (1.0f - quad_u);
60 *r_corner_v = 2.0f * (1.0f - quad_v);
61 }
62 else {
63 BLI_assert(quad_u <= 0.5f && quad_v >= 0.5f);
64 corner = 3;
65 *r_corner_u = 2.0f * (1.0f - quad_v);
66 *r_corner_v = 2.0f * quad_u;
67 }
68 return corner;
69}
70
72 const int corner, const float grid_u, const float grid_v, float *r_quad_u, float *r_quad_v)
73{
74 if (corner == 0) {
75 *r_quad_u = 0.5f - grid_v * 0.5f;
76 *r_quad_v = 0.5f - grid_u * 0.5f;
77 }
78 else if (corner == 1) {
79 *r_quad_u = 0.5f + grid_u * 0.5f;
80 *r_quad_v = 0.5f - grid_v * 0.5f;
81 }
82 else if (corner == 2) {
83 *r_quad_u = 0.5f + grid_v * 0.5f;
84 *r_quad_v = 0.5f + grid_u * 0.5f;
85 }
86 else {
87 BLI_assert(corner == 3);
88 *r_quad_u = 0.5f - grid_u * 0.5f;
89 *r_quad_v = 0.5f + grid_v * 0.5f;
90 }
91}
92
93BLI_INLINE float crease_to_sharpness(float edge_crease)
94{
95 return edge_crease * edge_crease * 10.0f;
96}
97
98} // namespace blender::bke::subdiv
#define BLI_assert(a)
Definition BLI_assert.h:50
#define BLI_INLINE
BLI_INLINE void rotate_grid_to_quad(int corner, float grid_u, float grid_v, float *r_quad_u, float *r_quad_v)
BLI_INLINE void grid_uv_to_ptex_face_uv(float grid_u, float grid_v, float *r_ptex_u, float *r_ptex_v)
BLI_INLINE void ptex_face_uv_to_grid_uv(float ptex_u, float ptex_v, float *r_grid_u, float *r_grid_v)
BLI_INLINE int grid_size_from_level(int level)
BLI_INLINE int rotate_quad_to_corner(float quad_u, float quad_v, float *r_corner_u, float *r_corner_v)
BLI_INLINE float crease_to_sharpness(float edge_crease)