Blender V4.3
dice.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#ifndef __SUBD_DICE_H__
6#define __SUBD_DICE_H__
7
8/* DX11 like EdgeDice implementation, with different tessellation factors for
9 * each edge for watertight tessellation, with subpatch remapping to work with
10 * DiagSplit. For more algorithm details, see the DiagSplit paper or the
11 * ARB_tessellation_shader OpenGL extension, Section 2.X.2. */
12
13#include "util/types.h"
14#include "util/vector.h"
15
16#include "subd/subpatch.h"
17
19
20class Camera;
21class Mesh;
22class Patch;
23
24struct SubdParams {
26 bool ptex;
27
34
35 SubdParams(Mesh *mesh_, bool ptex_ = false)
36 {
37 mesh = mesh_;
38 ptex = ptex_;
39
40 test_steps = 3;
42 dicing_rate = 1.0f;
43 max_level = 12;
44 camera = NULL;
45 }
46};
47
48/* EdgeDice Base */
49
50class EdgeDice {
51 public:
56 size_t tri_offset;
57
58 explicit EdgeDice(const SubdParams &params);
59
60 void reserve(int num_verts, int num_triangles);
61
62 void set_vert(Patch *patch, int index, float2 uv);
63 void add_triangle(Patch *patch, int v0, int v1, int v2);
64
65 void stitch_triangles(Subpatch &sub, int edge);
66};
67
68/* Quad EdgeDice */
69
70class QuadDice : public EdgeDice {
71 public:
72 explicit QuadDice(const SubdParams &params);
73
74 float3 eval_projected(Subpatch &sub, float u, float v);
75
76 float2 map_uv(Subpatch &sub, float u, float v);
77 void set_vert(Subpatch &sub, int index, float u, float v);
78
79 void add_grid(Subpatch &sub, int Mu, int Mv, int offset);
80
81 void set_side(Subpatch &sub, int edge);
82
83 float quad_area(const float3 &a, const float3 &b, const float3 &c, const float3 &d);
84 float scale_factor(Subpatch &sub, int Mu, int Mv);
85
86 void dice(Subpatch &sub);
87};
88
90
91#endif /* __SUBD_DICE_H__ */
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert * v
void reserve(int num_verts, int num_triangles)
Definition dice.cpp:29
void add_triangle(Patch *patch, int v0, int v1, int v2)
Definition dice.cpp:60
float3 * mesh_N
Definition dice.h:54
size_t vert_offset
Definition dice.h:55
void stitch_triangles(Subpatch &sub, int edge)
Definition dice.cpp:70
size_t tri_offset
Definition dice.h:56
float3 * mesh_P
Definition dice.h:53
SubdParams params
Definition dice.h:52
EdgeDice(const SubdParams &params)
Definition dice.cpp:15
QuadDice(const SubdParams &params)
Definition dice.cpp:122
float scale_factor(Subpatch &sub, int Mu, int Mv)
Definition dice.cpp:188
float2 map_uv(Subpatch &sub, float u, float v)
Definition dice.cpp:124
void add_grid(Subpatch &sub, int Mu, int Mv, int offset)
Definition dice.cpp:219
float3 eval_projected(Subpatch &sub, float u, float v)
Definition dice.cpp:132
void dice(Subpatch &sub)
Definition dice.cpp:245
float quad_area(const float3 &a, const float3 &b, const float3 &c, const float3 &d)
Definition dice.cpp:183
void set_side(Subpatch &sub, int edge)
Definition dice.cpp:150
local_group_size(16, 16) .push_constant(Type b
#define CCL_NAMESPACE_END
#define NULL
#define set_vert(a, b, quarter)
bool ptex
Definition dice.h:26
int max_level
Definition dice.h:31
SubdParams(Mesh *mesh_, bool ptex_=false)
Definition dice.h:35
Mesh * mesh
Definition dice.h:25
Camera * camera
Definition dice.h:32
Transform objecttoworld
Definition dice.h:33
int split_threshold
Definition dice.h:29
float dicing_rate
Definition dice.h:30
int test_steps
Definition dice.h:28