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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2012-02-03 01:46:11 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2012-02-03 01:46:11 +0400
commit5c9ad8653a99d8a0aa247e63ba25d0291328535e (patch)
treee8f527c55ef190e4d04123be7f9c0b0b365cb989
parente3958015db99927329604044094be1e6d3453e2d (diff)
Fix #29921: render rasterization error in a corner case, only happened on 32bit
builds because of extended float precision, slightly tweaked code to avoid that, so that it works the same as on 64bit.
-rw-r--r--source/blender/render/intern/source/zbuf.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/source/blender/render/intern/source/zbuf.c b/source/blender/render/intern/source/zbuf.c
index a46b3791693..0d5aed7dadb 100644
--- a/source/blender/render/intern/source/zbuf.c
+++ b/source/blender/render/intern/source/zbuf.c
@@ -212,9 +212,9 @@ void fillrect(int *rect, int x, int y, int val)
}
/* based on Liang&Barsky, for clipping of pyramidical volume */
-static short cliptestf(float p, float q, float *u1, float *u2)
+static short cliptestf(float a, float b, float c, float d, float *u1, float *u2)
{
- float r;
+ float p= a + b, q= c + d, r;
if(p<0.0f) {
if(q<p) return 0;
@@ -854,20 +854,20 @@ static int clipline(float v1[4], float v2[4]) /* return 0: do not draw */
filled in with zbufwire correctly when rendering in parts. otherwise
you see line endings at edges... */
- if(cliptestf(-dz-dw, v1[3]+v1[2], &u1,&u2)) {
- if(cliptestf(dz-dw, v1[3]-v1[2], &u1,&u2)) {
+ if(cliptestf(-dz, -dw, v1[3], v1[2], &u1,&u2)) {
+ if(cliptestf(dz, -dw, v1[3], -v1[2], &u1,&u2)) {
dx= v2[0]-v1[0];
dz= 1.01f*(v2[3]-v1[3]);
v13= 1.01f*v1[3];
- if(cliptestf(-dx-dz, v1[0]+v13, &u1,&u2)) {
- if(cliptestf(dx-dz, v13-v1[0], &u1,&u2)) {
+ if(cliptestf(-dx, -dz, v1[0], v13, &u1,&u2)) {
+ if(cliptestf(dx, -dz, v13, -v1[0], &u1,&u2)) {
dy= v2[1]-v1[1];
- if(cliptestf(-dy-dz, v1[1]+v13, &u1,&u2)) {
- if(cliptestf(dy-dz, v13-v1[1], &u1,&u2)) {
+ if(cliptestf(-dy, -dz, v1[1], v13, &u1,&u2)) {
+ if(cliptestf(dy, -dz, v13, -v1[1], &u1,&u2)) {
if(u2<1.0f) {
v2[0]= v1[0]+u2*dx;
@@ -1628,8 +1628,8 @@ static void clippyra(float *labda, float *v1, float *v2, int *b2, int *b3, int a
* who would have thought that of L&B!
*/
- if(cliptestf(-da-dw, v13+v1[a], &u1,&u2)) {
- if(cliptestf(da-dw, v13-v1[a], &u1,&u2)) {
+ if(cliptestf(-da, -dw, v13, v1[a], &u1,&u2)) {
+ if(cliptestf(da, -dw, v13, -v1[a], &u1,&u2)) {
*b3=1;
if(u2<1.0f) {
labda[1]= u2;