This repository has been archived on 2023-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blender-archive/source/blender/blenkernel/intern/subdiv_inline.h
Campbell Barton c434782e3a File headers: SPDX License migration
Use a shorter/simpler license convention, stops the header taking so
much space.

Follow the SPDX license specification: https://spdx.org/licenses

- C/C++/objc/objc++
- Python
- Shell Scripts
- CMake, GNUmakefile

While most of the source tree has been included

- `./extern/` was left out.
- `./intern/cycles` & `./intern/atomic` are also excluded because they
  use different header conventions.

doc/license/SPDX-license-identifiers.txt has been added to list SPDX all
used identifiers.

See P2788 for the script that automated these edits.

Reviewed By: brecht, mont29, sergey

Ref D14069
2022-02-11 09:14:36 +11:00

100 lines
2.7 KiB
C++

/* SPDX-License-Identifier: GPL-2.0-or-later
* Copyright 2018 Blender Foundation. All rights reserved. */
/** \file
* \ingroup bke
*/
#pragma once
#include "BLI_assert.h"
#include "BLI_compiler_compat.h"
#include "BKE_subdiv.h"
BLI_INLINE void BKE_subdiv_ptex_face_uv_to_grid_uv(const float ptex_u,
const float ptex_v,
float *r_grid_u,
float *r_grid_v)
{
*r_grid_u = 1.0f - ptex_v;
*r_grid_v = 1.0f - ptex_u;
}
BLI_INLINE void BKE_subdiv_grid_uv_to_ptex_face_uv(const float grid_u,
const float grid_v,
float *r_ptex_u,
float *r_ptex_v)
{
*r_ptex_u = 1.0f - grid_v;
*r_ptex_v = 1.0f - grid_u;
}
BLI_INLINE int BKE_subdiv_grid_size_from_level(const int level)
{
return (1 << (level - 1)) + 1;
}
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)
{
int corner;
if (quad_u <= 0.5f && quad_v <= 0.5f) {
corner = 0;
*r_corner_u = 2.0f * quad_u;
*r_corner_v = 2.0f * quad_v;
}
else if (quad_u > 0.5f && quad_v <= 0.5f) {
corner = 1;
*r_corner_u = 2.0f * quad_v;
*r_corner_v = 2.0f * (1.0f - quad_u);
}
else if (quad_u > 0.5f && quad_v > 0.5f) {
corner = 2;
*r_corner_u = 2.0f * (1.0f - quad_u);
*r_corner_v = 2.0f * (1.0f - quad_v);
}
else {
BLI_assert(quad_u <= 0.5f && quad_v >= 0.5f);
corner = 3;
*r_corner_u = 2.0f * (1.0f - quad_v);
*r_corner_v = 2.0f * quad_u;
}
return corner;
}
BLI_INLINE void BKE_subdiv_rotate_grid_to_quad(
const int corner, const float grid_u, const float grid_v, float *r_quad_u, float *r_quad_v)
{
if (corner == 0) {
*r_quad_u = 0.5f - grid_v * 0.5f;
*r_quad_v = 0.5f - grid_u * 0.5f;
}
else if (corner == 1) {
*r_quad_u = 0.5f + grid_u * 0.5f;
*r_quad_v = 0.5f - grid_v * 0.5f;
}
else if (corner == 2) {
*r_quad_u = 0.5f + grid_v * 0.5f;
*r_quad_v = 0.5f + grid_u * 0.5f;
}
else {
BLI_assert(corner == 3);
*r_quad_u = 0.5f - grid_u * 0.5f;
*r_quad_v = 0.5f + grid_v * 0.5f;
}
}
BLI_INLINE float BKE_subdiv_crease_to_sharpness_f(float edge_crease)
{
return edge_crease * edge_crease * 10.0f;
}
BLI_INLINE float BKE_subdiv_crease_to_sharpness_char(char edge_crease)
{
const float edge_crease_f = edge_crease / 255.0f;
return BKE_subdiv_crease_to_sharpness_f(edge_crease_f);
}