Revision: 17566
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17566
Author:   campbellbarton
Date:     2008-11-25 04:39:30 +0100 (Tue, 25 Nov 2008)

Log Message:
-----------
use const where possible and removed some unneeded args (4.3% speedup)

Modified Paths:
--------------
    branches/projection-paint/source/blender/src/imagepaint.c

Modified: branches/projection-paint/source/blender/src/imagepaint.c
===================================================================
--- branches/projection-paint/source/blender/src/imagepaint.c   2008-11-25 
01:19:09 UTC (rev 17565)
+++ branches/projection-paint/source/blender/src/imagepaint.c   2008-11-25 
03:39:30 UTC (rev 17566)
@@ -482,7 +482,7 @@
 }
 
 /* fast projection bucket array lookup, use the safe version for bound 
checking  */
-static int project_bucket_offset(ProjPaintState *ps, float projCoSS[2])
+static int project_bucket_offset(const ProjPaintState *ps, const float 
projCoSS[2])
 {
        /* If we were not dealing with screenspace 2D coords we could simple 
do...
         * ps->bucketRect[x + (y*ps->buckets_y)] */
@@ -498,7 +498,7 @@
                (       (       (int)(( (projCoSS[1] - ps->screen_min[1])  / 
ps->screen_height) * ps->buckets_y)) * ps->buckets_x );
 }
 
-static int project_bucket_offset_safe(ProjPaintState *ps, float projCoSS[2])
+static int project_bucket_offset_safe(const ProjPaintState *ps, const float 
projCoSS[2])
 {
        int bucket_index = project_bucket_offset(ps, projCoSS);
        
@@ -510,7 +510,7 @@
 }
 
 /* The point must be inside the triangle */
