Revision: 23194
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23194
Author:   jaguarandi
Date:     2009-09-13 22:59:25 +0200 (Sun, 13 Sep 2009)

Log Message:
-----------

*Ray counters (number of BB/primitive tests/hits and other raytrace counters) 
can now be enabled/disabled at compile-time.
#define RE_RAYCOUNTER (/source/blender/render/extern/include/RE_raytrace.h)

*Some other small organization on code

(will be disable as this only matters for testing and developping)

Modified Paths:
--------------
    
branches/soc-2009-jaguarandi/source/blender/render/extern/include/RE_raytrace.h
    
branches/soc-2009-jaguarandi/source/blender/render/intern/include/rayobject.h
    branches/soc-2009-jaguarandi/source/blender/render/intern/raytrace/bvh.h
    branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject.c
    
branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject_raycounter.c
    branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayshade.c
    
branches/soc-2009-jaguarandi/source/blender/render/intern/source/shadeinput.c

Added Paths:
-----------
    
branches/soc-2009-jaguarandi/source/blender/render/intern/include/raycounter.h

Modified: 
branches/soc-2009-jaguarandi/source/blender/render/extern/include/RE_raytrace.h
===================================================================
--- 
branches/soc-2009-jaguarandi/source/blender/render/extern/include/RE_raytrace.h 
    2009-09-13 19:39:04 UTC (rev 23193)
+++ 
branches/soc-2009-jaguarandi/source/blender/render/extern/include/RE_raytrace.h 
    2009-09-13 20:59:25 UTC (rev 23194)
@@ -35,50 +35,20 @@
 extern "C" {
 #endif
 
+//#define RE_RAYCOUNTER                        /* enable counters per ray, 
usefull for measuring raytrace structures performance */
 
 #define RE_RAY_LCTS_MAX_SIZE   256
 #define RT_USE_LAST_HIT                        /* last shadow hit is reused 
before raycasting on whole tree */
 //#define RT_USE_HINT                  /* last hit object is reused before 
raycasting on whole tree */
 
-#define RE_RAYCOUNTER
 
 
-#ifdef RE_RAYCOUNTER
-
-typedef struct RayCounter RayCounter;
-struct RayCounter
-{
-
-       struct
-       {
-               unsigned long long test, hit;
-               
-       } faces, bb, simd_bb, raycast, raytrace_hint, rayshadow_last_hit;
-};
-
-/* #define RE_RC_INIT(isec, shi) (isec).count = re_rc_counter+(shi).thread */
-#define RE_RC_INIT(isec, shi) (isec).raycounter = &((shi).raycounter)
-void RE_RC_INFO (RayCounter *rc);
-void RE_RC_MERGE(RayCounter *rc, RayCounter *tmp);
-#define RE_RC_COUNT(var) (var)++
-
-extern RayCounter re_rc_counter[];
-
-#else
-
-#define RE_RC_INIT(isec,shi)
-#define RE_RC_INFO(rc)
-#define RE_RC_MERGE(dest,src)
-#define        RE_RC_COUNT(var)
-       
-#endif
-
-
 /* Internals about raycasting structures can be found on intern/raytree.h */
 typedef struct RayObject RayObject;
 typedef struct Isect Isect;
 typedef struct RayHint RayHint;
 typedef struct RayTraceHint RayTraceHint;
+typedef struct RayCounter RayCounter;
 
 struct DerivedMesh;
 struct Mesh;
@@ -95,17 +65,17 @@
 /* void RE_rayobject_hint_cone(RayObject *r, RayHint *hint, float *); */
 
 /* RayObject constructors */
-
 RayObject* RE_rayobject_octree_create(int ocres, int size);
 RayObject* RE_rayobject_instance_create(RayObject *target, float 
transform[][4], void *ob, void *target_ob);
 
 RayObject* RE_rayobject_blibvh_create(int size);       /* BLI_kdopbvh.c   */
 RayObject* RE_rayobject_bvh_create(int size);          /* 
raytrace/rayobject_bvh.c */
 RayObject* RE_rayobject_vbvh_create(int size);         /* 
raytrace/rayobject_vbvh.c */
-RayObject* RE_rayobject_qbvh_create(int size);         /* 
raytrace/rayobject_vbvh.c */
-RayObject* RE_rayobject_svbvh_create(int size);                /* 
raytrace/rayobject_vbvh.c */
+RayObject* RE_rayobject_qbvh_create(int size);         /* 
raytrace/rayobject_qbvh.c */
+RayObject* RE_rayobject_svbvh_create(int size);                /* 
raytrace/rayobject_svbvh.c */
 RayObject* RE_rayobject_bih_create(int size);          /* rayobject_bih.c */
 
+
 typedef struct LCTSHint LCTSHint;
 struct LCTSHint
 {
@@ -166,7 +136,6 @@
 #ifdef RE_RAYCOUNTER
        RayCounter *raycounter;
 #endif
-       
 };
 
 /* ray types */

Added: 
branches/soc-2009-jaguarandi/source/blender/render/intern/include/raycounter.h
===================================================================
--- 
branches/soc-2009-jaguarandi/source/blender/render/intern/include/raycounter.h  
                            (rev 0)
+++ 
branches/soc-2009-jaguarandi/source/blender/render/intern/include/raycounter.h  
    2009-09-13 20:59:25 UTC (rev 23194)
@@ -0,0 +1,66 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. 
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ * The Original Code is Copyright (C) 2009 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): André Pinto.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef RE_RAYCOUNTER_H
+#define RE_RAYCOUNTER_H
+
+#include "RE_raytrace.h"
+
+
+#ifdef RE_RAYCOUNTER
+
+typedef struct RayCounter RayCounter;
+struct RayCounter
+{
+
+       struct
+       {
+               unsigned long long test, hit;
+               
+       } faces, bb, simd_bb, raycast, raytrace_hint, rayshadow_last_hit;
+};
+
+/* #define RE_RC_INIT(isec, shi) (isec).count = re_rc_counter+(shi).thread */
+#define RE_RC_INIT(isec, shi) (isec).raycounter = &((shi).raycounter)
+void RE_RC_INFO (RayCounter *rc);
+void RE_RC_MERGE(RayCounter *rc, RayCounter *tmp);
+#define RE_RC_COUNT(var) (var)++
+
+extern RayCounter re_rc_counter[];
+
+#else
+
+#      define RE_RC_INIT(isec,shi)
+#      define RE_RC_INFO(rc)
+#      define RE_RC_MERGE(dest,src)
+#      define  RE_RC_COUNT(var)
+               
+#endif
+
+
+#endif


