Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-04-26 15:30:16 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-04-26 15:30:16 +0400
commit0d488c5580502575d2a1c24465aa3eaa4ad49cfc (patch)
tree2020b15c6fd656b8800535440255f2e91e53fc77 /source/blender/blenkernel/intern/CCGSubSurf.c
parent708622c7f20e206ab18ffb56db8b78c319916eda (diff)
add subsurf limits, in RNA, there were none, but subsurf would assert at 29.
Checked and subsurf level 11 gives over 3 million faces from a single triangle. So use this as a limit.
Diffstat (limited to 'source/blender/blenkernel/intern/CCGSubSurf.c')
-rw-r--r--source/blender/blenkernel/intern/CCGSubSurf.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/source/blender/blenkernel/intern/CCGSubSurf.c b/source/blender/blenkernel/intern/CCGSubSurf.c
index 292d74b03d7..a3fadcb5bbe 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf.c
+++ b/source/blender/blenkernel/intern/CCGSubSurf.c
@@ -20,6 +20,9 @@
* float.h's FLT_EPSILON causes trouble with subsurf normals - campbell */
#define EPSILON (1.0e-35f)
+/* With this limit a single triangle becomes over 3 million faces */
+#define CCGSUBSURF_LEVEL_MAX 11
+
/***/
typedef unsigned char byte;
@@ -229,7 +232,7 @@ static CCGAllocatorIFC *_getStandardAllocatorIFC(void)
int ccg_gridsize(int level)
{
BLI_assert(level > 0);
- BLI_assert(level <= 31);
+ BLI_assert(level <= CCGSUBSURF_LEVEL_MAX + 1);
return (1 << (level - 1)) + 1;
}
@@ -245,7 +248,7 @@ int ccg_factor(int low_level, int high_level)
static int ccg_edgesize(int level)
{
BLI_assert(level > 0);
- BLI_assert(level <= 30);
+ BLI_assert(level <= CCGSUBSURF_LEVEL_MAX + 1);
return 1 + (1 << level);
}
@@ -254,7 +257,7 @@ static int ccg_spacing(int high_level, int low_level)
{
BLI_assert(high_level > 0 && low_level > 0);
BLI_assert(high_level >= low_level);
- BLI_assert((high_level - low_level) <= 30);
+ BLI_assert((high_level - low_level) <= CCGSUBSURF_LEVEL_MAX);
return 1 << (high_level - low_level);
}
@@ -262,7 +265,7 @@ static int ccg_spacing(int high_level, int low_level)
static int ccg_edgebase(int level)
{
BLI_assert(level > 0);
- BLI_assert(level <= 30);
+ BLI_assert(level <= CCGSUBSURF_LEVEL_MAX + 1);
return level + (1 << level) - 1;
}