-static void BarycentricWeightsSimple2f(float v1[2], float v2[2], float v3[2], 
float pt[2], float w[3]) {
+static void BarycentricWeightsSimple2f(const float v1[2], const float v2[2], 
const float v3[2], const float pt[2], float w[3]) {
        float wtot, wtot_inv;
        w[0] = AreaF2Dfl(v2, v3, pt);
        w[1] = AreaF2Dfl(v3, v1, pt);
@@ -528,7 +528,7 @@
 
 /* also works for points outside the triangle */
 #define SIDE_OF_LINE(pa,pb,pp) 
((pa[0]-pp[0])*(pb[1]-pp[1]))-((pb[0]-pp[0])*(pa[1]-pp[1]))
-static void BarycentricWeights2f(float v1[2], float v2[2], float v3[2], float 
pt[2], float w[3]) {
+static void BarycentricWeights2f(const float v1[2], const float v2[2], const 
float v3[2], const float pt[2], float w[3]) {
        float wtot_inv, wtot = AreaF2Dfl(v1, v2, v3);
        if (wtot > 0.0f) {
                wtot_inv = 1.0f / wtot;
@@ -552,7 +552,7 @@
 
 /* still use 2D X,Y space but this works for verts transformed by a 
perspective matrix, using their 4th component as a weight */
 
-static void BarycentricWeightsPersp2f(float v1[4], float v2[4], float v3[4], 
float pt[2], float w[3]) {
+static void BarycentricWeightsPersp2f(const float v1[4], const float v2[4], 
const float v3[4], const float pt[2], float w[3]) {
        float persp_tot, persp_tot_inv;
        BarycentricWeights2f(v1,v2,v3,pt,w);
        
@@ -571,7 +571,7 @@
        }
 }
 
-static void BarycentricWeightsSimplePersp2f(float v1[4], float v2[4], float 
v3[4], float pt[2], float w[3])
+static void BarycentricWeightsSimplePersp2f(const float v1[4], const float 
v2[4], const float v3[4], const float pt[2], float w[3])
 {
        float persp_tot_inv, persp_tot;
        BarycentricWeightsSimple2f(v1,v2,v3,pt,w);
@@ -591,20 +591,20 @@
        }
 }
 
-static void VecWeightf(float p[3], float v1[3], float v2[3], float v3[3], 
float w[3])
+static void VecWeightf(float p[3], const float v1[3], const float v2[3], const 
float v3[3], const float w[3])
 {
        p[0] = v1[0]*w[0] + v2[0]*w[1] + v3[0]*w[2];
        p[1] = v1[1]*w[0] + v2[1]*w[1] + v3[1]*w[2];
        p[2] = v1[2]*w[0] + v2[2]*w[1] + v3[2]*w[2];
 }
 
-static void Vec2Weightf(float p[3], float v1[3], float v2[3], float v3[3], 
float w[3])
+static void Vec2Weightf(float p[2], const float v1[2], const float v2[2], 
const float v3[2], const float w[3])
 {
        p[0] = v1[0]*w[0] + v2[0]*w[1] + v3[0]*w[2];
        p[1] = v1[1]*w[0] + v2[1]*w[1] + v3[1]*w[2];
 }
 
-static float tri_depth_2d(float v1[3], float v2[3], float v3[3], float pt[2], 
float w[3])
+static float tri_depth_2d(const float v1[3], const float v2[3], const float 
v3[3], const float pt[2], float w[3])
 {
        BarycentricWeightsSimple2f(v1,v2,v3,pt,w);
        return (v1[2]*w[0]) + (v2[2]*w[1]) + (v3[2]*w[2]);
@@ -612,7 +612,7 @@
 
 
 /* Return the top-most face index that the screen space coord 'pt' touches (or 
-1) */
-static int project_paint_PickFace(ProjPaintState *ps, float pt[2], float w[3], 
int *side) {
+static int project_paint_PickFace(const ProjPaintState *ps, const float pt[2], 
float w[3], int *side) {
        LinkNode *node;
        float w_tmp[3];
        float *v1, *v2, *v3, *v4;
@@ -670,7 +670,7 @@
 }
 
 /* Set the top-most face color that the screen space coord 'pt' touches (or 
return 0 if none touch) */
-static int project_paint_PickColor(ProjPaintState *ps, float pt[2], float 
*rgba_fp, unsigned char *rgba, int interp)
+static int project_paint_PickColor(const ProjPaintState *ps, const float 
pt[2], float *rgba_fp, unsigned char *rgba, const int interp)
 {
        float w[3], uv[2];
        int side;
@@ -764,7 +764,7 @@
  * -1  : no occlusion but 2D intersection is true (avoid testing the other 
half of a quad)
  *  1  : occluded */
 
-static int project_paint_occlude_ptv(float pt[3], float v1[3], float v2[3], 
float v3[3])
+static int project_paint_occlude_ptv(const float pt[3], const float v1[3], 
const float v2[3], const float v3[3])
 {
        /* if all are behind us, return false */
        if(v1[2] > pt[2] && v2[2] > pt[2] && v3[2] > pt[2])
@@ -790,8 +790,12 @@
 }
 
 
-static int project_paint_occlude_ptv_clip(ProjPaintState *ps, MFace *mf, float 
pt[3], float v1[3], float v2[3], float v3[3], int side)
-{
+static int project_paint_occlude_ptv_clip(
+               const ProjPaintState *ps, const MFace *mf,
+               const float pt[3],
+               const float v1[3], const float v2[3], const float v3[3],
+               const int side
+) {
        float w[3], wco[3];
        
        /* if all are behind us, return false */
@@ -821,7 +825,7 @@
 /* Check if a screenspace location is occluded by any other faces
  * check, pixelScreenCo must be in screenspace, its Z-Depth only needs to be 
used for comparison
  * and dosn't need to be correct in relation to X and Y coords (this is the 
case in perspective view) */
-static int project_bucket_point_occluded(ProjPaintState *ps, LinkNode 
*bucketFace, int orig_face, float pixelScreenCo[4])
+static int project_bucket_point_occluded(const ProjPaintState *ps, LinkNode 
*bucketFace, const int orig_face, const float pixelScreenCo[4])
 {
        MFace *mf;
        int face_index;
@@ -879,7 +883,7 @@
 #define ISECT_TRUE 1
 #define ISECT_TRUE_P1 2
 #define ISECT_TRUE_P2 3
-static int line_isect_y(float p1[2], float p2[2], float y_level, float 
*x_isect)
+static int line_isect_y(const float p1[2], const float p2[2], const float 
y_level, float *x_isect)
 {
        if (y_level==p1[1]) {
                *x_isect = p1[0];
@@ -901,7 +905,7 @@
        }
 }
 
-static int line_isect_x(float p1[2], float p2[2], float x_level, float 
*y_isect)
+static int line_isect_x(const float p1[2], const float p2[2], const float 
x_level, float *y_isect)
 {
        if (x_level==p1[0]) {
                *y_isect = p1[1];
@@ -924,7 +928,7 @@
 }
 
 /* simple func use for comparing UV locations to check if there are seams */
-static int cmp_uv(float vec2a[2], float vec2b[2])
+static int cmp_uv(const float vec2a[2], const float vec2b[2])
 {
        return ((fabs(vec2a[0]-vec2b[0]) < 0.0001f) && (fabs(vec2a[1]-vec2b[1]) 
< 0.0001f)) ? 1:0;
 }
@@ -932,8 +936,12 @@
 
 /* set min_px and max_px to the image space bounds of the UV coords 
  * return zero if there is no area in the returned rectangle */
-static int pixel_bounds_uv(float uv1[2], float uv2[2], float uv3[2], float 
uv4[2], int min_px[2], int max_px[2], int ibuf_x, int ibuf_y, int is_quad)
-{
+static int pixel_bounds_uv(
+               const float uv1[2], const float uv2[2], const float uv3[2], 
const float uv4[2],
+               int min_px[2], int max_px[2],
+               const int ibuf_x, const int ibuf_y,
+               int is_quad
+) {
        float min_uv[2], max_uv[2]; /* UV bounds */
        
        INIT_MINMAX2(min_uv, max_uv);
@@ -956,7 +964,7 @@
        return (min_px[0] == max_px[0] || min_px[1] == max_px[1]) ? 0 : 1;
 }
 
-static int pixel_bounds_array(float (* uv)[2], int min_px[2], int max_px[2], 
int ibuf_x, int ibuf_y, int tot)
+static int pixel_bounds_array(float (* uv)[2], int min_px[2], int max_px[2], 
const int ibuf_x, const int ibuf_y, int tot)
 {
        float min_uv[2], max_uv[2]; /* UV bounds */
        
@@ -987,18 +995,17 @@
 
 /* This function returns 1 if this face has a seam along the 2 face-vert 
indicies
  * 'orig_i1_fidx' and 'orig_i2_fidx' */
-static int check_seam(ProjPaintState *ps, int orig_face, int orig_i1_fidx, int 
orig_i2_fidx, int *other_face, int *orig_fidx)
+static int check_seam(const ProjPaintState *ps, const int orig_face, const int 
orig_i1_fidx, const int orig_i2_fidx, int *other_face, int *orig_fidx)
 {
        LinkNode *node;
        int face_index;
        int i, i1, i2;
        int i1_fidx = -1, i2_fidx = -1; /* indexi in face */
-       MFace *orig_mf, *mf;
-       MTFace *orig_tf, *tf;
+       MFace *mf;
+       MTFace *tf;
+       const MFace *orig_mf = ps->dm_mface + orig_face;  
+       const MTFace *orig_tf = ps->dm_mtface + orig_face;
        
-       orig_mf = ps->dm_mface + orig_face;
-       orig_tf = ps->dm_mtface + orig_face;
-       
        /* vert indicies from face vert order indicies */
        i1 = (*(&orig_mf->v1 + orig_i1_fidx));
        i2 = (*(&orig_mf->v1 + orig_i2_fidx));
@@ -1074,28 +1081,28 @@
 /* Calculate outset UV's, this is not the same as simply scaling the UVs,
  * since the outset coords are a margin that keep an even distance from the 
original UV's,
  * note that the image aspect is taken into account */
-static void uv_image_outset(float (*orig_uv)[2], float (*outset_uv)[2], float 
scaler, int ima_x, int ima_y, int is_quad)
+static void uv_image_outset(float (*orig_uv)[2], float (*outset_uv)[2], const 
float scaler, const int ibuf_x, const int ibuf_y, const int is_quad)
 {
        float a1,a2,a3,a4=0.0f;
        float puv[4][2]; /* pixelspace uv's */
        float no1[2], no2[2], no3[2], no4[2]; /* normals */
        float dir1[2], dir2[2], dir3[2], dir4[2];
-       float ima_x_inv = 1.0f / (float)ima_x; 
-       float ima_y_inv = 1.0f / (float)ima_y; 
+       float ibuf_x_inv = 1.0f / (float)ibuf_x; 
+       float ibuf_y_inv = 1.0f / (float)ibuf_y; 
        
        /* make UV's in pixel space so we can */
-       puv[0][0] = orig_uv[0][0] * ima_x;
-       puv[0][1] = orig_uv[0][1] * ima_y;
+       puv[0][0] = orig_uv[0][0] * ibuf_x;
+       puv[0][1] = orig_uv[0][1] * ibuf_y;
        
-       puv[1][0] = orig_uv[1][0] * ima_x;
-       puv[1][1] = orig_uv[1][1] * ima_y;
+       puv[1][0] = orig_uv[1][0] * ibuf_x;
+       puv[1][1] = orig_uv[1][1] * ibuf_y;
        
-       puv[2][0] = orig_uv[2][0] * ima_x;
-       puv[2][1] = orig_uv[2][1] * ima_y;
+       puv[2][0] = orig_uv[2][0] * ibuf_x;
+       puv[2][1] = orig_uv[2][1] * ibuf_y;
        
        if (is_quad) {
-               puv[3][0] = orig_uv[3][0] * ima_x;
-               puv[3][1] = orig_uv[3][1] * ima_y;
+               puv[3][0] = orig_uv[3][0] * ibuf_x;
+               puv[3][1] = orig_uv[3][1] * ibuf_y;
        }
        
        /* face edge directions */
@@ -1142,17 +1149,17 @@
                Vec2Addf(outset_uv[1], puv[1], no2);

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to