Property changes on: 
branches/soc-2009-jaguarandi/source/blender/render/intern/include/raycounter.h
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Modified: 
branches/soc-2009-jaguarandi/source/blender/render/intern/include/rayobject.h
===================================================================
--- 
branches/soc-2009-jaguarandi/source/blender/render/intern/include/rayobject.h   
    2009-09-13 19:39:04 UTC (rev 23193)
+++ 
branches/soc-2009-jaguarandi/source/blender/render/intern/include/rayobject.h   
    2009-09-13 20:59:25 UTC (rev 23194)
@@ -67,7 +67,7 @@
                0               Self (reserved for each structure)
                1       RayFace
                2               RayObject (generic with API callbacks)
-               3               unused
+               3               RayObject_Vlak
 
        0 means it's reserved and has it own meaning inside each ray 
acceleration structure
        (this way each structure can use the allign offset to determine if a 
node represents a
@@ -77,6 +77,35 @@
        described on RE_raytrace.h
  */
 
+/* used to align a given ray object */
+#define RE_rayobject_align(o)                          
((RayObject*)(((intptr_t)o)&(~3)))
+
+/* used to unalign a given ray object */
+#define RE_rayobject_unalignRayFace(o)         ((RayObject*)(((intptr_t)o)|1))
+#define RE_rayobject_unalignRayAPI(o)          ((RayObject*)(((intptr_t)o)|2))
+#define RE_rayobject_unalignRayVlak(o)         ((RayObject*)(((intptr_t)o)|3))
+
+/* used to test the type of ray object */
+#define RE_rayobject_isAligned(o)      ((((intptr_t)o)&3) == 0)
+#define RE_rayobject_isRayFace(o)      ((((intptr_t)o)&3) == 1)
+#define RE_rayobject_isRayAPI(o)       ((((intptr_t)o)&3) == 2)
+#define RE_rayobject_isRayVlak(o)      ((((intptr_t)o)&3) == 3)
+
+
+/*
+ * This ray object represents faces directly from a given VlakRen structure.
+ * Thus allowing to save memory, but making code dependant on render structures
+typedef struct RayVlak
+{
+       struct ObjectInstanceRen *ob;
+       struct VlakRen *face;
+} RayVlak;
+ */
+
+/*
+ * This ray object represents a triangle or a quad face.
+ * All data needed to realize intersection is "localy" available.
+ */
 typedef struct RayFace
 {
        float v1[4], v2[4], v3[4], v4[3];
@@ -87,7 +116,15 @@
 } RayFace;
 
 #define RE_rayface_isQuad(a) ((a)->quad)
+/* Loads a VlakRen on a RayFace */
+void RE_rayface_from_vlak(RayFace *face, ObjectInstanceRen *obi, VlakRen *vlr);
 
+
+
+/*
+ * This rayobject represents a generic object. With it's own callbacks for 
raytrace operations.
+ * It's suitable to implement things like LOD.
+ */
 struct RayObject
 {
        struct RayObjectAPI *api;
@@ -114,18 +151,8 @@
        
 } RayObjectAPI;
 
-#define RE_rayobject_align(o)                          
((RayObject*)(((intptr_t)o)&(~3)))
-#define RE_rayobject_unalignRayFace(o)         ((RayObject*)(((intptr_t)o)|1))
-#define RE_rayobject_unalignRayAPI(o)          ((RayObject*)(((intptr_t)o)|2))
 
-#define RE_rayobject_isAligned(o)      ((((intptr_t)o)&3) == 0)
-#define RE_rayobject_isRayFace(o)      ((((intptr_t)o)&3) == 1)
-#define RE_rayobject_isRayAPI(o)       ((((intptr_t)o)&3) == 2)
 
-/*
- * Loads a VlakRen on a RayFace
- */
-void RE_rayface_from_vlak(RayFace *face, ObjectInstanceRen *obi, VlakRen *vlr);
 
 /*
  * Extend min/max coords so that the rayobject is inside them
@@ -152,6 +179,8 @@
 float RE_rayobject_cost(RayObject *r);
 
 
+
+
 #define ISECT_EPSILON ((float)FLT_EPSILON)
 
 

Modified: 
branches/soc-2009-jaguarandi/source/blender/render/intern/raytrace/bvh.h
===================================================================
--- branches/soc-2009-jaguarandi/source/blender/render/intern/raytrace/bvh.h    
2009-09-13 19:39:04 UTC (rev 23193)
+++ branches/soc-2009-jaguarandi/source/blender/render/intern/raytrace/bvh.h    
2009-09-13 20:59:25 UTC (rev 23194)
@@ -27,6 +27,7 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 #include "rayobject.h"
+#include "raycounter.h"
 #include "MEM_guardedalloc.h"
 #include "rayobject_rtbuild.h"
 #include "rayobject_hint.h"

Modified: 
branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject.c
===================================================================
--- 
branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject.c    
    2009-09-13 19:39:04 UTC (rev 23193)
+++ 
branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject.c    
    2009-09-13 20:59:25 UTC (rev 23194)
@@ -34,8 +34,8 @@
 #include "RE_raytrace.h"
 #include "render_types.h"
 #include "rayobject.h"
+#include "raycounter.h"
 
-
 /*
  * Determines the distance that the ray must travel to hit the bounding volume 
of the given node
  * Based on Tactical Optimization of Ray/Box Intersection, by Graham Fyffe

Modified: 
branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject_raycounter.c
===================================================================
--- 
branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject_raycounter.c
     2009-09-13 19:39:04 UTC (rev 23193)
+++ 
branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject_raycounter.c
     2009-09-13 20:59:25 UTC (rev 23194)
@@ -27,6 +27,7 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 #include "rayobject.h"
+#include "raycounter.h"
 
 #ifdef RE_RAYCOUNTER
 

Modified: 
branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayshade.c
===================================================================
--- branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayshade.c 
2009-09-13 19:39:04 UTC (rev 23193)
+++ branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayshade.c 
2009-09-13 20:59:25 UTC (rev 23194)

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to