Changeset 2353 for GTP/trunk/Lib/Vis/Preprocessing/src/VspTree.h
- Timestamp:
- 05/08/07 13:04:43 (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/Lib/Vis/Preprocessing/src/VspTree.h
r2347 r2353 1128 1128 int CompressObjects(VspLeaf *leaf); 1129 1129 1130 int TraverseRayPacket(RayPacket &rp, const bool useMailboxing); 1130 1131 1131 1132 #ifdef USE_SSE 1132 1133 struct PacketTraversalData 1133 1134 { 1135 PacketTraversalData () {} 1136 1137 PacketTraversalData (VspNode *n, 1138 const __m128 &px, const __m128 &py, const __m128 &pz, 1139 const __m128 &maxt, 1140 const __m128 &mask): 1141 mNode(n), 1142 mExitPointX4(px), mExitPointY4(py), mExitPointZ4(pz), 1143 mMaxT4(maxt), 1144 mMask4(mask) 1145 {} 1146 1134 1147 VspNode *mNode; 1135 1148 1136 union { float mExitPointX[4]; __m128 mExitPointX4; }; 1137 union { float mExitPointY[4]; __m128 mExitPointY4; }; 1138 union { float mExitPointZ[4]; __m128 mExitPointZ4; }; 1139 1140 union { float mMaxT[4]; __m128 mMaxT4; }; 1141 union { float mMask[4]; __m128 mMask4; }; 1142 1143 PacketTraversalData () {} 1144 PacketTraversalData (VspNode *n, 1145 const __m128 &px, const __m128 &py, const __m128 &pz, 1146 const __m128 &maxt, 1147 const __m128 &mask): 1148 mNode(n), 1149 mExitPointX4(px), mExitPointY4(py), mExitPointZ4(pz), 1150 mMaxT4(maxt), 1151 mMask4(mask) 1152 {} 1149 union { __m128 mExitPointX4; float mExitPointX[4]; }; 1150 union { __m128 mExitPointY4; float mExitPointY[4]; }; 1151 union { __m128 mExitPointZ4; float mExitPointZ[4]; }; 1152 1153 union { __m128 mMaxT4; float mMaxT[4]; }; 1154 union { __m128 mMask4; float mMask[4]; }; 1153 1155 }; 1154 1156 1155 1157 1156 int TraverseRayPacket(RayPacket &rp, const bool useMailboxing); 1158 struct __declspec(align(16)) PacketTraversalStack 1159 { 1160 // for performance 1161 friend class VspTree; 1162 1163 public: 1164 PacketTraversalStack(const int depth): 1165 mStackPtr(0), 1166 //mDepth(depth) 1167 mDepth(1000) 1168 { 1169 //mData = new PacketTraversalData[mDepth]; 1170 } 1171 1172 ~PacketTraversalStack() 1173 { 1174 //delete [] mData; 1175 } 1176 1177 //PacketTraversalStack() {} 1178 1179 void Pop() {-- mStackPtr;} 1180 const PacketTraversalData &Top() const { return mData[mStackPtr - 1];} 1181 1182 void Push(const PacketTraversalData &tData) 1183 { 1184 // note: faster with direct assignments 1185 mData[mStackPtr ++] = tData; 1186 //if (mStackPtr == mDepth) std::cerr << "this can never happen!!" << std::endl; 1187 } 1188 1189 bool Empty() const {return mStackPtr <= 0;} 1190 1191 protected: 1192 1193 // static array to avoid using operator new 1194 //PacketTraversalData *mData; 1195 PacketTraversalData mData[1000]; 1196 1197 int mStackPtr; 1198 int mDepth; 1199 1200 }; 1157 1201 1158 1202 #endif
Note: See TracChangeset
for help on using the changeset viewer.