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:
authorAndre Susano Pinto <andresusanopinto@gmail.com>2009-08-05 18:40:38 +0400
committerAndre Susano Pinto <andresusanopinto@gmail.com>2009-08-05 18:40:38 +0400
commite4e9b569e1b766dc07ae074439a894be8d7cda49 (patch)
treec8ae6e0f28df05034c80a28076cfd2db020dad0e /source/blender/render/intern/include/rayobject.h
parentbbdba89d06496e1e9a2bc63ce0f70aac8b8cc3f3 (diff)
experiences with memory organization (store the vertexs coords on RayFace)
Diffstat (limited to 'source/blender/render/intern/include/rayobject.h')
-rw-r--r--source/blender/render/intern/include/rayobject.h30
1 files changed, 29 insertions, 1 deletions
diff --git a/source/blender/render/intern/include/rayobject.h b/source/blender/render/intern/include/rayobject.h
index 6f8debead19..dddeebd5048 100644
--- a/source/blender/render/intern/include/rayobject.h
+++ b/source/blender/render/intern/include/rayobject.h
@@ -34,6 +34,7 @@ extern "C" {
#endif
#include "RE_raytrace.h"
+#include "render_types.h"
#include <float.h>
@@ -75,16 +76,38 @@ extern "C" {
You actually don't need to care about this if you are only using the API
described on RE_raytrace.h
*/
+
+/* defines where coordinates of rayface primitives are stored */
+#define RE_RAYFACE_COORDS_LOCAL
+//#define RE_RAYFACE_COORDS_POINTER
+//#define RE_RAYFACE_COORDS_VLAKREN
typedef struct RayFace
{
+#ifdef RE_RAYFACE_COORDS_LOCAL
+ float v1[4], v2[4], v3[4], v4[3];
+ int quad;
+ void *ob;
+ void *face;
+#elif defined(RE_RAYFACE_COORDS_POINTER)
float *v1, *v2, *v3, *v4;
-
void *ob;
void *face;
+#elif defined(RE_RAYFACE_COORDS_VLAKREN)
+ void *ob;
+ void *face;
+#endif
} RayFace;
+#ifdef RE_RAYFACE_COORDS_LOCAL
+# define RE_rayface_isQuad(a) ((a)->quad)
+#elif defined(RE_RAYFACE_COORDS_POINTER)
+# define RE_rayface_isQuad(a) ((a)->v4)
+#elif defined(RE_RAYFACE_COORDS_VLAKREN)
+#endif
+
+
struct RayObject
{
struct RayObjectAPI *api;
@@ -121,6 +144,11 @@ typedef struct RayObjectAPI
#define 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
*/
void RE_rayobject_merge_bb(RayObject *ob, float *min, float *max);