29 #ifndef _ODE_COLLISION_KERNEL_H_
30 #define _ODE_COLLISION_KERNEL_H_
32 #include <ode/common.h>
33 #include <ode/contact.h>
34 #include <ode/collision.h>
42 #define NUMC_MASK (0xffff)
44 #define IS_SPACE(geom) \
45 ((geom)->type >= dFirstSpaceClass && (geom)->type <= dLastSpaceClass)
75 GEOM_ENABLE_TEST_MASK = GEOM_ENABLED | GEOM_ZERO_SIZED,
76 GEOM_ENABLE_TEST_VALUE = GEOM_ENABLED,
79 RAY_FIRSTCONTACT = 0x10000,
80 RAY_BACKFACECULL = 0x20000,
81 RAY_CLOSEST_HIT = 0x40000
84 enum dxContactMergeOptions {
86 MERGE_CONTACT_NORMALS,
112 unsigned long category_bits,collide_bits;
118 void updateZeroSizedFlag(
bool is_zero_sized) { gflags = is_zero_sized ? (gflags | GEOM_ZERO_SIZED) : (gflags & ~GEOM_ZERO_SIZED); }
120 unsigned getParentSpaceTLSKind()
const;
128 if (gflags & GEOM_POSR_BAD) {
130 gflags &= ~GEOM_POSR_BAD;
134 bool checkControlValueSizeValidity(
void *dataValue,
int *dataSize,
int iRequiresSize) {
return (*dataSize == iRequiresSize && dataValue != 0) ?
true : !(*dataSize = iRequiresSize); }
135 virtual bool controlGeometry(
int controlClass,
int controlCode,
void *dataValue,
int *dataSize);
137 virtual void computeAABB()=0;
142 virtual int AABBTest (
dxGeom *o, dReal aabb[6]);
153 void recomputeAABB() {
154 if (gflags & GEOM_AABB_BAD) {
158 gflags &= ~GEOM_AABB_BAD;
164 void spaceAdd (
dxGeom **first_ptr) {
167 if (*first_ptr) (*first_ptr)->tome = &next;
171 if (next) next->tome = tome;
177 void bodyAdd (
dxBody *b) {
195 #define dSPACE_TLS_KIND_INIT_VALUE OTK__DEFAULT
196 #define dSPACE_TLS_KIND_MANUAL_VALUE OTK_MANUALCLEANUP
198 #define dSPACE_TLS_KIND_INIT_VALUE 0
199 #define dSPACE_TLS_KIND_MANUAL_VALUE 0
224 void setCleanup (
int mode) { cleanup = (mode != 0); }
225 int getCleanup()
const {
return cleanup; }
226 void setSublevel(
int value) { sublevel = value; }
227 int getSublevel()
const {
return sublevel; }
228 void setManulCleanup(
int value) { tls_kind = (value ? dSPACE_TLS_KIND_MANUAL_VALUE : dSPACE_TLS_KIND_INIT_VALUE); }
229 int getManualCleanup()
const {
return (tls_kind == dSPACE_TLS_KIND_MANUAL_VALUE) ? 1 : 0; }
230 int query (
dxGeom *geom)
const { dAASSERT(geom);
return (geom->parent_space ==
this); }
231 int getNumGeoms()
const {
return count; }
233 virtual dxGeom *getGeom (
int i);
235 virtual void add (
dxGeom *);
236 virtual void remove (
dxGeom *);
237 virtual void dirty (
dxGeom *);
239 virtual void cleanGeoms()=0;
244 virtual void collide (
void *data,
dNearCallback *callback)=0;
252 void dInitColliders();
253 void dFinitColliders();
255 void dClearPosrCache(
void);
256 void dFinitUserClasses();
Definition: ode/src/objects.h:57
Definition: ode/src/objects.h:131
void dNearCallback(void *data, dGeomID o1, dGeomID o2)
User callback for geom-geom collision testing.
Definition: collision_space.h:49
Definition: ode/src/objects.h:126
Definition: collision_kernel.h:96
Definition: collision_kernel.h:202