[DEV] continue removing stl

This commit is contained in:
Edouard DUPIN 2017-08-28 00:09:59 +02:00
parent 8b4f2f2865
commit d22ad84b61
99 changed files with 503 additions and 503 deletions

View File

@ -168,7 +168,7 @@ void CollisionDetection::computeNarrowPhase() {
(shape1->getCollisionCategoryBits() & shape2->getCollideWithMaskBits()) == 0) || (shape1->getCollisionCategoryBits() & shape2->getCollideWithMaskBits()) == 0) ||
!m_broadPhaseAlgorithm.testOverlappingShapes(shape1, shape2)) { !m_broadPhaseAlgorithm.testOverlappingShapes(shape1, shape2)) {
std::map<overlappingpairid, OverlappingPair*>::iterator itToRemove = it; etk::Map<overlappingpairid, OverlappingPair*>::iterator itToRemove = it;
++it; ++it;
// TODO : Remove all the contact manifold of the overlapping pair from the contact manifolds list of the two bodies involved // TODO : Remove all the contact manifold of the overlapping pair from the contact manifolds list of the two bodies involved
@ -271,7 +271,7 @@ void CollisionDetection::computeNarrowPhaseBetweenShapes(CollisionCallback* call
(shape1->getCollisionCategoryBits() & shape2->getCollideWithMaskBits()) == 0) || (shape1->getCollisionCategoryBits() & shape2->getCollideWithMaskBits()) == 0) ||
!m_broadPhaseAlgorithm.testOverlappingShapes(shape1, shape2)) { !m_broadPhaseAlgorithm.testOverlappingShapes(shape1, shape2)) {
std::map<overlappingpairid, OverlappingPair*>::iterator itToRemove = it; etk::Map<overlappingpairid, OverlappingPair*>::iterator itToRemove = it;
++it; ++it;
// TODO : Remove all the contact manifold of the overlapping pair from the contact manifolds list of the two bodies involved // TODO : Remove all the contact manifold of the overlapping pair from the contact manifolds list of the two bodies involved
@ -357,7 +357,7 @@ void CollisionDetection::broadPhaseNotifyOverlappingPair(ProxyShape* shape1, Pro
assert(newPair != NULL); assert(newPair != NULL);
#ifndef NDEBUG #ifndef NDEBUG
std::pair<map<overlappingpairid, OverlappingPair*>::iterator, bool> check = etk::Pair<map<overlappingpairid, OverlappingPair*>::iterator, bool> check =
#endif #endif
m_overlappingPairs.insert(make_pair(pairID, newPair)); m_overlappingPairs.insert(make_pair(pairID, newPair));
assert(check.second); assert(check.second);
@ -371,11 +371,11 @@ void CollisionDetection::broadPhaseNotifyOverlappingPair(ProxyShape* shape1, Pro
void CollisionDetection::removeProxyCollisionShape(ProxyShape* proxyShape) { void CollisionDetection::removeProxyCollisionShape(ProxyShape* proxyShape) {
// Remove all the overlapping pairs involving this proxy shape // Remove all the overlapping pairs involving this proxy shape
std::map<overlappingpairid, OverlappingPair*>::iterator it; etk::Map<overlappingpairid, OverlappingPair*>::iterator it;
for (it = m_overlappingPairs.begin(); it != m_overlappingPairs.end(); ) { for (it = m_overlappingPairs.begin(); it != m_overlappingPairs.end(); ) {
if (it->second->getShape1()->m_broadPhaseID == proxyShape->m_broadPhaseID|| if (it->second->getShape1()->m_broadPhaseID == proxyShape->m_broadPhaseID||
it->second->getShape2()->m_broadPhaseID == proxyShape->m_broadPhaseID) { it->second->getShape2()->m_broadPhaseID == proxyShape->m_broadPhaseID) {
std::map<overlappingpairid, OverlappingPair*>::iterator itToRemove = it; etk::Map<overlappingpairid, OverlappingPair*>::iterator itToRemove = it;
++it; ++it;
// TODO : Remove all the contact manifold of the overlapping pair from the contact manifolds list of the two bodies involved // TODO : Remove all the contact manifold of the overlapping pair from the contact manifolds list of the two bodies involved
@ -431,7 +431,7 @@ void CollisionDetection::createContact(OverlappingPair* overlappingPair,
void CollisionDetection::addAllContactManifoldsToBodies() { void CollisionDetection::addAllContactManifoldsToBodies() {
// For each overlapping pairs in contact during the narrow-phase // For each overlapping pairs in contact during the narrow-phase
std::map<overlappingpairid, OverlappingPair*>::iterator it; etk::Map<overlappingpairid, OverlappingPair*>::iterator it;
for (it = m_contactOverlappingPairs.begin(); it != m_contactOverlappingPairs.end(); ++it) { for (it = m_contactOverlappingPairs.begin(); it != m_contactOverlappingPairs.end(); ++it) {
// Add all the contact manifolds of the pair int32_to the list of contact manifolds // Add all the contact manifolds of the pair int32_to the list of contact manifolds
@ -479,7 +479,7 @@ void CollisionDetection::addContactManifoldToBody(OverlappingPair* pair) {
void CollisionDetection::clearContactPoints() { void CollisionDetection::clearContactPoints() {
// For each overlapping pair // For each overlapping pair
std::map<overlappingpairid, OverlappingPair*>::iterator it; etk::Map<overlappingpairid, OverlappingPair*>::iterator it;
for (it = m_overlappingPairs.begin(); it != m_overlappingPairs.end(); ++it) { for (it = m_overlappingPairs.begin(); it != m_overlappingPairs.end(); ++it) {
it->second->clearContactPoints(); it->second->clearContactPoints();
} }

View File

@ -12,8 +12,8 @@
#include <ephysics/collision/narrowphase/DefaultCollisionDispatch.hpp> #include <ephysics/collision/narrowphase/DefaultCollisionDispatch.hpp>
#include <ephysics/memory/MemoryAllocator.hpp> #include <ephysics/memory/MemoryAllocator.hpp>
#include <ephysics/constraint/ContactPoint.hpp> #include <ephysics/constraint/ContactPoint.hpp>
#include <vector> #include <etk/Vector.hpp>
#include <map> #include <etk/Map.hpp>
#include <set> #include <set>
#include <utility> #include <utility>
@ -51,8 +51,8 @@ namespace ephysics {
NarrowPhaseAlgorithm* m_collisionMatrix[NB_COLLISION_SHAPE_TYPES][NB_COLLISION_SHAPE_TYPES]; //!< Collision detection matrix (algorithms to use) NarrowPhaseAlgorithm* m_collisionMatrix[NB_COLLISION_SHAPE_TYPES][NB_COLLISION_SHAPE_TYPES]; //!< Collision detection matrix (algorithms to use)
MemoryAllocator& m_memoryAllocator; //!< Reference to the memory allocator MemoryAllocator& m_memoryAllocator; //!< Reference to the memory allocator
CollisionWorld* m_world; //!< Pointer to the physics world CollisionWorld* m_world; //!< Pointer to the physics world
std::map<overlappingpairid, OverlappingPair*> m_overlappingPairs; //!< Broad-phase overlapping pairs etk::Map<overlappingpairid, OverlappingPair*> m_overlappingPairs; //!< Broad-phase overlapping pairs
std::map<overlappingpairid, OverlappingPair*> m_contactOverlappingPairs; //!< Overlapping pairs in contact (during the current Narrow-phase collision detection) etk::Map<overlappingpairid, OverlappingPair*> m_contactOverlappingPairs; //!< Overlapping pairs in contact (during the current Narrow-phase collision detection)
BroadPhaseAlgorithm m_broadPhaseAlgorithm; //!< Broad-phase algorithm BroadPhaseAlgorithm m_broadPhaseAlgorithm; //!< Broad-phase algorithm
// TODO : Delete this // TODO : Delete this
GJKAlgorithm m_narrowPhaseGJKAlgorithm; //!< Narrow-phase GJK algorithm GJKAlgorithm m_narrowPhaseGJKAlgorithm; //!< Narrow-phase GJK algorithm

View File

@ -5,7 +5,7 @@
*/ */
#pragma once #pragma once
#include <vector> #include <etk/Vector.hpp>
#include <ephysics/body/CollisionBody.hpp> #include <ephysics/body/CollisionBody.hpp>
#include <ephysics/collision/ProxyShape.hpp> #include <ephysics/collision/ProxyShape.hpp>
#include <ephysics/constraint/ContactPoint.hpp> #include <ephysics/constraint/ContactPoint.hpp>

View File

@ -4,7 +4,7 @@
* @license BSD 3 clauses (see license file) * @license BSD 3 clauses (see license file)
*/ */
#pragma once #pragma once
#include <vector> #include <etk/Vector.hpp>
#include <cassert> #include <cassert>
#include <ephysics/collision/TriangleVertexArray.hpp> #include <ephysics/collision/TriangleVertexArray.hpp>
@ -18,7 +18,7 @@ namespace ephysics {
*/ */
class TriangleMesh { class TriangleMesh {
protected: protected:
std::vector<TriangleVertexArray*> m_triangleArrays; //!< All the triangle arrays of the mesh (one triangle array per part) etk::Vector<TriangleVertexArray*> m_triangleArrays; //!< All the triangle arrays of the mesh (one triangle array per part)
public: public:
/** /**
* @brief Constructor * @brief Constructor
@ -32,7 +32,7 @@ namespace ephysics {
* @brief Add a subpart of the mesh * @brief Add a subpart of the mesh
*/ */
void addSubpart(TriangleVertexArray* _triangleVertexArray) { void addSubpart(TriangleVertexArray* _triangleVertexArray) {
m_triangleArrays.push_back(_triangleVertexArray ); m_triangleArrays.pushBack(_triangleVertexArray );
} }
/** /**
* @brief Get a pointer to a given subpart (triangle vertex array) of the mesh * @brief Get a pointer to a given subpart (triangle vertex array) of the mesh

View File

@ -8,7 +8,7 @@
#include <ephysics/collision/TriangleVertexArray.hpp> #include <ephysics/collision/TriangleVertexArray.hpp>
ephysics::TriangleVertexArray::TriangleVertexArray(const std::vector<vec3>& _vertices, std::vector<size_t> _triangles): ephysics::TriangleVertexArray::TriangleVertexArray(const etk::Vector<vec3>& _vertices, etk::Vector<size_t> _triangles):
m_vertices(_vertices), m_vertices(_vertices),
m_triangles(_triangles) { m_triangles(_triangles) {
@ -22,11 +22,11 @@ size_t ephysics::TriangleVertexArray::getNbTriangles() const {
return m_triangles.size()/3; return m_triangles.size()/3;
} }
const std::vector<vec3>& ephysics::TriangleVertexArray::getVertices() const { const etk::Vector<vec3>& ephysics::TriangleVertexArray::getVertices() const {
return m_vertices; return m_vertices;
} }
const std::vector<size_t>& ephysics::TriangleVertexArray::getIndices() const{ const etk::Vector<size_t>& ephysics::TriangleVertexArray::getIndices() const{
return m_triangles; return m_triangles;
} }

View File

@ -27,16 +27,16 @@ namespace ephysics {
*/ */
class TriangleVertexArray { class TriangleVertexArray {
protected: protected:
std::vector<vec3> m_vertices; //!< Vertice list etk::Vector<vec3> m_vertices; //!< Vertice list
std::vector<size_t> m_triangles; //!< List of triangle (3 pos for each triangle) etk::Vector<size_t> m_triangles; //!< List of triangle (3 pos for each triangle)
public: public:
/** /**
* @brief Constructor * @brief Constructor
* @param[in] _vertices List Of all vertices * @param[in] _vertices List Of all vertices
* @param[in] _triangles List of all linked points * @param[in] _triangles List of all linked points
*/ */
TriangleVertexArray(const std::vector<vec3>& _vertices, TriangleVertexArray(const etk::Vector<vec3>& _vertices,
std::vector<size_t> _triangles); etk::Vector<size_t> _triangles);
/** /**
* @brief Get the number of vertices * @brief Get the number of vertices
* @return Number of vertices * @return Number of vertices
@ -51,12 +51,12 @@ namespace ephysics {
* @brief Get The table of the vertices * @brief Get The table of the vertices
* @return reference on the vertices * @return reference on the vertices
*/ */
const std::vector<vec3>& getVertices() const; const etk::Vector<vec3>& getVertices() const;
/** /**
* @brief Get The table of the triangle indice * @brief Get The table of the triangle indice
* @return reference on the triangle indice * @return reference on the triangle indice
*/ */
const std::vector<size_t>& getIndices() const; const etk::Vector<size_t>& getIndices() const;
/** /**
* @brief Get a triangle at the specific ID * @brief Get a triangle at the specific ID
* @return Buffer of 3 points * @return Buffer of 3 points

View File

@ -225,8 +225,8 @@ void BroadPhaseAlgorithm::notifyOverlappingNodes(int32_t node1ID, int32_t node2I
} }
// Add the new potential pair int32_to the array of potential overlapping pairs // Add the new potential pair int32_to the array of potential overlapping pairs
m_potentialPairs[m_numberPotentialPairs].collisionShape1ID = std::min(node1ID, node2ID); m_potentialPairs[m_numberPotentialPairs].collisionShape1ID = etk::min(node1ID, node2ID);
m_potentialPairs[m_numberPotentialPairs].collisionShape2ID = std::max(node1ID, node2ID); m_potentialPairs[m_numberPotentialPairs].collisionShape2ID = etk::max(node1ID, node2ID);
m_numberPotentialPairs++; m_numberPotentialPairs++;
} }

View File

@ -5,7 +5,7 @@
*/ */
#pragma once #pragma once
#include <vector> #include <etk/Vector.hpp>
#include <ephysics/body/CollisionBody.hpp> #include <ephysics/body/CollisionBody.hpp>
#include <ephysics/collision/ProxyShape.hpp> #include <ephysics/collision/ProxyShape.hpp>
#include <ephysics/collision/broadphase/DynamicAABBTree.hpp> #include <ephysics/collision/broadphase/DynamicAABBTree.hpp>

View File

@ -314,7 +314,7 @@ void DynamicAABBTree::insertLeafNode(int32_t _nodeID) {
assert(rightChild != TreeNode::NULL_TREE_NODE); assert(rightChild != TreeNode::NULL_TREE_NODE);
// Recompute the height of the node in the tree // Recompute the height of the node in the tree
m_nodes[currentNodeID].height = std::max(m_nodes[leftChild].height, m_nodes[currentNodeID].height = etk::max(m_nodes[leftChild].height,
m_nodes[rightChild].height) + 1; m_nodes[rightChild].height) + 1;
assert(m_nodes[currentNodeID].height > 0); assert(m_nodes[currentNodeID].height > 0);
@ -380,7 +380,7 @@ void DynamicAABBTree::removeLeafNode(int32_t _nodeID) {
// Recompute the AABB and the height of the current node // Recompute the AABB and the height of the current node
m_nodes[currentNodeID].aabb.mergeTwoAABBs(m_nodes[leftChildID].aabb, m_nodes[currentNodeID].aabb.mergeTwoAABBs(m_nodes[leftChildID].aabb,
m_nodes[rightChildID].aabb); m_nodes[rightChildID].aabb);
m_nodes[currentNodeID].height = std::max(m_nodes[leftChildID].height, m_nodes[currentNodeID].height = etk::max(m_nodes[leftChildID].height,
m_nodes[rightChildID].height) + 1; m_nodes[rightChildID].height) + 1;
assert(m_nodes[currentNodeID].height > 0); assert(m_nodes[currentNodeID].height > 0);
@ -468,8 +468,8 @@ int32_t DynamicAABBTree::balanceSubTreeAtNode(int32_t _nodeID) {
nodeC->aabb.mergeTwoAABBs(nodeA->aabb, nodeF->aabb); nodeC->aabb.mergeTwoAABBs(nodeA->aabb, nodeF->aabb);
// Recompute the height of node A and C // Recompute the height of node A and C
nodeA->height = std::max(nodeB->height, nodeG->height) + 1; nodeA->height = etk::max(nodeB->height, nodeG->height) + 1;
nodeC->height = std::max(nodeA->height, nodeF->height) + 1; nodeC->height = etk::max(nodeA->height, nodeF->height) + 1;
assert(nodeA->height > 0); assert(nodeA->height > 0);
assert(nodeC->height > 0); assert(nodeC->height > 0);
} }
@ -483,8 +483,8 @@ int32_t DynamicAABBTree::balanceSubTreeAtNode(int32_t _nodeID) {
nodeC->aabb.mergeTwoAABBs(nodeA->aabb, nodeG->aabb); nodeC->aabb.mergeTwoAABBs(nodeA->aabb, nodeG->aabb);
// Recompute the height of node A and C // Recompute the height of node A and C
nodeA->height = std::max(nodeB->height, nodeF->height) + 1; nodeA->height = etk::max(nodeB->height, nodeF->height) + 1;
nodeC->height = std::max(nodeA->height, nodeG->height) + 1; nodeC->height = etk::max(nodeA->height, nodeG->height) + 1;
assert(nodeA->height > 0); assert(nodeA->height > 0);
assert(nodeC->height > 0); assert(nodeC->height > 0);
} }
@ -538,8 +538,8 @@ int32_t DynamicAABBTree::balanceSubTreeAtNode(int32_t _nodeID) {
nodeB->aabb.mergeTwoAABBs(nodeA->aabb, nodeF->aabb); nodeB->aabb.mergeTwoAABBs(nodeA->aabb, nodeF->aabb);
// Recompute the height of node A and B // Recompute the height of node A and B
nodeA->height = std::max(nodeC->height, nodeG->height) + 1; nodeA->height = etk::max(nodeC->height, nodeG->height) + 1;
nodeB->height = std::max(nodeA->height, nodeF->height) + 1; nodeB->height = etk::max(nodeA->height, nodeF->height) + 1;
assert(nodeA->height > 0); assert(nodeA->height > 0);
assert(nodeB->height > 0); assert(nodeB->height > 0);
} }
@ -553,8 +553,8 @@ int32_t DynamicAABBTree::balanceSubTreeAtNode(int32_t _nodeID) {
nodeB->aabb.mergeTwoAABBs(nodeA->aabb, nodeG->aabb); nodeB->aabb.mergeTwoAABBs(nodeA->aabb, nodeG->aabb);
// Recompute the height of node A and B // Recompute the height of node A and B
nodeA->height = std::max(nodeC->height, nodeF->height) + 1; nodeA->height = etk::max(nodeC->height, nodeF->height) + 1;
nodeB->height = std::max(nodeA->height, nodeG->height) + 1; nodeB->height = etk::max(nodeA->height, nodeG->height) + 1;
assert(nodeA->height > 0); assert(nodeA->height > 0);
assert(nodeB->height > 0); assert(nodeB->height > 0);
} }
@ -781,7 +781,7 @@ void DynamicAABBTree::checkNode(int32_t _nodeID) const {
assert(m_nodes[rightChild].parentID == _nodeID); assert(m_nodes[rightChild].parentID == _nodeID);
// Check the height of node // Check the height of node
int32_t height = 1 + std::max(m_nodes[leftChild].height, m_nodes[rightChild].height); int32_t height = 1 + etk::max(m_nodes[leftChild].height, m_nodes[rightChild].height);
assert(m_nodes[_nodeID].height == height); assert(m_nodes[_nodeID].height == height);
// Check the AABB of the node // Check the AABB of the node
@ -816,7 +816,7 @@ int32_t DynamicAABBTree::computeHeight(int32_t _nodeID) {
int32_t rightHeight = computeHeight(node->children[1]); int32_t rightHeight = computeHeight(node->children[1]);
// Return the height of the node // Return the height of the node
return 1 + std::max(leftHeight, rightHeight); return 1 + etk::max(leftHeight, rightHeight);
} }
#endif #endif

View File

@ -63,7 +63,7 @@ void ConcaveVsConvexAlgorithm::testCollision(const CollisionShapeInfo& shape1Inf
// If smooth mesh collision is enabled for the concave mesh // If smooth mesh collision is enabled for the concave mesh
if (concaveShape->getIsSmoothMeshCollisionEnabled()) { if (concaveShape->getIsSmoothMeshCollisionEnabled()) {
std::vector<SmoothMeshContactInfo> contactPoints; etk::Vector<SmoothMeshContactInfo> contactPoints;
SmoothCollisionNarrowPhaseCallback smoothNarrowPhaseCallback(contactPoints); SmoothCollisionNarrowPhaseCallback smoothNarrowPhaseCallback(contactPoints);
@ -116,7 +116,7 @@ void ConvexVsTriangleCallback::testTriangle(const vec3* trianglePoints) {
// by Pierre Terdiman (http://www.codercorner.com/MeshContacts.pdf). This is used to avoid the collision // by Pierre Terdiman (http://www.codercorner.com/MeshContacts.pdf). This is used to avoid the collision
// issue with some int32_ternal edges. // issue with some int32_ternal edges.
void ConcaveVsConvexAlgorithm::processSmoothMeshCollision(OverlappingPair* overlappingPair, void ConcaveVsConvexAlgorithm::processSmoothMeshCollision(OverlappingPair* overlappingPair,
std::vector<SmoothMeshContactInfo> contactPoints, etk::Vector<SmoothMeshContactInfo> contactPoints,
NarrowPhaseCallback* narrowPhaseCallback) { NarrowPhaseCallback* narrowPhaseCallback) {
// Set with the triangle vertices already processed to void further contacts with same triangle // Set with the triangle vertices already processed to void further contacts with same triangle
@ -126,7 +126,7 @@ void ConcaveVsConvexAlgorithm::processSmoothMeshCollision(OverlappingPair* overl
std::sort(contactPoints.begin(), contactPoints.end(), ContactsDepthCompare()); std::sort(contactPoints.begin(), contactPoints.end(), ContactsDepthCompare());
// For each contact point (from smaller penetration depth to larger) // For each contact point (from smaller penetration depth to larger)
std::vector<SmoothMeshContactInfo>::const_iterator it; etk::Vector<SmoothMeshContactInfo>::const_iterator it;
for (it = contactPoints.begin(); it != contactPoints.end(); ++it) { for (it = contactPoints.begin(); it != contactPoints.end(); ++it) {
const SmoothMeshContactInfo info = *it; const SmoothMeshContactInfo info = *it;
@ -268,5 +268,5 @@ void SmoothCollisionNarrowPhaseCallback::notifyContact(OverlappingPair* overlapp
// Add the narrow-phase contact int32_to the list of contact to process for // Add the narrow-phase contact int32_to the list of contact to process for
// smooth mesh collision // smooth mesh collision
m_contactPoints.push_back(smoothContactInfo); m_contactPoints.pushBack(smoothContactInfo);
} }

View File

@ -94,10 +94,10 @@ namespace ephysics {
*/ */
class SmoothCollisionNarrowPhaseCallback : public NarrowPhaseCallback { class SmoothCollisionNarrowPhaseCallback : public NarrowPhaseCallback {
private: private:
std::vector<SmoothMeshContactInfo>& m_contactPoints; etk::Vector<SmoothMeshContactInfo>& m_contactPoints;
public: public:
// Constructor // Constructor
SmoothCollisionNarrowPhaseCallback(std::vector<SmoothMeshContactInfo>& _contactPoints): SmoothCollisionNarrowPhaseCallback(etk::Vector<SmoothMeshContactInfo>& _contactPoints):
m_contactPoints(_contactPoints) { m_contactPoints(_contactPoints) {
} }
@ -119,11 +119,11 @@ namespace ephysics {
ConcaveVsConvexAlgorithm& operator=(const ConcaveVsConvexAlgorithm& _algorithm); ConcaveVsConvexAlgorithm& operator=(const ConcaveVsConvexAlgorithm& _algorithm);
/// Process the concave triangle mesh collision using the smooth mesh collision algorithm /// Process the concave triangle mesh collision using the smooth mesh collision algorithm
void processSmoothMeshCollision(OverlappingPair* _overlappingPair, void processSmoothMeshCollision(OverlappingPair* _overlappingPair,
std::vector<SmoothMeshContactInfo> _contactPoints, etk::Vector<SmoothMeshContactInfo> _contactPoints,
NarrowPhaseCallback* _narrowPhaseCallback); NarrowPhaseCallback* _narrowPhaseCallback);
/// Add a triangle vertex int32_to the set of processed triangles /// Add a triangle vertex int32_to the set of processed triangles
void addProcessedVertex(std::unordered_multimap<int32_t, vec3>& _processTriangleVertices, const vec3& _vertex) { void addProcessedVertex(std::unordered_multimap<int32_t, vec3>& _processTriangleVertices, const vec3& _vertex) {
_processTriangleVertices.insert(std::make_pair(int32_t(_vertex.x() * _vertex.y() * _vertex.z()), _vertex)); _processTriangleVertices.insert(etk::makePair(int32_t(_vertex.x() * _vertex.y() * _vertex.z()), _vertex));
} }
/// Return true if the vertex is in the set of already processed vertices /// Return true if the vertex is in the set of already processed vertices
bool hasVertexBeenProcessed(const std::unordered_multimap<int32_t, vec3>& _processTriangleVertices, bool hasVertexBeenProcessed(const std::unordered_multimap<int32_t, vec3>& _processTriangleVertices,

View File

@ -377,7 +377,7 @@ void EPAAlgorithm::computePenetrationDepthAndContactPoints(const Simplex& simple
// Compute the error // Compute the error
float error = wDotv - triangle->getDistSquare(); float error = wDotv - triangle->getDistSquare();
if (error <= std::max(tolerance, REL_ERROR_SQUARE * wDotv) || if (error <= etk::max(tolerance, REL_ERROR_SQUARE * wDotv) ||
points[indexNewVertex] == points[(*triangle)[0]] || points[indexNewVertex] == points[(*triangle)[0]] ||
points[indexNewVertex] == points[(*triangle)[1]] || points[indexNewVertex] == points[(*triangle)[1]] ||
points[indexNewVertex] == points[(*triangle)[2]]) { points[indexNewVertex] == points[(*triangle)[2]]) {

View File

@ -7,7 +7,7 @@
// Libraries // Libraries
#include <ephysics/mathematics/mathematics.hpp> #include <ephysics/mathematics/mathematics.hpp>
#include <vector> #include <etk/Vector.hpp>
/// ReactPhysics3D namespace /// ReactPhysics3D namespace
namespace ephysics { namespace ephysics {

View File

@ -32,21 +32,21 @@ AABB::AABB(const AABB& _aabb):
} }
void AABB::mergeWithAABB(const AABB& _aabb) { void AABB::mergeWithAABB(const AABB& _aabb) {
m_minCoordinates.setX(std::min(m_minCoordinates.x(), _aabb.m_minCoordinates.x())); m_minCoordinates.setX(etk::min(m_minCoordinates.x(), _aabb.m_minCoordinates.x()));
m_minCoordinates.setY(std::min(m_minCoordinates.y(), _aabb.m_minCoordinates.y())); m_minCoordinates.setY(etk::min(m_minCoordinates.y(), _aabb.m_minCoordinates.y()));
m_minCoordinates.setZ(std::min(m_minCoordinates.z(), _aabb.m_minCoordinates.z())); m_minCoordinates.setZ(etk::min(m_minCoordinates.z(), _aabb.m_minCoordinates.z()));
m_maxCoordinates.setX(std::max(m_maxCoordinates.x(), _aabb.m_maxCoordinates.x())); m_maxCoordinates.setX(etk::max(m_maxCoordinates.x(), _aabb.m_maxCoordinates.x()));
m_maxCoordinates.setY(std::max(m_maxCoordinates.y(), _aabb.m_maxCoordinates.y())); m_maxCoordinates.setY(etk::max(m_maxCoordinates.y(), _aabb.m_maxCoordinates.y()));
m_maxCoordinates.setZ(std::max(m_maxCoordinates.z(), _aabb.m_maxCoordinates.z())); m_maxCoordinates.setZ(etk::max(m_maxCoordinates.z(), _aabb.m_maxCoordinates.z()));
} }
void AABB::mergeTwoAABBs(const AABB& _aabb1, const AABB& _aabb2) { void AABB::mergeTwoAABBs(const AABB& _aabb1, const AABB& _aabb2) {
m_minCoordinates.setX(std::min(_aabb1.m_minCoordinates.x(), _aabb2.m_minCoordinates.x())); m_minCoordinates.setX(etk::min(_aabb1.m_minCoordinates.x(), _aabb2.m_minCoordinates.x()));
m_minCoordinates.setY(std::min(_aabb1.m_minCoordinates.y(), _aabb2.m_minCoordinates.y())); m_minCoordinates.setY(etk::min(_aabb1.m_minCoordinates.y(), _aabb2.m_minCoordinates.y()));
m_minCoordinates.setZ(std::min(_aabb1.m_minCoordinates.z(), _aabb2.m_minCoordinates.z())); m_minCoordinates.setZ(etk::min(_aabb1.m_minCoordinates.z(), _aabb2.m_minCoordinates.z()));
m_maxCoordinates.setX(std::max(_aabb1.m_maxCoordinates.x(), _aabb2.m_maxCoordinates.x())); m_maxCoordinates.setX(etk::max(_aabb1.m_maxCoordinates.x(), _aabb2.m_maxCoordinates.x()));
m_maxCoordinates.setY(std::max(_aabb1.m_maxCoordinates.y(), _aabb2.m_maxCoordinates.y())); m_maxCoordinates.setY(etk::max(_aabb1.m_maxCoordinates.y(), _aabb2.m_maxCoordinates.y()));
m_maxCoordinates.setZ(std::max(_aabb1.m_maxCoordinates.z(), _aabb2.m_maxCoordinates.z())); m_maxCoordinates.setZ(etk::max(_aabb1.m_maxCoordinates.z(), _aabb2.m_maxCoordinates.z()));
} }
bool AABB::contains(const AABB& _aabb) const { bool AABB::contains(const AABB& _aabb) const {

View File

@ -8,7 +8,7 @@
#include <ephysics/collision/shapes/BoxShape.hpp> #include <ephysics/collision/shapes/BoxShape.hpp>
#include <ephysics/collision/ProxyShape.hpp> #include <ephysics/collision/ProxyShape.hpp>
#include <ephysics/configuration.hpp> #include <ephysics/configuration.hpp>
#include <vector> #include <etk/Vector.hpp>
#include <cassert> #include <cassert>
using namespace ephysics; using namespace ephysics;
@ -83,7 +83,7 @@ bool BoxShape::raycast(const Ray& ray, RaycastInfo& raycastInfo, ProxyShape* pro
tMin = t1; tMin = t1;
normalDirection = currentNormal; normalDirection = currentNormal;
} }
tMax = std::min(tMax, t2); tMax = etk::min(tMax, t2);
// If tMin is larger than the maximum raycasting fraction, we return no hit // If tMin is larger than the maximum raycasting fraction, we return no hit
if (tMin > ray.maxFraction) return false; if (tMin > ray.maxFraction) return false;

View File

@ -74,12 +74,12 @@ bool ConcaveMeshShape::raycast(const Ray& _ray, RaycastInfo& _raycastInfo, Proxy
float ConcaveMeshRaycastCallback::raycastBroadPhaseShape(int32_t _nodeId, const Ray& _ray) { float ConcaveMeshRaycastCallback::raycastBroadPhaseShape(int32_t _nodeId, const Ray& _ray) {
// Add the id of the hit AABB node int32_to // Add the id of the hit AABB node int32_to
m_hitAABBNodes.push_back(_nodeId); m_hitAABBNodes.pushBack(_nodeId);
return _ray.maxFraction; return _ray.maxFraction;
} }
void ConcaveMeshRaycastCallback::raycastTriangles() { void ConcaveMeshRaycastCallback::raycastTriangles() {
std::vector<int32_t>::const_iterator it; etk::Vector<int32_t>::const_iterator it;
float smallestHitFraction = m_ray.maxFraction; float smallestHitFraction = m_ray.maxFraction;
for (it = m_hitAABBNodes.begin(); it != m_hitAABBNodes.end(); ++it) { for (it = m_hitAABBNodes.begin(); it != m_hitAABBNodes.end(); ++it) {
// Get the node data (triangle index and mesh subpart index) // Get the node data (triangle index and mesh subpart index)

View File

@ -35,7 +35,7 @@ namespace ephysics {
class ConcaveMeshRaycastCallback : public DynamicAABBTreeRaycastCallback { class ConcaveMeshRaycastCallback : public DynamicAABBTreeRaycastCallback {
private : private :
std::vector<int32_t> m_hitAABBNodes; etk::Vector<int32_t> m_hitAABBNodes;
const DynamicAABBTree& m_dynamicAABBTree; const DynamicAABBTree& m_dynamicAABBTree;
const ConcaveMeshShape& m_concaveMeshShape; const ConcaveMeshShape& m_concaveMeshShape;
ProxyShape* m_proxyShape; ProxyShape* m_proxyShape;

View File

@ -30,7 +30,7 @@ ConvexMeshShape::ConvexMeshShape(const float* arrayVertices, uint32_t nbVertices
// Copy all the vertices int32_to the int32_ternal array // Copy all the vertices int32_to the int32_ternal array
for (uint32_t i=0; i<m_numberVertices; i++) { for (uint32_t i=0; i<m_numberVertices; i++) {
const float* newPoint = (const float*) vertexPointer; const float* newPoint = (const float*) vertexPointer;
m_vertices.push_back(vec3(newPoint[0], newPoint[1], newPoint[2])); m_vertices.pushBack(vec3(newPoint[0], newPoint[1], newPoint[2]));
vertexPointer += stride; vertexPointer += stride;
} }
@ -45,7 +45,7 @@ ConvexMeshShape::ConvexMeshShape(TriangleVertexArray* _triangleVertexArray, bool
m_isEdgesInformationUsed(_isEdgesInformationUsed) { m_isEdgesInformationUsed(_isEdgesInformationUsed) {
// For each vertex of the mesh // For each vertex of the mesh
for (auto &it: _triangleVertexArray->getVertices()) { for (auto &it: _triangleVertexArray->getVertices()) {
m_vertices.push_back(it*m_scaling); m_vertices.pushBack(it*m_scaling);
} }
// If we need to use the edges information of the mesh // If we need to use the edges information of the mesh
if (m_isEdgesInformationUsed) { if (m_isEdgesInformationUsed) {
@ -256,7 +256,7 @@ void ConvexMeshShape::computeLocalInertiaTensor(etk::Matrix3x3& tensor, float ma
void ConvexMeshShape::addVertex(const vec3& vertex) { void ConvexMeshShape::addVertex(const vec3& vertex) {
// Add the vertex in to vertices array // Add the vertex in to vertices array
m_vertices.push_back(vertex); m_vertices.pushBack(vertex);
m_numberVertices++; m_numberVertices++;
// Update the bounds of the mesh // Update the bounds of the mesh
@ -292,12 +292,12 @@ void ConvexMeshShape::addEdge(uint32_t v1, uint32_t v2) {
// If the entry for vertex v1 does not exist in the adjacency list // If the entry for vertex v1 does not exist in the adjacency list
if (m_edgesAdjacencyList.count(v1) == 0) { if (m_edgesAdjacencyList.count(v1) == 0) {
m_edgesAdjacencyList.insert(std::make_pair(v1, std::set<uint32_t>())); m_edgesAdjacencyList.insert(etk::makePair(v1, std::set<uint32_t>()));
} }
// If the entry for vertex v2 does not exist in the adjacency list // If the entry for vertex v2 does not exist in the adjacency list
if (m_edgesAdjacencyList.count(v2) == 0) { if (m_edgesAdjacencyList.count(v2) == 0) {
m_edgesAdjacencyList.insert(std::make_pair(v2, std::set<uint32_t>())); m_edgesAdjacencyList.insert(etk::makePair(v2, std::set<uint32_t>()));
} }
// Add the edge in the adjacency list // Add the edge in the adjacency list

View File

@ -10,9 +10,9 @@
#include <ephysics/mathematics/mathematics.hpp> #include <ephysics/mathematics/mathematics.hpp>
#include <ephysics/collision/TriangleMesh.hpp> #include <ephysics/collision/TriangleMesh.hpp>
#include <ephysics/collision/narrowphase/GJK/GJKAlgorithm.hpp> #include <ephysics/collision/narrowphase/GJK/GJKAlgorithm.hpp>
#include <vector> #include <etk/Vector.hpp>
#include <set> #include <set>
#include <map> #include <etk/Map.hpp>
namespace ephysics { namespace ephysics {
class CollisionWorld; class CollisionWorld;
@ -33,12 +33,12 @@ namespace ephysics {
*/ */
class ConvexMeshShape : public ConvexShape { class ConvexMeshShape : public ConvexShape {
protected : protected :
std::vector<vec3> m_vertices; //!< Array with the vertices of the mesh etk::Vector<vec3> m_vertices; //!< Array with the vertices of the mesh
uint32_t m_numberVertices; //!< Number of vertices in the mesh uint32_t m_numberVertices; //!< Number of vertices in the mesh
vec3 m_minBounds; //!< Mesh minimum bounds in the three local x, y and z directions vec3 m_minBounds; //!< Mesh minimum bounds in the three local x, y and z directions
vec3 m_maxBounds; //!< Mesh maximum bounds in the three local x, y and z directions vec3 m_maxBounds; //!< Mesh maximum bounds in the three local x, y and z directions
bool m_isEdgesInformationUsed; //!< True if the shape contains the edges of the convex mesh in order to make the collision detection faster bool m_isEdgesInformationUsed; //!< True if the shape contains the edges of the convex mesh in order to make the collision detection faster
std::map<uint32_t, std::set<uint32_t> > m_edgesAdjacencyList; //!< Adjacency list representing the edges of the mesh etk::Map<uint32_t, std::set<uint32_t> > m_edgesAdjacencyList; //!< Adjacency list representing the edges of the mesh
/// Private copy-constructor /// Private copy-constructor
ConvexMeshShape(const ConvexMeshShape& _shape); ConvexMeshShape(const ConvexMeshShape& _shape);
/// Private assignment operator /// Private assignment operator

View File

@ -15,7 +15,7 @@
namespace ephysics { namespace ephysics {
// ------------------- Type definitions ------------------- // // ------------------- Type definitions ------------------- //
typedef uint64_t bodyindex; typedef uint64_t bodyindex;
typedef std::pair<bodyindex, bodyindex> bodyindexpair; typedef etk::Pair<bodyindex, bodyindex> bodyindexpair;
// ------------------- Enumerations ------------------- // // ------------------- Enumerations ------------------- //

View File

@ -313,7 +313,7 @@ void HingeJoint::solveVelocityConstraint(const ConstraintSolverData& constraintS
// Compute the Lagrange multiplier lambda for the lower limit constraint // Compute the Lagrange multiplier lambda for the lower limit constraint
float deltaLambdaLower = m_inverseMassMatrixLimitMotor * (-JvLowerLimit -m_bLowerLimit); float deltaLambdaLower = m_inverseMassMatrixLimitMotor * (-JvLowerLimit -m_bLowerLimit);
float lambdaTemp = m_impulseLowerLimit; float lambdaTemp = m_impulseLowerLimit;
m_impulseLowerLimit = std::max(m_impulseLowerLimit + deltaLambdaLower, 0.0f); m_impulseLowerLimit = etk::max(m_impulseLowerLimit + deltaLambdaLower, 0.0f);
deltaLambdaLower = m_impulseLowerLimit - lambdaTemp; deltaLambdaLower = m_impulseLowerLimit - lambdaTemp;
// Compute the impulse P=J^T * lambda for the lower limit constraint of body 1 // Compute the impulse P=J^T * lambda for the lower limit constraint of body 1
@ -338,7 +338,7 @@ void HingeJoint::solveVelocityConstraint(const ConstraintSolverData& constraintS
// Compute the Lagrange multiplier lambda for the upper limit constraint // Compute the Lagrange multiplier lambda for the upper limit constraint
float deltaLambdaUpper = m_inverseMassMatrixLimitMotor * (-JvUpperLimit -m_bUpperLimit); float deltaLambdaUpper = m_inverseMassMatrixLimitMotor * (-JvUpperLimit -m_bUpperLimit);
float lambdaTemp = m_impulseUpperLimit; float lambdaTemp = m_impulseUpperLimit;
m_impulseUpperLimit = std::max(m_impulseUpperLimit + deltaLambdaUpper, 0.0f); m_impulseUpperLimit = etk::max(m_impulseUpperLimit + deltaLambdaUpper, 0.0f);
deltaLambdaUpper = m_impulseUpperLimit - lambdaTemp; deltaLambdaUpper = m_impulseUpperLimit - lambdaTemp;
// Compute the impulse P=J^T * lambda for the upper limit constraint of body 1 // Compute the impulse P=J^T * lambda for the upper limit constraint of body 1

View File

@ -330,7 +330,7 @@ void SliderJoint::solveVelocityConstraint(const ConstraintSolverData& constraint
// Compute the Lagrange multiplier lambda for the lower limit constraint // Compute the Lagrange multiplier lambda for the lower limit constraint
float deltaLambdaLower = m_inverseMassMatrixLimit * (-JvLowerLimit -m_bLowerLimit); float deltaLambdaLower = m_inverseMassMatrixLimit * (-JvLowerLimit -m_bLowerLimit);
float lambdaTemp = m_impulseLowerLimit; float lambdaTemp = m_impulseLowerLimit;
m_impulseLowerLimit = std::max(m_impulseLowerLimit + deltaLambdaLower, 0.0f); m_impulseLowerLimit = etk::max(m_impulseLowerLimit + deltaLambdaLower, 0.0f);
deltaLambdaLower = m_impulseLowerLimit - lambdaTemp; deltaLambdaLower = m_impulseLowerLimit - lambdaTemp;
// Compute the impulse P=J^T * lambda for the lower limit constraint of body 1 // Compute the impulse P=J^T * lambda for the lower limit constraint of body 1
@ -360,7 +360,7 @@ void SliderJoint::solveVelocityConstraint(const ConstraintSolverData& constraint
// Compute the Lagrange multiplier lambda for the upper limit constraint // Compute the Lagrange multiplier lambda for the upper limit constraint
float deltaLambdaUpper = m_inverseMassMatrixLimit * (-JvUpperLimit -m_bUpperLimit); float deltaLambdaUpper = m_inverseMassMatrixLimit * (-JvUpperLimit -m_bUpperLimit);
float lambdaTemp = m_impulseUpperLimit; float lambdaTemp = m_impulseUpperLimit;
m_impulseUpperLimit = std::max(m_impulseUpperLimit + deltaLambdaUpper, 0.0f); m_impulseUpperLimit = etk::max(m_impulseUpperLimit + deltaLambdaUpper, 0.0f);
deltaLambdaUpper = m_impulseUpperLimit - lambdaTemp; deltaLambdaUpper = m_impulseUpperLimit - lambdaTemp;
// Compute the impulse P=J^T * lambda for the upper limit constraint of body 1 // Compute the impulse P=J^T * lambda for the upper limit constraint of body 1

View File

@ -69,7 +69,7 @@ void CollisionWorld::destroyCollisionBody(CollisionBody* collisionBody) {
collisionBody->removeAllCollisionShapes(); collisionBody->removeAllCollisionShapes();
// Add the body ID to the list of free IDs // Add the body ID to the list of free IDs
m_freeBodiesIDs.push_back(collisionBody->getID()); m_freeBodiesIDs.pushBack(collisionBody->getID());
// Call the destructor of the collision body // Call the destructor of the collision body
collisionBody->~CollisionBody(); collisionBody->~CollisionBody();
@ -88,7 +88,7 @@ bodyindex CollisionWorld::computeNextAvailableBodyID() {
bodyindex bodyID; bodyindex bodyID;
if (!m_freeBodiesIDs.empty()) { if (!m_freeBodiesIDs.empty()) {
bodyID = m_freeBodiesIDs.back(); bodyID = m_freeBodiesIDs.back();
m_freeBodiesIDs.pop_back(); m_freeBodiesIDs.popBack();
} }
else { else {
bodyID = m_currentBodyID; bodyID = m_currentBodyID;

View File

@ -5,7 +5,7 @@
*/ */
#pragma once #pragma once
#include <vector> #include <etk/Vector.hpp>
#include <set> #include <set>
#include <list> #include <list>
#include <algorithm> #include <algorithm>
@ -32,7 +32,7 @@ namespace ephysics {
CollisionDetection m_collisionDetection; //!< Reference to the collision detection CollisionDetection m_collisionDetection; //!< Reference to the collision detection
std::set<CollisionBody*> m_bodies; //!< All the bodies (rigid and soft) of the world std::set<CollisionBody*> m_bodies; //!< All the bodies (rigid and soft) of the world
bodyindex m_currentBodyID; //!< Current body ID bodyindex m_currentBodyID; //!< Current body ID
std::vector<uint64_t> m_freeBodiesIDs; //!< List of free ID for rigid bodies etk::Vector<uint64_t> m_freeBodiesIDs; //!< List of free ID for rigid bodies
MemoryAllocator m_memoryAllocator; //!< Memory allocator MemoryAllocator m_memoryAllocator; //!< Memory allocator
EventListener* m_eventListener; //!< Pointer to an event listener object EventListener* m_eventListener; //!< Pointer to an event listener object
/// Private copy-constructor /// Private copy-constructor

View File

@ -9,7 +9,7 @@
using namespace ephysics; using namespace ephysics;
ConstraintSolver::ConstraintSolver(const std::map<RigidBody*, uint32_t>& _mapBodyToVelocityIndex): ConstraintSolver::ConstraintSolver(const etk::Map<RigidBody*, uint32_t>& _mapBodyToVelocityIndex):
m_mapBodyToConstrainedVelocityIndex(_mapBodyToVelocityIndex), m_mapBodyToConstrainedVelocityIndex(_mapBodyToVelocityIndex),
m_isWarmStartingActive(true), m_isWarmStartingActive(true),
m_constraintSolverData(_mapBodyToVelocityIndex) { m_constraintSolverData(_mapBodyToVelocityIndex) {

View File

@ -9,7 +9,7 @@
#include <ephysics/mathematics/mathematics.hpp> #include <ephysics/mathematics/mathematics.hpp>
#include <ephysics/constraint/Joint.hpp> #include <ephysics/constraint/Joint.hpp>
#include <ephysics/engine/Island.hpp> #include <ephysics/engine/Island.hpp>
#include <map> #include <etk/Map.hpp>
#include <set> #include <set>
namespace ephysics { namespace ephysics {
@ -24,10 +24,10 @@ namespace ephysics {
vec3* angularVelocities; //!< Array with the bodies angular velocities vec3* angularVelocities; //!< Array with the bodies angular velocities
vec3* positions; //!< Reference to the bodies positions vec3* positions; //!< Reference to the bodies positions
etk::Quaternion* orientations; //!< Reference to the bodies orientations etk::Quaternion* orientations; //!< Reference to the bodies orientations
const std::map<RigidBody*, uint32_t>& mapBodyToConstrainedVelocityIndex; //!< Reference to the map that associates rigid body to their index in the constrained velocities array const etk::Map<RigidBody*, uint32_t>& mapBodyToConstrainedVelocityIndex; //!< Reference to the map that associates rigid body to their index in the constrained velocities array
bool isWarmStartingActive; //!< True if warm starting of the solver is active bool isWarmStartingActive; //!< True if warm starting of the solver is active
/// Constructor /// Constructor
ConstraintSolverData(const std::map<RigidBody*, uint32_t>& refMapBodyToConstrainedVelocityIndex) ConstraintSolverData(const etk::Map<RigidBody*, uint32_t>& refMapBodyToConstrainedVelocityIndex)
:linearVelocities(NULL), angularVelocities(NULL), :linearVelocities(NULL), angularVelocities(NULL),
positions(NULL), orientations(NULL), positions(NULL), orientations(NULL),
mapBodyToConstrainedVelocityIndex(refMapBodyToConstrainedVelocityIndex){ mapBodyToConstrainedVelocityIndex(refMapBodyToConstrainedVelocityIndex){
@ -105,13 +105,13 @@ namespace ephysics {
*/ */
class ConstraintSolver { class ConstraintSolver {
private : private :
const std::map<RigidBody*, uint32_t>& m_mapBodyToConstrainedVelocityIndex; //!< Reference to the map that associates rigid body to their index in the constrained velocities array const etk::Map<RigidBody*, uint32_t>& m_mapBodyToConstrainedVelocityIndex; //!< Reference to the map that associates rigid body to their index in the constrained velocities array
float m_timeStep; //!< Current time step float m_timeStep; //!< Current time step
bool m_isWarmStartingActive; //!< True if the warm starting of the solver is active bool m_isWarmStartingActive; //!< True if the warm starting of the solver is active
ConstraintSolverData m_constraintSolverData; //!< Constraint solver data used to initialize and solve the constraints ConstraintSolverData m_constraintSolverData; //!< Constraint solver data used to initialize and solve the constraints
public : public :
/// Constructor /// Constructor
ConstraintSolver(const std::map<RigidBody*, uint32_t>& _mapBodyToVelocityIndex); ConstraintSolver(const etk::Map<RigidBody*, uint32_t>& _mapBodyToVelocityIndex);
/// Initialize the constraint solver for a given island /// Initialize the constraint solver for a given island
void initializeForIsland(float _dt, Island* _island); void initializeForIsland(float _dt, Island* _island);
/// Solve the constraints /// Solve the constraints

View File

@ -20,7 +20,7 @@ const float ContactSolver::BETA_SPLIT_IMPULSE = float(0.2);
const float ContactSolver::SLOP= float(0.01); const float ContactSolver::SLOP= float(0.01);
// Constructor // Constructor
ContactSolver::ContactSolver(const std::map<RigidBody*, uint32_t>& mapBodyToVelocityIndex) ContactSolver::ContactSolver(const etk::Map<RigidBody*, uint32_t>& mapBodyToVelocityIndex)
:m_splitLinearVelocities(nullptr), m_splitAngularVelocities(nullptr), :m_splitLinearVelocities(nullptr), m_splitAngularVelocities(nullptr),
m_contactConstraints(nullptr), m_linearVelocities(nullptr), m_angularVelocities(nullptr), m_contactConstraints(nullptr), m_linearVelocities(nullptr), m_angularVelocities(nullptr),
m_mapBodyToConstrainedVelocityIndex(mapBodyToVelocityIndex), m_mapBodyToConstrainedVelocityIndex(mapBodyToVelocityIndex),
@ -534,7 +534,7 @@ void ContactSolver::solve() {
deltaLambda = - (Jv + b) * contactPoint.inversePenetrationMass; deltaLambda = - (Jv + b) * contactPoint.inversePenetrationMass;
} }
lambdaTemp = contactPoint.penetrationImpulse; lambdaTemp = contactPoint.penetrationImpulse;
contactPoint.penetrationImpulse = std::max(contactPoint.penetrationImpulse + contactPoint.penetrationImpulse = etk::max(contactPoint.penetrationImpulse +
deltaLambda, 0.0f); deltaLambda, 0.0f);
deltaLambda = contactPoint.penetrationImpulse - lambdaTemp; deltaLambda = contactPoint.penetrationImpulse - lambdaTemp;
@ -561,7 +561,7 @@ void ContactSolver::solve() {
float deltaLambdaSplit = - (JvSplit + biasPenetrationDepth) * float deltaLambdaSplit = - (JvSplit + biasPenetrationDepth) *
contactPoint.inversePenetrationMass; contactPoint.inversePenetrationMass;
float lambdaTempSplit = contactPoint.penetrationSplitImpulse; float lambdaTempSplit = contactPoint.penetrationSplitImpulse;
contactPoint.penetrationSplitImpulse = std::max( contactPoint.penetrationSplitImpulse = etk::max(
contactPoint.penetrationSplitImpulse + contactPoint.penetrationSplitImpulse +
deltaLambdaSplit, 0.0f); deltaLambdaSplit, 0.0f);
deltaLambda = contactPoint.penetrationSplitImpulse - lambdaTempSplit; deltaLambda = contactPoint.penetrationSplitImpulse - lambdaTempSplit;
@ -588,8 +588,8 @@ void ContactSolver::solve() {
float frictionLimit = contactManifold.frictionCoefficient * float frictionLimit = contactManifold.frictionCoefficient *
contactPoint.penetrationImpulse; contactPoint.penetrationImpulse;
lambdaTemp = contactPoint.friction1Impulse; lambdaTemp = contactPoint.friction1Impulse;
contactPoint.friction1Impulse = std::max(-frictionLimit, contactPoint.friction1Impulse = etk::max(-frictionLimit,
std::min(contactPoint.friction1Impulse etk::min(contactPoint.friction1Impulse
+ deltaLambda, frictionLimit)); + deltaLambda, frictionLimit));
deltaLambda = contactPoint.friction1Impulse - lambdaTemp; deltaLambda = contactPoint.friction1Impulse - lambdaTemp;
@ -612,8 +612,8 @@ void ContactSolver::solve() {
frictionLimit = contactManifold.frictionCoefficient * frictionLimit = contactManifold.frictionCoefficient *
contactPoint.penetrationImpulse; contactPoint.penetrationImpulse;
lambdaTemp = contactPoint.friction2Impulse; lambdaTemp = contactPoint.friction2Impulse;
contactPoint.friction2Impulse = std::max(-frictionLimit, contactPoint.friction2Impulse = etk::max(-frictionLimit,
std::min(contactPoint.friction2Impulse etk::min(contactPoint.friction2Impulse
+ deltaLambda, frictionLimit)); + deltaLambda, frictionLimit));
deltaLambda = contactPoint.friction2Impulse - lambdaTemp; deltaLambda = contactPoint.friction2Impulse - lambdaTemp;
@ -663,8 +663,8 @@ void ContactSolver::solve() {
float deltaLambda = -Jv * contactManifold.inverseFriction1Mass; float deltaLambda = -Jv * contactManifold.inverseFriction1Mass;
float frictionLimit = contactManifold.frictionCoefficient * sum_penetrationImpulse; float frictionLimit = contactManifold.frictionCoefficient * sum_penetrationImpulse;
lambdaTemp = contactManifold.friction1Impulse; lambdaTemp = contactManifold.friction1Impulse;
contactManifold.friction1Impulse = std::max(-frictionLimit, contactManifold.friction1Impulse = etk::max(-frictionLimit,
std::min(contactManifold.friction1Impulse + etk::min(contactManifold.friction1Impulse +
deltaLambda, frictionLimit)); deltaLambda, frictionLimit));
deltaLambda = contactManifold.friction1Impulse - lambdaTemp; deltaLambda = contactManifold.friction1Impulse - lambdaTemp;
@ -690,8 +690,8 @@ void ContactSolver::solve() {
deltaLambda = -Jv * contactManifold.inverseFriction2Mass; deltaLambda = -Jv * contactManifold.inverseFriction2Mass;
frictionLimit = contactManifold.frictionCoefficient * sum_penetrationImpulse; frictionLimit = contactManifold.frictionCoefficient * sum_penetrationImpulse;
lambdaTemp = contactManifold.friction2Impulse; lambdaTemp = contactManifold.friction2Impulse;
contactManifold.friction2Impulse = std::max(-frictionLimit, contactManifold.friction2Impulse = etk::max(-frictionLimit,
std::min(contactManifold.friction2Impulse + etk::min(contactManifold.friction2Impulse +
deltaLambda, frictionLimit)); deltaLambda, frictionLimit));
deltaLambda = contactManifold.friction2Impulse - lambdaTemp; deltaLambda = contactManifold.friction2Impulse - lambdaTemp;
@ -715,8 +715,8 @@ void ContactSolver::solve() {
deltaLambda = -Jv * (contactManifold.inverseTwistFrictionMass); deltaLambda = -Jv * (contactManifold.inverseTwistFrictionMass);
frictionLimit = contactManifold.frictionCoefficient * sum_penetrationImpulse; frictionLimit = contactManifold.frictionCoefficient * sum_penetrationImpulse;
lambdaTemp = contactManifold.frictionTwistImpulse; lambdaTemp = contactManifold.frictionTwistImpulse;
contactManifold.frictionTwistImpulse = std::max(-frictionLimit, contactManifold.frictionTwistImpulse = etk::max(-frictionLimit,
std::min(contactManifold.frictionTwistImpulse etk::min(contactManifold.frictionTwistImpulse
+ deltaLambda, frictionLimit)); + deltaLambda, frictionLimit));
deltaLambda = contactManifold.frictionTwistImpulse - lambdaTemp; deltaLambda = contactManifold.frictionTwistImpulse - lambdaTemp;

View File

@ -11,7 +11,7 @@
#include <ephysics/collision/ContactManifold.hpp> #include <ephysics/collision/ContactManifold.hpp>
#include <ephysics/engine/Island.hpp> #include <ephysics/engine/Island.hpp>
#include <ephysics/engine/Impulse.hpp> #include <ephysics/engine/Impulse.hpp>
#include <map> #include <etk/Map.hpp>
#include <set> #include <set>
namespace ephysics { namespace ephysics {
@ -168,7 +168,7 @@ namespace ephysics {
uint32_t m_numberContactManifolds; //!< Number of contact constraints uint32_t m_numberContactManifolds; //!< Number of contact constraints
vec3* m_linearVelocities; //!< Array of linear velocities vec3* m_linearVelocities; //!< Array of linear velocities
vec3* m_angularVelocities; //!< Array of angular velocities vec3* m_angularVelocities; //!< Array of angular velocities
const std::map<RigidBody*, uint32_t>& m_mapBodyToConstrainedVelocityIndex; //!< Reference to the map of rigid body to their index in the constrained velocities array const etk::Map<RigidBody*, uint32_t>& m_mapBodyToConstrainedVelocityIndex; //!< Reference to the map of rigid body to their index in the constrained velocities array
bool m_isWarmStartingActive; //!< True if the warm starting of the solver is active bool m_isWarmStartingActive; //!< True if the warm starting of the solver is active
bool m_isSplitImpulseActive; //!< True if the split impulse position correction is active bool m_isSplitImpulseActive; //!< True if the split impulse position correction is active
bool m_isSolveFrictionAtContactManifoldCenterActive; //!< True if we solve 3 friction constraints at the contact manifold center only instead of 2 friction constraints at each contact point bool m_isSolveFrictionAtContactManifoldCenterActive; //!< True if we solve 3 friction constraints at the contact manifold center only instead of 2 friction constraints at each contact point
@ -208,7 +208,7 @@ namespace ephysics {
const ContactPointSolver& contactPoint) const; const ContactPointSolver& contactPoint) const;
public: public:
/// Constructor /// Constructor
ContactSolver(const std::map<RigidBody*, uint32_t>& mapBodyToVelocityIndex); ContactSolver(const etk::Map<RigidBody*, uint32_t>& mapBodyToVelocityIndex);
/// Destructor /// Destructor
virtual ~ContactSolver(); virtual ~ContactSolver();
/// Initialize the constraint solver for a given island /// Initialize the constraint solver for a given island

View File

@ -267,7 +267,7 @@ void DynamicsWorld::initVelocityArrays() {
for (it = m_rigidBodies.begin(); it != m_rigidBodies.end(); ++it) { for (it = m_rigidBodies.begin(); it != m_rigidBodies.end(); ++it) {
// Add the body int32_to the map // Add the body int32_to the map
m_mapBodyToConstrainedVelocityIndex.insert(std::make_pair(*it, indexBody)); m_mapBodyToConstrainedVelocityIndex.insert(etk::makePair(*it, indexBody));
indexBody++; indexBody++;
} }
} }
@ -457,7 +457,7 @@ void DynamicsWorld::destroyRigidBody(RigidBody* rigidBody) {
rigidBody->removeAllCollisionShapes(); rigidBody->removeAllCollisionShapes();
// Add the body ID to the list of free IDs // Add the body ID to the list of free IDs
m_freeBodiesIDs.push_back(rigidBody->getID()); m_freeBodiesIDs.pushBack(rigidBody->getID());
// Destroy all the joints in which the rigid body to be destroyed is involved // Destroy all the joints in which the rigid body to be destroyed is involved
JointListElement* element; JointListElement* element;
@ -960,12 +960,12 @@ void DynamicsWorld::testCollision(CollisionCallback* callback) {
} }
/// Return the list of all contacts of the world /// Return the list of all contacts of the world
std::vector<const ContactManifold*> DynamicsWorld::getContactsList() const { etk::Vector<const ContactManifold*> DynamicsWorld::getContactsList() const {
std::vector<const ContactManifold*> contactManifolds; etk::Vector<const ContactManifold*> contactManifolds;
// For each currently overlapping pair of bodies // For each currently overlapping pair of bodies
std::map<overlappingpairid, OverlappingPair*>::const_iterator it; etk::Map<overlappingpairid, OverlappingPair*>::const_iterator it;
for (it = m_collisionDetection.m_overlappingPairs.begin(); for (it = m_collisionDetection.m_overlappingPairs.begin();
it != m_collisionDetection.m_overlappingPairs.end(); ++it) { it != m_collisionDetection.m_overlappingPairs.end(); ++it) {
@ -978,7 +978,7 @@ std::vector<const ContactManifold*> DynamicsWorld::getContactsList() const {
ContactManifold* manifold = manifoldSet.getContactManifold(i); ContactManifold* manifold = manifoldSet.getContactManifold(i);
// Get the contact manifold // Get the contact manifold
contactManifolds.push_back(manifold); contactManifolds.pushBack(manifold);
} }
} }

View File

@ -37,7 +37,7 @@ namespace ephysics {
vec3* m_splitAngularVelocities; //!< Split angular velocities for the position contact solver (split impulse) vec3* m_splitAngularVelocities; //!< Split angular velocities for the position contact solver (split impulse)
vec3* m_constrainedPositions; //!< Array of constrained rigid bodies position (for position error correction) vec3* m_constrainedPositions; //!< Array of constrained rigid bodies position (for position error correction)
etk::Quaternion* m_constrainedOrientations; //!< Array of constrained rigid bodies orientation (for position error correction) etk::Quaternion* m_constrainedOrientations; //!< Array of constrained rigid bodies orientation (for position error correction)
std::map<RigidBody*, uint32_t> m_mapBodyToConstrainedVelocityIndex; //!< Map body to their index in the constrained velocities array etk::Map<RigidBody*, uint32_t> m_mapBodyToConstrainedVelocityIndex; //!< Map body to their index in the constrained velocities array
uint32_t m_numberIslands; //!< Number of islands in the world uint32_t m_numberIslands; //!< Number of islands in the world
uint32_t m_numberIslandsCapacity; //!< Current allocated capacity for the islands uint32_t m_numberIslandsCapacity; //!< Current allocated capacity for the islands
Island** m_islands; //!< Array with all the islands of awaken bodies Island** m_islands; //!< Array with all the islands of awaken bodies
@ -155,7 +155,7 @@ namespace ephysics {
/// Test and report collisions between all shapes of the world /// Test and report collisions between all shapes of the world
virtual void testCollision(CollisionCallback* _callback) override; virtual void testCollision(CollisionCallback* _callback) override;
/// Return the list of all contacts of the world /// Return the list of all contacts of the world
std::vector<const ContactManifold*> getContactsList() const; etk::Vector<const ContactManifold*> getContactsList() const;
friend class RigidBody; friend class RigidBody;
}; };

View File

@ -64,8 +64,8 @@ overlappingpairid OverlappingPair::computeID(ProxyShape* _shape1, ProxyShape* _s
// Construct the pair of body index // Construct the pair of body index
overlappingpairid pairID = _shape1->m_broadPhaseID < _shape2->m_broadPhaseID ? overlappingpairid pairID = _shape1->m_broadPhaseID < _shape2->m_broadPhaseID ?
std::make_pair(_shape1->m_broadPhaseID, _shape2->m_broadPhaseID) : etk::makePair(_shape1->m_broadPhaseID, _shape2->m_broadPhaseID) :
std::make_pair(_shape2->m_broadPhaseID, _shape1->m_broadPhaseID); etk::makePair(_shape2->m_broadPhaseID, _shape1->m_broadPhaseID);
assert(pairID.first != pairID.second); assert(pairID.first != pairID.second);
return pairID; return pairID;
} }
@ -76,8 +76,8 @@ bodyindexpair OverlappingPair::computeBodiesIndexPair(CollisionBody* _body1,
// Construct the pair of body index // Construct the pair of body index
bodyindexpair indexPair = _body1->getID() < _body2->getID() ? bodyindexpair indexPair = _body1->getID() < _body2->getID() ?
std::make_pair(_body1->getID(), _body2->getID()) : etk::makePair(_body1->getID(), _body2->getID()) :
std::make_pair(_body2->getID(), _body1->getID()); etk::makePair(_body2->getID(), _body1->getID());
assert(indexPair.first != indexPair.second); assert(indexPair.first != indexPair.second);
return indexPair; return indexPair;
} }

View File

@ -10,7 +10,7 @@
namespace ephysics { namespace ephysics {
// Type for the overlapping pair ID // Type for the overlapping pair ID
typedef std::pair<uint32_t, uint32_t> overlappingpairid; typedef etk::Pair<uint32_t, uint32_t> overlappingpairid;
/** /**
* @brief This class represents a pair of two proxy collision shapes that are overlapping * @brief This class represents a pair of two proxy collision shapes that are overlapping
* during the broad-phase collision detection. It is created when * during the broad-phase collision detection. It is created when

View File

@ -171,7 +171,7 @@ void Profiler::reset() {
} }
// Print32_t the report of the profiler in a given output stream // Print32_t the report of the profiler in a given output stream
void Profiler::print32_tReport(std::ostream& outputStream) { void Profiler::print32_tReport(etk::Stream& outputStream) {
ProfileNodeIterator* iterator = Profiler::getIterator(); ProfileNodeIterator* iterator = Profiler::getIterator();
// Recursively print32_t the report of each node of the profiler tree // Recursively print32_t the report of each node of the profiler tree
@ -184,7 +184,7 @@ void Profiler::print32_tReport(std::ostream& outputStream) {
// Recursively print32_t the report of a given node of the profiler tree // Recursively print32_t the report of a given node of the profiler tree
void Profiler::print32_tRecursiveNodeReport(ProfileNodeIterator* iterator, void Profiler::print32_tRecursiveNodeReport(ProfileNodeIterator* iterator,
int32_t spacing, int32_t spacing,
std::ostream& outputStream) { etk::Stream& outputStream) {
iterator->first(); iterator->first();
// If we are at the end of a branch in the profiler tree // If we are at the end of a branch in the profiler tree

View File

@ -99,7 +99,7 @@ namespace ephysics {
private: private:
static void print32_tRecursiveNodeReport(ProfileNodeIterator* iterator, static void print32_tRecursiveNodeReport(ProfileNodeIterator* iterator,
int32_t spacing, int32_t spacing,
std::ostream& outputStream); etk::Stream& outputStream);
public : public :
/// Method called when we want to start profiling a block of code. /// Method called when we want to start profiling a block of code.
static void startProfilingBlock(const char *name); static void startProfilingBlock(const char *name);
@ -117,7 +117,7 @@ namespace ephysics {
/// Return an iterator over the profiler tree starting at the root /// Return an iterator over the profiler tree starting at the root
static ProfileNodeIterator* getIterator(); static ProfileNodeIterator* getIterator();
/// Print32_t the report of the profiler in a given output stream /// Print32_t the report of the profiler in a given output stream
static void print32_tReport(std::ostream& outputStream); static void print32_tReport(etk::Stream& outputStream);
/// Destroy a previously allocated iterator /// Destroy a previously allocated iterator
static void destroyIterator(ProfileNodeIterator* iterator); static void destroyIterator(ProfileNodeIterator* iterator);
/// Destroy the profiler (release the memory) /// Destroy the profiler (release the memory)

View File

@ -15,7 +15,7 @@
#include <ephysics/mathematics/Ray.hpp> #include <ephysics/mathematics/Ray.hpp>
#include <ephysics/configuration.hpp> #include <ephysics/configuration.hpp>
#include <ephysics/mathematics/mathematics_functions.hpp> #include <ephysics/mathematics/mathematics_functions.hpp>
#include <vector> #include <etk/Vector.hpp>
#include <cstdio> #include <cstdio>
#include <cassert> #include <cassert>
#include <cmath> #include <cmath>

View File

@ -28,24 +28,24 @@ inline bool approxEqual(float a, float b, float epsilon = MACHINE_EPSILON) {
/// two others values "lowerLimit" and "upperLimit" /// two others values "lowerLimit" and "upperLimit"
inline int32_t clamp(int32_t value, int32_t lowerLimit, int32_t upperLimit) { inline int32_t clamp(int32_t value, int32_t lowerLimit, int32_t upperLimit) {
assert(lowerLimit <= upperLimit); assert(lowerLimit <= upperLimit);
return std::min(std::max(value, lowerLimit), upperLimit); return etk::min(etk::max(value, lowerLimit), upperLimit);
} }
/// Function that returns the result of the "value" clamped by /// Function that returns the result of the "value" clamped by
/// two others values "lowerLimit" and "upperLimit" /// two others values "lowerLimit" and "upperLimit"
inline float clamp(float value, float lowerLimit, float upperLimit) { inline float clamp(float value, float lowerLimit, float upperLimit) {
assert(lowerLimit <= upperLimit); assert(lowerLimit <= upperLimit);
return std::min(std::max(value, lowerLimit), upperLimit); return etk::min(etk::max(value, lowerLimit), upperLimit);
} }
/// Return the minimum value among three values /// Return the minimum value among three values
inline float min3(float a, float b, float c) { inline float min3(float a, float b, float c) {
return std::min(std::min(a, b), c); return etk::min(etk::min(a, b), c);
} }
/// Return the maximum value among three values /// Return the maximum value among three values
inline float max3(float a, float b, float c) { inline float max3(float a, float b, float c) {
return std::max(std::max(a, b), c); return etk::max(etk::max(a, b), c);
} }
/// Return true if two values have the same sign /// Return true if two values have the same sign

View File

@ -31,7 +31,7 @@
using namespace ephysics; using namespace ephysics;
/// Constructor /// Constructor
Test::Test(const std::string& name, std::ostream* stream) Test::Test(const etk::String& name, etk::Stream* stream)
: m_name(name), mNbPassedTests(0), mNbFailedTests(0), mOutputStream(stream) { : m_name(name), mNbPassedTests(0), mNbFailedTests(0), mOutputStream(stream) {
} }
@ -43,7 +43,7 @@ Test::~Test() {
// Called to test a boolean condition. // Called to test a boolean condition.
// This method should not be called directly in your test but you should call test() instead (macro) // This method should not be called directly in your test but you should call test() instead (macro)
void Test::applyTest(bool condition, const std::string& testText, void Test::applyTest(bool condition, const etk::String& testText,
const char* filename, long lineNumber) { const char* filename, long lineNumber) {
// If the boolean condition is true // If the boolean condition is true
@ -61,7 +61,7 @@ void Test::applyTest(bool condition, const std::string& testText,
// Called when a test has failed. // Called when a test has failed.
// This method should not be called directly in your test buy you should call fail() instead (macro) // This method should not be called directly in your test buy you should call fail() instead (macro)
void Test::applyFail(const std::string& testText, const char* filename, long lineNumber) { void Test::applyFail(const etk::String& testText, const char* filename, long lineNumber) {
if (mOutputStream) { if (mOutputStream) {

View File

@ -27,7 +27,7 @@
#define TEST_H #define TEST_H
// Libraries // Libraries
#include <string> #include <etk/String.hpp>
#include <iostream> #include <iostream>
#include <cassert> #include <cassert>
@ -51,7 +51,7 @@ class Test {
// ---------- Attributes ---------- // // ---------- Attributes ---------- //
/// Name of the test /// Name of the test
std::string m_name; etk::String m_name;
/// Number of tests that passed /// Number of tests that passed
long mNbPassedTests; long mNbPassedTests;
@ -60,7 +60,7 @@ class Test {
long mNbFailedTests; long mNbFailedTests;
/// Output stream /// Output stream
std::ostream* mOutputStream; etk::Stream* mOutputStream;
// ---------- Methods ---------- // // ---------- Methods ---------- //
@ -77,20 +77,20 @@ class Test {
/// Called to test a boolean condition. /// Called to test a boolean condition.
/// This method should not be called directly in your test but you should /// This method should not be called directly in your test but you should
/// call test() instead (macro) /// call test() instead (macro)
void applyTest(bool condition, const std::string& testText, void applyTest(bool condition, const etk::String& testText,
const char* filename, long lineNumber); const char* filename, long lineNumber);
/// Called when a test has failed. /// Called when a test has failed.
/// This method should not be called directly in your test buy you should /// This method should not be called directly in your test buy you should
/// call fail() instead (macro) /// call fail() instead (macro)
void applyFail(const std::string& testText, const char* filename, long lineNumber); void applyFail(const etk::String& testText, const char* filename, long lineNumber);
public : public :
// ---------- Methods ---------- // // ---------- Methods ---------- //
/// Constructor /// Constructor
Test(const std::string& name, std::ostream* stream = &std::cout); Test(const etk::String& name, etk::Stream* stream = &std::cout);
/// Destructor /// Destructor
virtual ~Test(); virtual ~Test();
@ -102,10 +102,10 @@ class Test {
long getNbFailedTests() const; long getNbFailedTests() const;
/// Return the output stream /// Return the output stream
const std::ostream* getOutputStream() const; const etk::Stream* getOutputStream() const;
/// Set the output stream /// Set the output stream
void setOutputStream(std::ostream *stream); void setOutputStream(etk::Stream *stream);
/// Run the unit test /// Run the unit test
virtual void run() = 0; virtual void run() = 0;
@ -142,12 +142,12 @@ inline long Test::getNbFailedTests() const {
} }
// Return the output stream // Return the output stream
inline const std::ostream* Test::getOutputStream() const { inline const etk::Stream* Test::getOutputStream() const {
return mOutputStream; return mOutputStream;
} }
// Set the output stream // Set the output stream
inline void Test::setOutputStream(std::ostream* stream) { inline void Test::setOutputStream(etk::Stream* stream) {
mOutputStream = stream; mOutputStream = stream;
} }

View File

@ -29,7 +29,7 @@
using namespace ephysics; using namespace ephysics;
// Constructor // Constructor
TestSuite::TestSuite(const std::string& name, std::ostream* outputStream) TestSuite::TestSuite(const etk::String& name, etk::Stream* outputStream)
: m_name(name), mOutputStream(outputStream) { : m_name(name), mOutputStream(outputStream) {
} }
@ -69,7 +69,7 @@ void TestSuite::addTest(Test* test) {
} }
// Add the test to the suite // Add the test to the suite
mTests.push_back(test); mTests.pushBack(test);
// Reset the added test // Reset the added test
test->reset(); test->reset();

View File

@ -28,7 +28,7 @@
// Libraries // Libraries
#include <test/Test.hpp> #include <test/Test.hpp>
#include <vector> #include <etk/Vector.hpp>
#include <stdexcept> #include <stdexcept>
/// Reactphysics3D namespace /// Reactphysics3D namespace
@ -48,13 +48,13 @@ class TestSuite {
// ---------- Attributes ---------- // // ---------- Attributes ---------- //
/// Name of the test suite /// Name of the test suite
std::string m_name; etk::String m_name;
/// Output stream /// Output stream
std::ostream* mOutputStream; etk::Stream* mOutputStream;
/// All the tests of the test suite /// All the tests of the test suite
std::vector<Test*> mTests; etk::Vector<Test*> mTests;
// ---------- Methods ---------- // // ---------- Methods ---------- //
@ -72,10 +72,10 @@ class TestSuite {
// ---------- Methods ---------- // // ---------- Methods ---------- //
/// Constructor /// Constructor
TestSuite(const std::string& name, std::ostream* outputStream = &std::cout); TestSuite(const etk::String& name, etk::Stream* outputStream = &std::cout);
/// Return the name of the test suite /// Return the name of the test suite
std::string getName() const; etk::String getName() const;
/// Return the number of passed tests /// Return the number of passed tests
long getNbPassedTests() const; long getNbPassedTests() const;
@ -84,10 +84,10 @@ class TestSuite {
long getNbFailedTests() const; long getNbFailedTests() const;
/// Return the output stream /// Return the output stream
const std::ostream* getOutputStream() const; const etk::Stream* getOutputStream() const;
/// Set the output stream /// Set the output stream
void setOutputStream(std::ostream* outputStream); void setOutputStream(etk::Stream* outputStream);
/// Add a unit test in the test suite /// Add a unit test in the test suite
void addTest(Test* test); void addTest(Test* test);
@ -107,17 +107,17 @@ class TestSuite {
}; };
// Return the name of the test suite // Return the name of the test suite
inline std::string TestSuite::getName() const { inline etk::String TestSuite::getName() const {
return m_name; return m_name;
} }
// Return the output stream // Return the output stream
inline const std::ostream* TestSuite::getOutputStream() const { inline const etk::Stream* TestSuite::getOutputStream() const {
return mOutputStream; return mOutputStream;
} }
// Set the output stream // Set the output stream
inline void TestSuite::setOutputStream(std::ostream* outputStream) { inline void TestSuite::setOutputStream(etk::Stream* outputStream) {
mOutputStream = outputStream; mOutputStream = outputStream;
} }

View File

@ -53,7 +53,7 @@ class TestAABB : public Test {
// ---------- Methods ---------- // // ---------- Methods ---------- //
/// Constructor /// Constructor
TestAABB(const std::string& name) : Test(name) { TestAABB(const etk::String& name) : Test(name) {
m_AABB1.setMin(vec3(-10, -10, -10)); m_AABB1.setMin(vec3(-10, -10, -10));
m_AABB1.setMax(vec3(10, 10, 10)); m_AABB1.setMax(vec3(10, 10, 10));

View File

@ -133,7 +133,7 @@ class TestCollisionWorld : public Test {
// ---------- Methods ---------- // // ---------- Methods ---------- //
/// Constructor /// Constructor
TestCollisionWorld(const std::string& name) : Test(name) { TestCollisionWorld(const etk::String& name) : Test(name) {
// Create the world // Create the world
m_world = new CollisionWorld(); m_world = new CollisionWorld();

View File

@ -29,7 +29,7 @@
// Libraries // Libraries
#include <test/Test.hpp> #include <test/Test.hpp>
#include <ephysics/collision/broadphase/DynamicAABBTree.hpp> #include <ephysics/collision/broadphase/DynamicAABBTree.hpp>
#include <vector> #include <etk/Vector.hpp>
/// Reactphysics3D namespace /// Reactphysics3D namespace
namespace ephysics { namespace ephysics {
@ -38,12 +38,12 @@ class OverlapCallback : public DynamicAABBTreeOverlapCallback {
public : public :
std::vector<int32_t> mOverlapNodes; etk::Vector<int32_t> mOverlapNodes;
// Called when a overlapping node has been found during the call to // Called when a overlapping node has been found during the call to
// DynamicAABBTree:reportAllShapesOverlappingWithAABB() // DynamicAABBTree:reportAllShapesOverlappingWithAABB()
virtual void notifyOverlappingNode(int32_t nodeId) { virtual void notifyOverlappingNode(int32_t nodeId) {
mOverlapNodes.push_back(nodeId); mOverlapNodes.pushBack(nodeId);
} }
void reset() { void reset() {
@ -59,11 +59,11 @@ class DynamicTreeRaycastCallback : public DynamicAABBTreeRaycastCallback {
public: public:
std::vector<int32_t> mHitNodes; etk::Vector<int32_t> mHitNodes;
// Called when the AABB of a leaf node is hit by a ray // Called when the AABB of a leaf node is hit by a ray
virtual float raycastBroadPhaseShape(int32_t nodeId, const Ray& ray) { virtual float raycastBroadPhaseShape(int32_t nodeId, const Ray& ray) {
mHitNodes.push_back(nodeId); mHitNodes.pushBack(nodeId);
return 1.0; return 1.0;
} }
@ -96,7 +96,7 @@ class TestDynamicAABBTree : public Test {
// ---------- Methods ---------- // // ---------- Methods ---------- //
/// Constructor /// Constructor
TestDynamicAABBTree(const std::string& name): Test(name) { TestDynamicAABBTree(const etk::String& name): Test(name) {
} }

View File

@ -90,7 +90,7 @@ class TestPointInside : public Test {
// ---------- Methods ---------- // // ---------- Methods ---------- //
/// Constructor /// Constructor
TestPointInside(const std::string& name) : Test(name) { TestPointInside(const etk::String& name) : Test(name) {
// Create the world // Create the world
m_world = new CollisionWorld(); m_world = new CollisionWorld();

View File

@ -155,8 +155,8 @@ class TestRaycast : public Test {
// Triangle meshes // Triangle meshes
TriangleMesh mConcaveTriangleMesh; TriangleMesh mConcaveTriangleMesh;
std::vector<vec3> mConcaveMeshVertices; etk::Vector<vec3> mConcaveMeshVertices;
std::vector<uint32_t> mConcaveMeshIndices; etk::Vector<uint32_t> mConcaveMeshIndices;
TriangleVertexArray* mConcaveMeshVertexArray; TriangleVertexArray* mConcaveMeshVertexArray;
float m_heightFieldData[100]; float m_heightFieldData[100];
@ -165,7 +165,7 @@ class TestRaycast : public Test {
// ---------- Methods ---------- // // ---------- Methods ---------- //
/// Constructor /// Constructor
TestRaycast(const std::string& name) : Test(name) { TestRaycast(const etk::String& name) : Test(name) {
epsilon = float(0.0001); epsilon = float(0.0001);
@ -267,27 +267,27 @@ class TestRaycast : public Test {
mCompoundSphereProxyShape = mCompoundBody->addCollisionShape(mSphereShape, shapeTransform2); mCompoundSphereProxyShape = mCompoundBody->addCollisionShape(mSphereShape, shapeTransform2);
// Concave Mesh shape // Concave Mesh shape
mConcaveMeshVertices.push_back(vec3(-2, -3, -4)); mConcaveMeshVertices.pushBack(vec3(-2, -3, -4));
mConcaveMeshVertices.push_back(vec3(2, -3, -4)); mConcaveMeshVertices.pushBack(vec3(2, -3, -4));
mConcaveMeshVertices.push_back(vec3(2, -3, 4)); mConcaveMeshVertices.pushBack(vec3(2, -3, 4));
mConcaveMeshVertices.push_back(vec3(-2, -3, 4)); mConcaveMeshVertices.pushBack(vec3(-2, -3, 4));
mConcaveMeshVertices.push_back(vec3(-2, 3, -4)); mConcaveMeshVertices.pushBack(vec3(-2, 3, -4));
mConcaveMeshVertices.push_back(vec3(2, 3, -4)); mConcaveMeshVertices.pushBack(vec3(2, 3, -4));
mConcaveMeshVertices.push_back(vec3(2, 3, 4)); mConcaveMeshVertices.pushBack(vec3(2, 3, 4));
mConcaveMeshVertices.push_back(vec3(-2, 3, 4)); mConcaveMeshVertices.pushBack(vec3(-2, 3, 4));
mConcaveMeshIndices.push_back(0); mConcaveMeshIndices.push_back(1); mConcaveMeshIndices.push_back(2); mConcaveMeshIndices.pushBack(0); mConcaveMeshIndices.pushBack(1); mConcaveMeshIndices.push_back(2);
mConcaveMeshIndices.push_back(0); mConcaveMeshIndices.push_back(2); mConcaveMeshIndices.push_back(3); mConcaveMeshIndices.pushBack(0); mConcaveMeshIndices.pushBack(2); mConcaveMeshIndices.push_back(3);
mConcaveMeshIndices.push_back(1); mConcaveMeshIndices.push_back(5); mConcaveMeshIndices.push_back(2); mConcaveMeshIndices.pushBack(1); mConcaveMeshIndices.pushBack(5); mConcaveMeshIndices.push_back(2);
mConcaveMeshIndices.push_back(2); mConcaveMeshIndices.push_back(5); mConcaveMeshIndices.push_back(6); mConcaveMeshIndices.pushBack(2); mConcaveMeshIndices.pushBack(5); mConcaveMeshIndices.push_back(6);
mConcaveMeshIndices.push_back(2); mConcaveMeshIndices.push_back(7); mConcaveMeshIndices.push_back(3); mConcaveMeshIndices.pushBack(2); mConcaveMeshIndices.pushBack(7); mConcaveMeshIndices.push_back(3);
mConcaveMeshIndices.push_back(2); mConcaveMeshIndices.push_back(6); mConcaveMeshIndices.push_back(7); mConcaveMeshIndices.pushBack(2); mConcaveMeshIndices.pushBack(6); mConcaveMeshIndices.push_back(7);
mConcaveMeshIndices.push_back(0); mConcaveMeshIndices.push_back(3); mConcaveMeshIndices.push_back(4); mConcaveMeshIndices.pushBack(0); mConcaveMeshIndices.pushBack(3); mConcaveMeshIndices.push_back(4);
mConcaveMeshIndices.push_back(3); mConcaveMeshIndices.push_back(7); mConcaveMeshIndices.push_back(4); mConcaveMeshIndices.pushBack(3); mConcaveMeshIndices.pushBack(7); mConcaveMeshIndices.push_back(4);
mConcaveMeshIndices.push_back(0); mConcaveMeshIndices.push_back(4); mConcaveMeshIndices.push_back(1); mConcaveMeshIndices.pushBack(0); mConcaveMeshIndices.pushBack(4); mConcaveMeshIndices.push_back(1);
mConcaveMeshIndices.push_back(1); mConcaveMeshIndices.push_back(4); mConcaveMeshIndices.push_back(5); mConcaveMeshIndices.pushBack(1); mConcaveMeshIndices.pushBack(4); mConcaveMeshIndices.push_back(5);
mConcaveMeshIndices.push_back(5); mConcaveMeshIndices.push_back(7); mConcaveMeshIndices.push_back(6); mConcaveMeshIndices.pushBack(5); mConcaveMeshIndices.pushBack(7); mConcaveMeshIndices.push_back(6);
mConcaveMeshIndices.push_back(4); mConcaveMeshIndices.push_back(7); mConcaveMeshIndices.push_back(5); mConcaveMeshIndices.pushBack(4); mConcaveMeshIndices.pushBack(7); mConcaveMeshIndices.push_back(5);
TriangleVertexArray::VertexDataType vertexType = sizeof(float) == 4 ? TriangleVertexArray::VERTEX_FLOAT_TYPE : TriangleVertexArray::VertexDataType vertexType = sizeof(float) == 4 ? TriangleVertexArray::VERTEX_FLOAT_TYPE :
TriangleVertexArray::VERTEX_DOUBLE_TYPE; TriangleVertexArray::VERTEX_DOUBLE_TYPE;
mConcaveMeshVertexArray = mConcaveMeshVertexArray =

View File

@ -50,7 +50,7 @@ class TestMathematicsFunctions : public Test {
// ---------- Methods ---------- // // ---------- Methods ---------- //
/// Constructor /// Constructor
TestMathematicsFunctions(const std::string& name): Test(name) {} TestMathematicsFunctions(const etk::String& name): Test(name) {}
/// Run the tests /// Run the tests
void run() { void run() {

View File

@ -54,7 +54,7 @@ class Testetk::Matrix2x2 : public Test {
// ---------- Methods ---------- // // ---------- Methods ---------- //
/// Constructor /// Constructor
Testetk::Matrix2x2(const std::string& name) Testetk::Matrix2x2(const etk::String& name)
: Test(name), mIdentity(etk::Matrix2x2::identity()), mMatrix1(2, 24, -4, 5) { : Test(name), mIdentity(etk::Matrix2x2::identity()), mMatrix1(2, 24, -4, 5) {
} }

View File

@ -54,7 +54,7 @@ class Testetk::Matrix3x3 : public Test {
// ---------- Methods ---------- // // ---------- Methods ---------- //
/// Constructor /// Constructor
Testetk::Matrix3x3(const std::string& name) Testetk::Matrix3x3(const etk::String& name)
: Test(name), mIdentity(etk::Matrix3x3::identity()), : Test(name), mIdentity(etk::Matrix3x3::identity()),
mMatrix1(2, 24, 4, 5, -6, 234, -15, 11, 66) { mMatrix1(2, 24, 4, 5, -6, 234, -15, 11, 66) {

View File

@ -54,7 +54,7 @@ class Testetk::Quaternion : public Test {
// ---------- Methods ---------- // // ---------- Methods ---------- //
/// Constructor /// Constructor
Testetk::Quaternion(const std::string& name) : Test(name), mIdentity(Quaternion::identity()) { Testetk::Quaternion(const etk::String& name) : Test(name), mIdentity(Quaternion::identity()) {
float sinA = sin(float(PI/8.0)); float sinA = sin(float(PI/8.0));
float cosA = cos(float(PI/8.0)); float cosA = cos(float(PI/8.0));

View File

@ -57,7 +57,7 @@ class Testetk::Transform3D : public Test {
// ---------- Methods ---------- // // ---------- Methods ---------- //
/// Constructor /// Constructor
Testetk::Transform3D(const std::string& name) : Test(name) { Testetk::Transform3D(const etk::String& name) : Test(name) {
mIdentityetk::Transform3D.setToIdentity(); mIdentityetk::Transform3D.setToIdentity();

View File

@ -54,7 +54,7 @@ class Testvec2 : public Test {
// ---------- Methods ---------- // // ---------- Methods ---------- //
/// Constructor /// Constructor
Testvec2(const std::string& name) : Test(name), mVectorZero(0, 0), mvec34(3, 4) {} Testvec2(const etk::String& name) : Test(name), mVectorZero(0, 0), mvec34(3, 4) {}
/// Run the tests /// Run the tests
void run() { void run() {

View File

@ -54,7 +54,7 @@ class Testvec3 : public Test {
// ---------- Methods ---------- // // ---------- Methods ---------- //
/// Constructor /// Constructor
Testvec3(const std::string& name): Test(name),mVectorZero(0, 0, 0),mvec345(3, 4, 5) {} Testvec3(const etk::String& name): Test(name),mVectorZero(0, 0, 0),mvec345(3, 4, 5) {}
/// Run the tests /// Run the tests
void run() { void run() {

View File

@ -36,7 +36,7 @@ int32_t Capsule::totalNbCapsules = 0;
// Constructor // Constructor
Capsule::Capsule(float radius, float height, const openglframework::vec3& position, Capsule::Capsule(float radius, float height, const openglframework::vec3& position,
ephysics::CollisionWorld* world, ephysics::CollisionWorld* world,
const std::string& meshFolderPath) const etk::String& meshFolderPath)
: openglframework::Mesh(), mRadius(radius), mHeight(height) { : openglframework::Mesh(), mRadius(radius), mHeight(height) {
// Load the mesh from a file // Load the mesh from a file
@ -85,7 +85,7 @@ Capsule::Capsule(float radius, float height, const openglframework::vec3& positi
// Constructor // Constructor
Capsule::Capsule(float radius, float height, const openglframework::vec3& position, Capsule::Capsule(float radius, float height, const openglframework::vec3& position,
float mass, ephysics::DynamicsWorld* dynamicsWorld, float mass, ephysics::DynamicsWorld* dynamicsWorld,
const std::string& meshFolderPath) const etk::String& meshFolderPath)
: openglframework::Mesh(), mRadius(radius), mHeight(height) { : openglframework::Mesh(), mRadius(radius), mHeight(height) {
// Load the mesh from a file // Load the mesh from a file

View File

@ -83,12 +83,12 @@ class Capsule : public openglframework::Mesh, public PhysicsObject {
/// Constructor /// Constructor
Capsule(float radius, float height, const openglframework::vec3& position, Capsule(float radius, float height, const openglframework::vec3& position,
ephysics::CollisionWorld* world, const std::string& meshFolderPath); ephysics::CollisionWorld* world, const etk::String& meshFolderPath);
/// Constructor /// Constructor
Capsule(float radius, float height, const openglframework::vec3& position, Capsule(float radius, float height, const openglframework::vec3& position,
float mass, ephysics::DynamicsWorld* dynamicsWorld, float mass, ephysics::DynamicsWorld* dynamicsWorld,
const std::string& meshFolderPath); const etk::String& meshFolderPath);
/// Destructor /// Destructor
~Capsule(); ~Capsule();

View File

@ -29,7 +29,7 @@
// Constructor // Constructor
ConcaveMesh::ConcaveMesh(const openglframework::vec3 &position, ConcaveMesh::ConcaveMesh(const openglframework::vec3 &position,
ephysics::CollisionWorld* world, ephysics::CollisionWorld* world,
const std::string& meshPath) const etk::String& meshPath)
: openglframework::Mesh(), mVBOVertices(GL_ARRAY_BUFFER), : openglframework::Mesh(), mVBOVertices(GL_ARRAY_BUFFER),
mVBONormals(GL_ARRAY_BUFFER), mVBOTextureCoords(GL_ARRAY_BUFFER), mVBONormals(GL_ARRAY_BUFFER), mVBOTextureCoords(GL_ARRAY_BUFFER),
mVBOIndices(GL_ELEMENT_ARRAY_BUFFER) { mVBOIndices(GL_ELEMENT_ARRAY_BUFFER) {
@ -86,7 +86,7 @@ ConcaveMesh::ConcaveMesh(const openglframework::vec3 &position,
// Constructor // Constructor
ConcaveMesh::ConcaveMesh(const openglframework::vec3 &position, float mass, ConcaveMesh::ConcaveMesh(const openglframework::vec3 &position, float mass,
ephysics::DynamicsWorld* dynamicsWorld, ephysics::DynamicsWorld* dynamicsWorld,
const std::string& meshPath) const etk::String& meshPath)
: openglframework::Mesh(), mVBOVertices(GL_ARRAY_BUFFER), : openglframework::Mesh(), mVBOVertices(GL_ARRAY_BUFFER),
mVBONormals(GL_ARRAY_BUFFER), mVBOTextureCoords(GL_ARRAY_BUFFER), mVBONormals(GL_ARRAY_BUFFER), mVBOTextureCoords(GL_ARRAY_BUFFER),
mVBOIndices(GL_ELEMENT_ARRAY_BUFFER) { mVBOIndices(GL_ELEMENT_ARRAY_BUFFER) {

View File

@ -77,11 +77,11 @@ class ConcaveMesh : public openglframework::Mesh, public PhysicsObject {
/// Constructor /// Constructor
ConcaveMesh(const openglframework::vec3& position, ConcaveMesh(const openglframework::vec3& position,
ephysics::CollisionWorld* world, const std::string& meshPath); ephysics::CollisionWorld* world, const etk::String& meshPath);
/// Constructor /// Constructor
ConcaveMesh(const openglframework::vec3& position, float mass, ConcaveMesh(const openglframework::vec3& position, float mass,
ephysics::DynamicsWorld* dynamicsWorld, const std::string& meshPath); ephysics::DynamicsWorld* dynamicsWorld, const etk::String& meshPath);
/// Destructor /// Destructor
~ConcaveMesh(); ~ConcaveMesh();

View File

@ -36,7 +36,7 @@ int32_t Cone::totalNbCones = 0;
// Constructor // Constructor
Cone::Cone(float radius, float height, const openglframework::vec3 &position, Cone::Cone(float radius, float height, const openglframework::vec3 &position,
ephysics::CollisionWorld* world, ephysics::CollisionWorld* world,
const std::string& meshFolderPath) const etk::String& meshFolderPath)
: openglframework::Mesh(), mRadius(radius), mHeight(height) { : openglframework::Mesh(), mRadius(radius), mHeight(height) {
// Load the mesh from a file // Load the mesh from a file
@ -84,7 +84,7 @@ Cone::Cone(float radius, float height, const openglframework::vec3 &position,
// Constructor // Constructor
Cone::Cone(float radius, float height, const openglframework::vec3 &position, Cone::Cone(float radius, float height, const openglframework::vec3 &position,
float mass, ephysics::DynamicsWorld* dynamicsWorld, float mass, ephysics::DynamicsWorld* dynamicsWorld,
const std::string& meshFolderPath) const etk::String& meshFolderPath)
: openglframework::Mesh(), mRadius(radius), mHeight(height) { : openglframework::Mesh(), mRadius(radius), mHeight(height) {
// Load the mesh from a file // Load the mesh from a file

View File

@ -83,11 +83,11 @@ class Cone : public openglframework::Mesh, public PhysicsObject {
/// Constructor /// Constructor
Cone(float radius, float height, const openglframework::vec3& position, Cone(float radius, float height, const openglframework::vec3& position,
ephysics::CollisionWorld* world, const std::string& meshFolderPath); ephysics::CollisionWorld* world, const etk::String& meshFolderPath);
/// Constructor /// Constructor
Cone(float radius, float height, const openglframework::vec3& position, Cone(float radius, float height, const openglframework::vec3& position,
float mass, ephysics::DynamicsWorld* dynamicsWorld, const std::string& meshFolderPath); float mass, ephysics::DynamicsWorld* dynamicsWorld, const etk::String& meshFolderPath);
/// Destructor /// Destructor
~Cone(); ~Cone();

View File

@ -29,7 +29,7 @@
// Constructor // Constructor
ConvexMesh::ConvexMesh(const openglframework::vec3 &position, ConvexMesh::ConvexMesh(const openglframework::vec3 &position,
ephysics::CollisionWorld* world, ephysics::CollisionWorld* world,
const std::string& meshPath) const etk::String& meshPath)
: openglframework::Mesh(), mVBOVertices(GL_ARRAY_BUFFER), : openglframework::Mesh(), mVBOVertices(GL_ARRAY_BUFFER),
mVBONormals(GL_ARRAY_BUFFER), mVBOTextureCoords(GL_ARRAY_BUFFER), mVBONormals(GL_ARRAY_BUFFER), mVBOTextureCoords(GL_ARRAY_BUFFER),
mVBOIndices(GL_ELEMENT_ARRAY_BUFFER) { mVBOIndices(GL_ELEMENT_ARRAY_BUFFER) {
@ -80,7 +80,7 @@ ConvexMesh::ConvexMesh(const openglframework::vec3 &position,
// Constructor // Constructor
ConvexMesh::ConvexMesh(const openglframework::vec3 &position, float mass, ConvexMesh::ConvexMesh(const openglframework::vec3 &position, float mass,
ephysics::DynamicsWorld* dynamicsWorld, ephysics::DynamicsWorld* dynamicsWorld,
const std::string& meshPath) const etk::String& meshPath)
: openglframework::Mesh(), mVBOVertices(GL_ARRAY_BUFFER), : openglframework::Mesh(), mVBOVertices(GL_ARRAY_BUFFER),
mVBONormals(GL_ARRAY_BUFFER), mVBOTextureCoords(GL_ARRAY_BUFFER), mVBONormals(GL_ARRAY_BUFFER), mVBOTextureCoords(GL_ARRAY_BUFFER),
mVBOIndices(GL_ELEMENT_ARRAY_BUFFER) { mVBOIndices(GL_ELEMENT_ARRAY_BUFFER) {

View File

@ -76,11 +76,11 @@ class ConvexMesh : public openglframework::Mesh, public PhysicsObject {
/// Constructor /// Constructor
ConvexMesh(const openglframework::vec3& position, ConvexMesh(const openglframework::vec3& position,
ephysics::CollisionWorld* world, const std::string& meshPath); ephysics::CollisionWorld* world, const etk::String& meshPath);
/// Constructor /// Constructor
ConvexMesh(const openglframework::vec3& position, float mass, ConvexMesh(const openglframework::vec3& position, float mass,
ephysics::DynamicsWorld* dynamicsWorld, const std::string& meshPath); ephysics::DynamicsWorld* dynamicsWorld, const etk::String& meshPath);
/// Destructor /// Destructor
~ConvexMesh(); ~ConvexMesh();

View File

@ -36,7 +36,7 @@ int32_t Cylinder::totalNbCylinders = 0;
// Constructor // Constructor
Cylinder::Cylinder(float radius, float height, const openglframework::vec3& position, Cylinder::Cylinder(float radius, float height, const openglframework::vec3& position,
ephysics::CollisionWorld* world, ephysics::CollisionWorld* world,
const std::string& meshFolderPath) const etk::String& meshFolderPath)
: openglframework::Mesh(), mRadius(radius), mHeight(height) { : openglframework::Mesh(), mRadius(radius), mHeight(height) {
// Load the mesh from a file // Load the mesh from a file
@ -84,7 +84,7 @@ Cylinder::Cylinder(float radius, float height, const openglframework::vec3& posi
// Constructor // Constructor
Cylinder::Cylinder(float radius, float height, const openglframework::vec3& position, Cylinder::Cylinder(float radius, float height, const openglframework::vec3& position,
float mass, ephysics::DynamicsWorld* dynamicsWorld, float mass, ephysics::DynamicsWorld* dynamicsWorld,
const std::string& meshFolderPath) const etk::String& meshFolderPath)
: openglframework::Mesh(), mRadius(radius), mHeight(height) { : openglframework::Mesh(), mRadius(radius), mHeight(height) {
// Load the mesh from a file // Load the mesh from a file

View File

@ -83,11 +83,11 @@ class Cylinder : public openglframework::Mesh, public PhysicsObject {
/// Constructor /// Constructor
Cylinder(float radius, float height, const openglframework::vec3& position, Cylinder(float radius, float height, const openglframework::vec3& position,
ephysics::CollisionWorld* world, const std::string &meshFolderPath); ephysics::CollisionWorld* world, const etk::String &meshFolderPath);
/// Constructor /// Constructor
Cylinder(float radius, float height, const openglframework::vec3& position, Cylinder(float radius, float height, const openglframework::vec3& position,
float mass, ephysics::DynamicsWorld* dynamicsWorld, const std::string &meshFolderPath); float mass, ephysics::DynamicsWorld* dynamicsWorld, const etk::String &meshFolderPath);
/// Destructor /// Destructor
~Cylinder(); ~Cylinder();

View File

@ -35,7 +35,7 @@ int32_t Dumbbell::totalNbDumbbells = 0;
// Constructor // Constructor
Dumbbell::Dumbbell(const openglframework::vec3 &position, Dumbbell::Dumbbell(const openglframework::vec3 &position,
ephysics::DynamicsWorld* dynamicsWorld, const std::string& meshFolderPath) ephysics::DynamicsWorld* dynamicsWorld, const etk::String& meshFolderPath)
: openglframework::Mesh() { : openglframework::Mesh() {
// Load the mesh from a file // Load the mesh from a file
@ -106,7 +106,7 @@ Dumbbell::Dumbbell(const openglframework::vec3 &position,
// Constructor // Constructor
Dumbbell::Dumbbell(const openglframework::vec3 &position, Dumbbell::Dumbbell(const openglframework::vec3 &position,
ephysics::CollisionWorld* world, const std::string& meshFolderPath) ephysics::CollisionWorld* world, const etk::String& meshFolderPath)
: openglframework::Mesh() { : openglframework::Mesh() {
// Load the mesh from a file // Load the mesh from a file

View File

@ -83,11 +83,11 @@ class Dumbbell : public openglframework::Mesh, public PhysicsObject {
/// Constructor /// Constructor
Dumbbell(const openglframework::vec3& position, ephysics::DynamicsWorld* dynamicsWorld, Dumbbell(const openglframework::vec3& position, ephysics::DynamicsWorld* dynamicsWorld,
const std::string& meshFolderPath); const etk::String& meshFolderPath);
/// Constructor /// Constructor
Dumbbell(const openglframework::vec3& position, ephysics::CollisionWorld* world, Dumbbell(const openglframework::vec3& position, ephysics::CollisionWorld* world,
const std::string& meshFolderPath); const etk::String& meshFolderPath);
/// Destructor /// Destructor

View File

@ -224,7 +224,7 @@ void HeightField::generateHeightField() {
// Generate the graphics mesh to render the height field // Generate the graphics mesh to render the height field
void HeightField::generateGraphicsMesh() { void HeightField::generateGraphicsMesh() {
std::vector<uint32_t> indices; etk::Vector<uint32_t> indices;
int32_t vertexId = 0; int32_t vertexId = 0;
for (int32_t i=0; i<NB_POINTS_WIDTH; i++) { for (int32_t i=0; i<NB_POINTS_WIDTH; i++) {
@ -234,7 +234,7 @@ void HeightField::generateGraphicsMesh() {
float height = originHeight + mHeightData[j * NB_POINTS_WIDTH + i]; float height = originHeight + mHeightData[j * NB_POINTS_WIDTH + i];
openglframework::vec3 vertex(-(NB_POINTS_WIDTH - 1) * 0.5f + i, height, -(NB_POINTS_LENGTH - 1) * 0.5f + j); openglframework::vec3 vertex(-(NB_POINTS_WIDTH - 1) * 0.5f + i, height, -(NB_POINTS_LENGTH - 1) * 0.5f + j);
m_vertices.push_back(vertex); m_vertices.pushBack(vertex);
// Triangle indices // Triangle indices
if ((i < NB_POINTS_WIDTH - 1) && (j < NB_POINTS_LENGTH - 1)) { if ((i < NB_POINTS_WIDTH - 1) && (j < NB_POINTS_LENGTH - 1)) {
@ -245,21 +245,21 @@ void HeightField::generateGraphicsMesh() {
uint32_t v4 = vertexId + NB_POINTS_LENGTH + 1; uint32_t v4 = vertexId + NB_POINTS_LENGTH + 1;
// First triangle // First triangle
indices.push_back(v1); indices.pushBack(v1);
indices.push_back(v2); indices.pushBack(v2);
indices.push_back(v3); indices.pushBack(v3);
// Second triangle // Second triangle
indices.push_back(v2); indices.pushBack(v2);
indices.push_back(v4); indices.pushBack(v4);
indices.push_back(v3); indices.pushBack(v3);
} }
vertexId++; vertexId++;
} }
} }
mIndices.push_back(indices); mIndices.pushBack(indices);
calculateNormals(); calculateNormals();
} }

View File

@ -36,7 +36,7 @@ int32_t Sphere::totalNbSpheres = 0;
// Constructor // Constructor
Sphere::Sphere(float radius, const openglframework::vec3 &position, Sphere::Sphere(float radius, const openglframework::vec3 &position,
ephysics::CollisionWorld* world, ephysics::CollisionWorld* world,
const std::string& meshFolderPath) const etk::String& meshFolderPath)
: openglframework::Mesh(), mRadius(radius) { : openglframework::Mesh(), mRadius(radius) {
// Load the mesh from a file // Load the mesh from a file
@ -85,7 +85,7 @@ Sphere::Sphere(float radius, const openglframework::vec3 &position,
// Constructor // Constructor
Sphere::Sphere(float radius, const openglframework::vec3 &position, Sphere::Sphere(float radius, const openglframework::vec3 &position,
float mass, ephysics::DynamicsWorld* world, float mass, ephysics::DynamicsWorld* world,
const std::string& meshFolderPath) const etk::String& meshFolderPath)
: openglframework::Mesh(), mRadius(radius) { : openglframework::Mesh(), mRadius(radius) {
// Load the mesh from a file // Load the mesh from a file

View File

@ -80,11 +80,11 @@ class Sphere : public openglframework::Mesh, public PhysicsObject {
/// Constructor /// Constructor
Sphere(float radius, const openglframework::vec3& position, Sphere(float radius, const openglframework::vec3& position,
ephysics::CollisionWorld* world, const std::string& meshFolderPath); ephysics::CollisionWorld* world, const etk::String& meshFolderPath);
/// Constructor /// Constructor
Sphere(float radius, const openglframework::vec3& position, Sphere(float radius, const openglframework::vec3& position,
float mass, ephysics::DynamicsWorld* dynamicsWorld, const std::string& meshFolderPath); float mass, ephysics::DynamicsWorld* dynamicsWorld, const etk::String& meshFolderPath);
/// Destructor /// Destructor
~Sphere(); ~Sphere();

View File

@ -37,7 +37,7 @@ bool VisualContactPoint::mStaticDataCreated = false;
// Constructor // Constructor
VisualContactPoint::VisualContactPoint(const openglframework::vec3& position, VisualContactPoint::VisualContactPoint(const openglframework::vec3& position,
const std::string& meshFolderPath) const etk::String& meshFolderPath)
: mColor(1.0f, 0.0f, 0.0f, 1.0f) { : mColor(1.0f, 0.0f, 0.0f, 1.0f) {
// Initialize the position where the mesh will be rendered // Initialize the position where the mesh will be rendered
@ -50,7 +50,7 @@ VisualContactPoint::~VisualContactPoint() {
} }
// Load and initialize the mesh for all the contact points // Load and initialize the mesh for all the contact points
void VisualContactPoint::createStaticData(const std::string& meshFolderPath) { void VisualContactPoint::createStaticData(const etk::String& meshFolderPath) {
if (mStaticDataCreated) return; if (mStaticDataCreated) return;

View File

@ -73,13 +73,13 @@ class VisualContactPoint : public openglframework::Object3D {
/// Constructor /// Constructor
VisualContactPoint(const openglframework::vec3& position, VisualContactPoint(const openglframework::vec3& position,
const std::string &meshFolderPath); const etk::String &meshFolderPath);
/// Destructor /// Destructor
~VisualContactPoint(); ~VisualContactPoint();
/// Load and initialize the mesh for all the contact points /// Load and initialize the mesh for all the contact points
static void createStaticData(const std::string& meshFolderPath); static void createStaticData(const etk::String& meshFolderPath);
/// Destroy the mesh for the contact points /// Destroy the mesh for the contact points
static void destroyStaticData(); static void destroyStaticData();

View File

@ -91,7 +91,7 @@ void Mesh::calculateNormals() {
// Compute the tangents of the mesh // Compute the tangents of the mesh
void Mesh::calculateTangents() { void Mesh::calculateTangents() {
mTangents = std::vector<vec3>(getNbVertices(), vec3(0, 0, 0)); mTangents = etk::Vector<vec3>(getNbVertices(), vec3(0, 0, 0));
// For each face // For each face
for (uint32_t i=0; i<getNbFaces(); i++) { for (uint32_t i=0; i<getNbFaces(); i++) {
@ -144,7 +144,7 @@ void Mesh::calculateBoundingBox(vec3& min, vec3& max) const {
min = m_vertices[0]; min = m_vertices[0];
max = m_vertices[0]; max = m_vertices[0];
std::vector<vec3>::const_iterator it(m_vertices.begin()); etk::Vector<vec3>::const_iterator it(m_vertices.begin());
// For each vertex of the mesh // For each vertex of the mesh
for (; it != m_vertices.end(); ++it) { for (; it != m_vertices.end(); ++it) {

View File

@ -27,9 +27,9 @@
#define MESH_H #define MESH_H
// Libraries // Libraries
#include <string> #include <etk/String.hpp>
#include <vector> #include <etk/Vector.hpp>
#include <map> #include <etk/Map.hpp>
#include <ephysics/definitions.hpp> #include <ephysics/definitions.hpp>
#include <ephysics/maths/vec2.hpp> #include <ephysics/maths/vec2.hpp>
#include <ephysics/maths/vec3.hpp> #include <ephysics/maths/vec3.hpp>
@ -49,25 +49,25 @@ class Mesh : public Object3D {
// -------------------- Attributes -------------------- // // -------------------- Attributes -------------------- //
// A triplet of vertex indices for each triangle // A triplet of vertex indices for each triangle
std::vector<std::vector<uint32_t> > mIndices; etk::Vector<etk::Vector<uint32_t> > mIndices;
// Vertices coordinates (local space) // Vertices coordinates (local space)
std::vector<vec3> m_vertices; etk::Vector<vec3> m_vertices;
// Normals coordinates // Normals coordinates
std::vector<vec3> mNormals; etk::Vector<vec3> mNormals;
// Tangents coordinates // Tangents coordinates
std::vector<vec3> mTangents; etk::Vector<vec3> mTangents;
// Color for each vertex // Color for each vertex
std::vector<Color> mColors; etk::Vector<Color> mColors;
// UV texture coordinates // UV texture coordinates
std::vector<vec2> mUVs; etk::Vector<vec2> mUVs;
// Textures of the mesh (one for each part of the mesh) // Textures of the mesh (one for each part of the mesh)
std::map<uint32_t, Texture2D> mTextures; etk::Map<uint32_t, Texture2D> mTextures;
public: public:
@ -104,28 +104,28 @@ class Mesh : public Object3D {
uint32_t getNbParts() const; uint32_t getNbParts() const;
// Return a reference to the vertices // Return a reference to the vertices
const std::vector<vec3>& getVertices() const; const etk::Vector<vec3>& getVertices() const;
// Set the vertices of the mesh // Set the vertices of the mesh
void setVertices(std::vector<vec3>& vertices); void setVertices(etk::Vector<vec3>& vertices);
// Return a reference to the normals // Return a reference to the normals
const std::vector<vec3>& getNormals() const; const etk::Vector<vec3>& getNormals() const;
// set the normals of the mesh // set the normals of the mesh
void setNormals(std::vector<vec3>& normals); void setNormals(etk::Vector<vec3>& normals);
// Return a reference to the UVs // Return a reference to the UVs
const std::vector<vec2>& getUVs() const; const etk::Vector<vec2>& getUVs() const;
// Set the UV texture coordinates of the mesh // Set the UV texture coordinates of the mesh
void setUVs(std::vector<vec2>& uvs); void setUVs(etk::Vector<vec2>& uvs);
// Return a reference to the vertex indices // Return a reference to the vertex indices
const std::vector<uint32_t>& getIndices(uint32_t part = 0) const; const etk::Vector<uint32_t>& getIndices(uint32_t part = 0) const;
// Set the vertices indices of the mesh // Set the vertices indices of the mesh
void setIndices(std::vector<std::vector<uint32_t> >& indices); void setIndices(etk::Vector<etk::Vector<uint32_t> >& indices);
// Return the coordinates of a given vertex // Return the coordinates of a given vertex
const vec3& getVertex(uint32_t i) const; const vec3& getVertex(uint32_t i) const;
@ -218,42 +218,42 @@ inline uint32_t Mesh::getNbParts() const {
} }
// Return a reference to the vertices // Return a reference to the vertices
inline const std::vector<vec3>& Mesh::getVertices() const { inline const etk::Vector<vec3>& Mesh::getVertices() const {
return m_vertices; return m_vertices;
} }
// Set the vertices of the mesh // Set the vertices of the mesh
inline void Mesh::setVertices(std::vector<vec3>& vertices) { inline void Mesh::setVertices(etk::Vector<vec3>& vertices) {
m_vertices = vertices; m_vertices = vertices;
} }
// Return a reference to the normals // Return a reference to the normals
inline const std::vector<vec3>& Mesh::getNormals() const { inline const etk::Vector<vec3>& Mesh::getNormals() const {
return mNormals; return mNormals;
} }
// set the normals of the mesh // set the normals of the mesh
inline void Mesh::setNormals(std::vector<vec3>& normals) { inline void Mesh::setNormals(etk::Vector<vec3>& normals) {
mNormals = normals; mNormals = normals;
} }
// Return a reference to the UVs // Return a reference to the UVs
inline const std::vector<vec2>& Mesh::getUVs() const { inline const etk::Vector<vec2>& Mesh::getUVs() const {
return mUVs; return mUVs;
} }
// Set the UV texture coordinates of the mesh // Set the UV texture coordinates of the mesh
inline void Mesh::setUVs(std::vector<vec2>& uvs) { inline void Mesh::setUVs(etk::Vector<vec2>& uvs) {
mUVs = uvs; mUVs = uvs;
} }
// Return a reference to the vertex indices // Return a reference to the vertex indices
inline const std::vector<uint32_t>& Mesh::getIndices(uint32_t part) const { inline const etk::Vector<uint32_t>& Mesh::getIndices(uint32_t part) const {
return mIndices[part]; return mIndices[part];
} }
// Set the vertices indices of the mesh // Set the vertices indices of the mesh
inline void Mesh::setIndices(std::vector<std::vector<uint32_t> >& indices) { inline void Mesh::setIndices(etk::Vector<etk::Vector<uint32_t> >& indices) {
mIndices = indices; mIndices = indices;
} }
@ -295,7 +295,7 @@ inline void Mesh::setVertexColor(uint32_t i, const Color& color) {
if (mColors.size() != m_vertices.size()) { if (mColors.size() != m_vertices.size()) {
// Create the color array with the same size // Create the color array with the same size
mColors = std::vector<Color>(m_vertices.size()); mColors = etk::Vector<Color>(m_vertices.size());
} }
mColors[i] = color; mColors[i] = color;
@ -309,7 +309,7 @@ inline void Mesh::setColorToAllVertices(const Color& color) {
if (mColors.size() != m_vertices.size()) { if (mColors.size() != m_vertices.size()) {
// Create the color array with the same size // Create the color array with the same size
mColors = std::vector<Color>(m_vertices.size()); mColors = etk::Vector<Color>(m_vertices.size());
} }
for (size_t v=0; v<m_vertices.size(); v++) { for (size_t v=0; v<m_vertices.size(); v++) {

View File

@ -29,7 +29,7 @@
#include <sstream> #include <sstream>
#include <locale> #include <locale>
#include <cctype> #include <cctype>
#include <map> #include <etk/Map.hpp>
#include <algorithm> #include <algorithm>
using namespace openglframework; using namespace openglframework;
@ -41,7 +41,7 @@ MeshReaderWriter::MeshReaderWriter() {
} }
// Load a mesh from a file and returns true if the mesh has been sucessfully loaded // Load a mesh from a file and returns true if the mesh has been sucessfully loaded
void MeshReaderWriter::loadMeshFromFile(const std::string& filename, Mesh& meshToCreate) { void MeshReaderWriter::loadMeshFromFile(const etk::String& filename, Mesh& meshToCreate) {
// Get the extension of the file // Get the extension of the file
uint32_t startPosExtension = filename.find_last_of("."); uint32_t startPosExtension = filename.find_last_of(".");
@ -62,7 +62,7 @@ void MeshReaderWriter::loadMeshFromFile(const std::string& filename, Mesh& meshT
} }
// Write a mesh to a file // Write a mesh to a file
void MeshReaderWriter::writeMeshToFile(const std::string& filename, const Mesh& meshToWrite) { void MeshReaderWriter::writeMeshToFile(const etk::String& filename, const Mesh& meshToWrite) {
// Get the extension of the file // Get the extension of the file
uint32_t startPosExtension = filename.find_last_of("."); uint32_t startPosExtension = filename.find_last_of(".");
@ -97,20 +97,20 @@ void MeshReaderWriter::loadOBJFile(const string &filename, Mesh& meshToCreate) {
throw runtime_error(errorMessage); throw runtime_error(errorMessage);
} }
std::string buffer; etk::String buffer;
string line, tmp; string line, tmp;
int32_t id1, id2, id3, id4; int32_t id1, id2, id3, id4;
int32_t nId1, nId2, nId3, nId4; int32_t nId1, nId2, nId3, nId4;
int32_t tId1, tId2, tId3, tId4; int32_t tId1, tId2, tId3, tId4;
float v1, v2, v3; float v1, v2, v3;
size_t found1, found2; size_t found1, found2;
std::vector<bool> isQuad; etk::Vector<bool> isQuad;
std::vector<vec3> vertices; etk::Vector<vec3> vertices;
std::vector<vec3> normals; etk::Vector<vec3> normals;
std::vector<vec2> uvs; etk::Vector<vec2> uvs;
std::vector<uint32_t> verticesIndices; etk::Vector<uint32_t> verticesIndices;
std::vector<uint32_t> normalsIndices; etk::Vector<uint32_t> normalsIndices;
std::vector<uint32_t> uvsIndices; etk::Vector<uint32_t> uvsIndices;
// ---------- Collect the data from the file ---------- // // ---------- Collect the data from the file ---------- //
@ -118,7 +118,7 @@ void MeshReaderWriter::loadOBJFile(const string &filename, Mesh& meshToCreate) {
while(std::getline(meshFile, buffer)) { while(std::getline(meshFile, buffer)) {
std::istringstream lineStream(buffer); std::istringstream lineStream(buffer);
std::string word; etk::String word;
lineStream >> word; lineStream >> word;
std::transform(word.begin(), word.end(), word.begin(), ::tolower); std::transform(word.begin(), word.end(), word.begin(), ::tolower);
if(word == "usemtl") { // Material definition if(word == "usemtl") { // Material definition
@ -128,15 +128,15 @@ void MeshReaderWriter::loadOBJFile(const string &filename, Mesh& meshToCreate) {
} }
else if(word == "v") { // Vertex position else if(word == "v") { // Vertex position
sscanf(buffer.c_str(), "%*s %f %f %f", &v1, &v2, &v3); sscanf(buffer.c_str(), "%*s %f %f %f", &v1, &v2, &v3);
vertices.push_back(vec3(v1, v2, v3)); vertices.pushBack(vec3(v1, v2, v3));
} }
else if(word == "vt") { // Vertex texture coordinate else if(word == "vt") { // Vertex texture coordinate
sscanf(buffer.c_str(), "%*s %f %f", &v1, &v2); sscanf(buffer.c_str(), "%*s %f %f", &v1, &v2);
uvs.push_back(vec2(v1,v2)); uvs.pushBack(vec2(v1,v2));
} }
else if(word == "vn") { // Vertex normal else if(word == "vn") { // Vertex normal
sscanf(buffer.c_str(), "%*s %f %f %f", &v1, &v2, &v3); sscanf(buffer.c_str(), "%*s %f %f %f", &v1, &v2, &v3);
normals.push_back(vec3(v1 ,v2, v3)); normals.pushBack(vec3(v1 ,v2, v3));
} }
else if (word == "f") { // Face else if (word == "f") { // Face
line = buffer; line = buffer;
@ -166,10 +166,10 @@ void MeshReaderWriter::loadOBJFile(const string &filename, Mesh& meshToCreate) {
if(found2 == string::npos) { if(found2 == string::npos) {
int32_t n = sscanf(buffer.c_str(), "%*s %d/%d %d/%d %d/%d %d/%d", &id1, &tId1, &id2, &tId2, &id3, &tId3, &id4, &tId4); int32_t n = sscanf(buffer.c_str(), "%*s %d/%d %d/%d %d/%d %d/%d", &id1, &tId1, &id2, &tId2, &id3, &tId3, &id4, &tId4);
if (n == 8) isFaceQuad = true; if (n == 8) isFaceQuad = true;
uvsIndices.push_back(tId1-1); uvsIndices.pushBack(tId1-1);
uvsIndices.push_back(tId2-1); uvsIndices.pushBack(tId2-1);
uvsIndices.push_back(tId3-1); uvsIndices.pushBack(tId3-1);
if (isFaceQuad) uvsIndices.push_back(tId4-1); if (isFaceQuad) uvsIndices.pushBack(tId4-1);
} }
else { else {
tmp = line.substr(found1+1); tmp = line.substr(found1+1);
@ -184,22 +184,22 @@ void MeshReaderWriter::loadOBJFile(const string &filename, Mesh& meshToCreate) {
else { else {
int32_t n = sscanf(buffer.c_str(), "%*s %d/%d/%d %d/%d/%d %d/%d/%d %d/%d/%d", &id1, &tId1, &nId1, &id2, &tId2, &nId2, &id3, &tId3, &nId3, &id4, &tId4, &nId4); int32_t n = sscanf(buffer.c_str(), "%*s %d/%d/%d %d/%d/%d %d/%d/%d %d/%d/%d", &id1, &tId1, &nId1, &id2, &tId2, &nId2, &id3, &tId3, &nId3, &id4, &tId4, &nId4);
if (n == 12) isFaceQuad = true; if (n == 12) isFaceQuad = true;
uvsIndices.push_back(tId1-1); uvsIndices.pushBack(tId1-1);
uvsIndices.push_back(tId2-1); uvsIndices.pushBack(tId2-1);
uvsIndices.push_back(tId3-1); uvsIndices.pushBack(tId3-1);
if (isFaceQuad) uvsIndices.push_back(tId4-1); if (isFaceQuad) uvsIndices.pushBack(tId4-1);
} }
normalsIndices.push_back(nId1-1); normalsIndices.pushBack(nId1-1);
normalsIndices.push_back(nId2-1); normalsIndices.pushBack(nId2-1);
normalsIndices.push_back(nId3-1); normalsIndices.pushBack(nId3-1);
if (isFaceQuad) normalsIndices.push_back(nId4-1); if (isFaceQuad) normalsIndices.pushBack(nId4-1);
} }
} }
verticesIndices.push_back(id1-1); verticesIndices.pushBack(id1-1);
verticesIndices.push_back(id2-1); verticesIndices.pushBack(id2-1);
verticesIndices.push_back(id3-1); verticesIndices.pushBack(id3-1);
if (isFaceQuad) verticesIndices.push_back((id4-1)); if (isFaceQuad) verticesIndices.pushBack((id4-1));
isQuad.push_back(isFaceQuad); isQuad.pushBack(isFaceQuad);
} }
} }
@ -214,7 +214,7 @@ void MeshReaderWriter::loadOBJFile(const string &filename, Mesh& meshToCreate) {
meshToCreate.destroy(); meshToCreate.destroy();
// Mesh data // Mesh data
vector<std::vector<uint32_t> > meshIndices; vector<etk::Vector<uint32_t> > meshIndices;
vector<vec3> meshNormals; vector<vec3> meshNormals;
if (!normals.empty()) meshNormals = vector<vec3>(vertices.size(), vec3(0, 0, 0)); if (!normals.empty()) meshNormals = vector<vec3>(vertices.size(), vec3(0, 0, 0));
vector<vec2> meshUVs; vector<vec2> meshUVs;
@ -225,7 +225,7 @@ void MeshReaderWriter::loadOBJFile(const string &filename, Mesh& meshToCreate) {
// Fill in the vertex indices // Fill in the vertex indices
// We also triangulate each quad face // We also triangulate each quad face
meshIndices.push_back(std::vector<uint32_t>()); meshIndices.pushBack(etk::Vector<uint32_t>());
for(size_t i = 0, j = 0; i < verticesIndices.size(); j++) { for(size_t i = 0, j = 0; i < verticesIndices.size(); j++) {
// Get the current vertex IDs // Get the current vertex IDs
@ -251,9 +251,9 @@ void MeshReaderWriter::loadOBJFile(const string &filename, Mesh& meshToCreate) {
if (!isQuad[j]) { if (!isQuad[j]) {
// Add the vertex indices // Add the vertex indices
meshIndices[meshPart].push_back(i1); meshIndices[meshPart].pushBack(i1);
meshIndices[meshPart].push_back(i2); meshIndices[meshPart].pushBack(i2);
meshIndices[meshPart].push_back(i3); meshIndices[meshPart].pushBack(i3);
i+=3; i+=3;
} }
@ -272,20 +272,20 @@ void MeshReaderWriter::loadOBJFile(const string &filename, Mesh& meshToCreate) {
float a1 = v13.dot(v12); float a1 = v13.dot(v12);
float a2 = v13.dot(v14); float a2 = v13.dot(v14);
if((a1 >= 0 && a2 <= 0) || (a1 <= 0 && a2 >= 0)) { if((a1 >= 0 && a2 <= 0) || (a1 <= 0 && a2 >= 0)) {
meshIndices[meshPart].push_back(i1); meshIndices[meshPart].pushBack(i1);
meshIndices[meshPart].push_back(i2); meshIndices[meshPart].pushBack(i2);
meshIndices[meshPart].push_back(i3); meshIndices[meshPart].pushBack(i3);
meshIndices[meshPart].push_back(i1); meshIndices[meshPart].pushBack(i1);
meshIndices[meshPart].push_back(i3); meshIndices[meshPart].pushBack(i3);
meshIndices[meshPart].push_back(i4); meshIndices[meshPart].pushBack(i4);
} }
else { else {
meshIndices[meshPart].push_back(i1); meshIndices[meshPart].pushBack(i1);
meshIndices[meshPart].push_back(i2); meshIndices[meshPart].pushBack(i2);
meshIndices[meshPart].push_back(i4); meshIndices[meshPart].pushBack(i4);
meshIndices[meshPart].push_back(i2); meshIndices[meshPart].pushBack(i2);
meshIndices[meshPart].push_back(i3); meshIndices[meshPart].pushBack(i3);
meshIndices[meshPart].push_back(i4); meshIndices[meshPart].pushBack(i4);
} }
// Add the vertex normal // Add the vertex normal
@ -313,13 +313,13 @@ void MeshReaderWriter::loadOBJFile(const string &filename, Mesh& meshToCreate) {
} }
// Store a mesh int32_to a OBJ file // Store a mesh int32_to a OBJ file
void MeshReaderWriter::writeOBJFile(const std::string& filename, const Mesh& meshToWrite) { void MeshReaderWriter::writeOBJFile(const etk::String& filename, const Mesh& meshToWrite) {
std::ofstream file(filename.c_str()); std::ofstream file(filename.c_str());
// Geth the mesh data // Geth the mesh data
const std::vector<vec3>& vertices = meshToWrite.getVertices(); const etk::Vector<vec3>& vertices = meshToWrite.getVertices();
const std::vector<vec3>& normals = meshToWrite.getNormals(); const etk::Vector<vec3>& normals = meshToWrite.getNormals();
const std::vector<vec2>& uvs = meshToWrite.getUVs(); const etk::Vector<vec2>& uvs = meshToWrite.getUVs();
// If we can open the file // If we can open the file
if (file.is_open()) { if (file.is_open()) {
@ -363,7 +363,7 @@ void MeshReaderWriter::writeOBJFile(const std::string& filename, const Mesh& mes
for (uint32_t p=0; p<meshToWrite.getNbParts(); p++) { for (uint32_t p=0; p<meshToWrite.getNbParts(); p++) {
// Get the indices of the part // Get the indices of the part
const std::vector<uint32_t>& indices = meshToWrite.getIndices(p); const etk::Vector<uint32_t>& indices = meshToWrite.getIndices(p);
// For each index of the part // For each index of the part
for (uint32_t i=0; i<indices.size(); i+=3) { for (uint32_t i=0; i<indices.size(); i+=3) {

View File

@ -27,7 +27,7 @@
#define MESH_LOADER_H #define MESH_LOADER_H
// Libraries // Libraries
#include <string> #include <etk/String.hpp>
#include <stdexcept> #include <stdexcept>
#include <ephysics/Mesh.hpp> #include <ephysics/Mesh.hpp>
@ -47,20 +47,20 @@ class MeshReaderWriter {
MeshReaderWriter(); MeshReaderWriter();
// Load an OBJ file with a triangular or quad mesh // Load an OBJ file with a triangular or quad mesh
static void loadOBJFile(const std::string& filename, Mesh& meshToCreate); static void loadOBJFile(const etk::String& filename, Mesh& meshToCreate);
// Store a mesh int32_to a OBJ file // Store a mesh int32_to a OBJ file
static void writeOBJFile(const std::string& filename, const Mesh &meshToWrite); static void writeOBJFile(const etk::String& filename, const Mesh &meshToWrite);
public : public :
// -------------------- Methods -------------------- // // -------------------- Methods -------------------- //
// Read a mesh from a file // Read a mesh from a file
static void loadMeshFromFile(const std::string& filename, Mesh& meshToCreate); static void loadMeshFromFile(const etk::String& filename, Mesh& meshToCreate);
// Write a mesh to a file // Write a mesh to a file
static void writeMeshToFile(const std::string& filename, const Mesh& meshToWrite); static void writeMeshToFile(const etk::String& filename, const Mesh& meshToWrite);
}; };
// Class VertexMergingData // Class VertexMergingData

View File

@ -39,7 +39,7 @@ Shader::Shader() : mProgramObjectID(0) {
} }
// Constructor with arguments // Constructor with arguments
Shader::Shader(const std::string vertexShaderFilename, const std::string fragmentShaderFilename) Shader::Shader(const etk::String vertexShaderFilename, const etk::String fragmentShaderFilename)
: mProgramObjectID(0) { : mProgramObjectID(0) {
// Create the shader // Create the shader
@ -52,8 +52,8 @@ Shader::~Shader() {
} }
// Create the shader // Create the shader
bool Shader::create(const std::string vertexShaderFilename, bool Shader::create(const etk::String vertexShaderFilename,
const std::string fragmentShaderFilename) { const etk::String fragmentShaderFilename) {
// Set the shader filenames // Set the shader filenames
mFilenameVertexShader = vertexShaderFilename; mFilenameVertexShader = vertexShaderFilename;

View File

@ -32,7 +32,7 @@
#include <ephysics/maths/vec2.hpp> #include <ephysics/maths/vec2.hpp>
#include <ephysics/maths/vec3.hpp> #include <ephysics/maths/vec3.hpp>
#include <ephysics/maths/Vector4.hpp> #include <ephysics/maths/Vector4.hpp>
#include <string> #include <etk/String.hpp>
#include <iostream> #include <iostream>
#include <stdexcept> #include <stdexcept>
#include <exception> #include <exception>
@ -51,7 +51,7 @@ class Shader {
GLuint32_t mProgramObjectID; GLuint32_t mProgramObjectID;
// Filenames of the vertex and fragment shaders // Filenames of the vertex and fragment shaders
std::string mFilenameVertexShader, mFilenameFragmentShader; etk::String mFilenameVertexShader, mFilenameFragmentShader;
public : public :
@ -61,14 +61,14 @@ class Shader {
Shader(); Shader();
// Constructor with arguments // Constructor with arguments
Shader(const std::string vertexShaderFilename, const std::string fragmentShaderFilename); Shader(const etk::String vertexShaderFilename, const etk::String fragmentShaderFilename);
// Destructor // Destructor
~Shader(); ~Shader();
// Create the shader // Create the shader
bool create(const std::string vertexShaderFilename, bool create(const etk::String vertexShaderFilename,
const std::string fragmentShaderFilename); const etk::String fragmentShaderFilename);
// Clear the shader // Clear the shader
void destroy(); void destroy();
@ -80,57 +80,57 @@ class Shader {
void unbind() const; void unbind() const;
// Return the location of a uniform variable inside a shader program // Return the location of a uniform variable inside a shader program
GLint32_t getUniformLocation(const std::string& variableName, bool errorIfMissing = true) const; GLint32_t getUniformLocation(const etk::String& variableName, bool errorIfMissing = true) const;
// Return the location of an attribute variable inside a shader program // Return the location of an attribute variable inside a shader program
GLint32_t getAttribLocation(const std::string& variableName, bool errorIfMissing = true) const; GLint32_t getAttribLocation(const etk::String& variableName, bool errorIfMissing = true) const;
// Set a float uniform value to this shader (be careful if the uniform is not // Set a float uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
void setFloatUniform(const std::string& variableName, float value, bool errorIfMissing = true) const; void setFloatUniform(const etk::String& variableName, float value, bool errorIfMissing = true) const;
// Set an int32_t uniform value to this shader (be careful if the uniform is not // Set an int32_t uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
void setIntUniform(const std::string& variableName, int32_t value, bool errorIfMissing = true) const; void setIntUniform(const etk::String& variableName, int32_t value, bool errorIfMissing = true) const;
// Set a vector 2 uniform value to this shader (be careful if the uniform is not // Set a vector 2 uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
void setvec2Uniform(const std::string& variableName, const vec2& v, bool errorIfMissing = true) const; void setvec2Uniform(const etk::String& variableName, const vec2& v, bool errorIfMissing = true) const;
// Set a vector 3 uniform value to this shader (be careful if the uniform is not // Set a vector 3 uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
void setvec3Uniform(const std::string& variableName, const vec3& v, bool errorIfMissing = true) const; void setvec3Uniform(const etk::String& variableName, const vec3& v, bool errorIfMissing = true) const;
// Set a vector 4 uniform value to this shader (be careful if the uniform is not // Set a vector 4 uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
void setVector4Uniform(const std::string& variableName, const Vector4 &v, bool errorIfMissing = true) const; void setVector4Uniform(const etk::String& variableName, const Vector4 &v, bool errorIfMissing = true) const;
// Set a 3x3 matrix uniform value to this shader (be careful if the uniform is not // Set a 3x3 matrix uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
void setetk::Matrix3x3Uniform(const std::string& variableName, const float* matrix, void setetk::Matrix3x3Uniform(const etk::String& variableName, const float* matrix,
bool transpose = false, bool errorIfMissing = true) const; bool transpose = false, bool errorIfMissing = true) const;
// Set a 3x3 matrix uniform value to this shader (be careful if the uniform is not // Set a 3x3 matrix uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
void setetk::Matrix3x3Uniform(const std::string& variableName, const Matrix3& matrix, bool errorIfMissing = true) const; void setetk::Matrix3x3Uniform(const etk::String& variableName, const Matrix3& matrix, bool errorIfMissing = true) const;
// Set a 4x4 matrix uniform value to this shader (be careful if the uniform is not // Set a 4x4 matrix uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
void setMatrix4x4Uniform(const std::string& variableName, const float* matrix, void setMatrix4x4Uniform(const etk::String& variableName, const float* matrix,
bool transpose = false, bool errorIfMissing = true) const; bool transpose = false, bool errorIfMissing = true) const;
// Set a 4x4 matrix uniform value to this shader (be careful if the uniform is not // Set a 4x4 matrix uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
void setMatrix4x4Uniform(const std::string& variableName, const Matrix4& matrix, bool errorIfMissing = true) const; void setMatrix4x4Uniform(const etk::String& variableName, const Matrix4& matrix, bool errorIfMissing = true) const;
// Return the shader object program ID // Return the shader object program ID
GLuint32_t getProgramObjectId() const; GLuint32_t getProgramObjectId() const;
@ -152,7 +152,7 @@ inline void Shader::unbind() const {
} }
// Return the location of a uniform variable inside a shader program // Return the location of a uniform variable inside a shader program
inline GLint32_t Shader::getUniformLocation(const std::string& variableName, bool errorIfMissing) const { inline GLint32_t Shader::getUniformLocation(const etk::String& variableName, bool errorIfMissing) const {
assert(mProgramObjectID != 0); assert(mProgramObjectID != 0);
GLint32_t location = glGetUniformLocation(mProgramObjectID, variableName.c_str()); GLint32_t location = glGetUniformLocation(mProgramObjectID, variableName.c_str());
if (location == -1 && errorIfMissing) { if (location == -1 && errorIfMissing) {
@ -166,7 +166,7 @@ inline GLint32_t Shader::getUniformLocation(const std::string& variableName, boo
} }
// Return the location of an attribute variable inside a shader program // Return the location of an attribute variable inside a shader program
inline GLint32_t Shader::getAttribLocation(const std::string& variableName, bool errorIfMissing) const { inline GLint32_t Shader::getAttribLocation(const etk::String& variableName, bool errorIfMissing) const {
assert(mProgramObjectID != 0); assert(mProgramObjectID != 0);
GLint32_t location = glGetAttribLocation(mProgramObjectID, variableName.c_str()); GLint32_t location = glGetAttribLocation(mProgramObjectID, variableName.c_str());
if (location == -1 && errorIfMissing) { if (location == -1 && errorIfMissing) {
@ -190,7 +190,7 @@ inline void Shader::destroy() {
// Set a float uniform value to this shader (be careful if the uniform is not // Set a float uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
inline void Shader::setFloatUniform(const std::string& variableName, float value, bool errorIfMissing) const { inline void Shader::setFloatUniform(const etk::String& variableName, float value, bool errorIfMissing) const {
assert(mProgramObjectID != 0); assert(mProgramObjectID != 0);
GLint32_t location = getUniformLocation(variableName, errorIfMissing); GLint32_t location = getUniformLocation(variableName, errorIfMissing);
if (location != -1) { if (location != -1) {
@ -201,7 +201,7 @@ inline void Shader::setFloatUniform(const std::string& variableName, float value
// Set an int32_t uniform value to this shader (be careful if the uniform is not // Set an int32_t uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
inline void Shader::setIntUniform(const std::string& variableName, int32_t value, bool errorIfMissing) const { inline void Shader::setIntUniform(const etk::String& variableName, int32_t value, bool errorIfMissing) const {
assert(mProgramObjectID != 0); assert(mProgramObjectID != 0);
GLint32_t location = getUniformLocation(variableName, errorIfMissing); GLint32_t location = getUniformLocation(variableName, errorIfMissing);
if (location != -1) { if (location != -1) {
@ -212,7 +212,7 @@ inline void Shader::setIntUniform(const std::string& variableName, int32_t value
// Set a vector 2 uniform value to this shader (be careful if the uniform is not // Set a vector 2 uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
inline void Shader::setvec2Uniform(const std::string& variableName, const vec2& v, bool errorIfMissing) const { inline void Shader::setvec2Uniform(const etk::String& variableName, const vec2& v, bool errorIfMissing) const {
assert(mProgramObjectID != 0); assert(mProgramObjectID != 0);
GLint32_t location = getUniformLocation(variableName, errorIfMissing); GLint32_t location = getUniformLocation(variableName, errorIfMissing);
if (location != -1) { if (location != -1) {
@ -223,7 +223,7 @@ inline void Shader::setvec2Uniform(const std::string& variableName, const vec2&
// Set a vector 3 uniform value to this shader (be careful if the uniform is not // Set a vector 3 uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
inline void Shader::setvec3Uniform(const std::string& variableName, const vec3 &v, bool errorIfMissing) const { inline void Shader::setvec3Uniform(const etk::String& variableName, const vec3 &v, bool errorIfMissing) const {
assert(mProgramObjectID != 0); assert(mProgramObjectID != 0);
GLint32_t location = getUniformLocation(variableName, errorIfMissing); GLint32_t location = getUniformLocation(variableName, errorIfMissing);
if (location != -1) { if (location != -1) {
@ -234,7 +234,7 @@ inline void Shader::setvec3Uniform(const std::string& variableName, const vec3 &
// Set a vector 4 uniform value to this shader (be careful if the uniform is not // Set a vector 4 uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
inline void Shader::setVector4Uniform(const std::string& variableName, const Vector4& v, bool errorIfMissing) const { inline void Shader::setVector4Uniform(const etk::String& variableName, const Vector4& v, bool errorIfMissing) const {
assert(mProgramObjectID != 0); assert(mProgramObjectID != 0);
GLint32_t location = getUniformLocation(variableName, errorIfMissing); GLint32_t location = getUniformLocation(variableName, errorIfMissing);
if (location != -1) { if (location != -1) {
@ -245,7 +245,7 @@ inline void Shader::setVector4Uniform(const std::string& variableName, const Vec
// Set a 4x4 matrix uniform value to this shader (be careful if the uniform is not // Set a 4x4 matrix uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
inline void Shader::setetk::Matrix3x3Uniform(const std::string& variableName, const float* matrix, inline void Shader::setetk::Matrix3x3Uniform(const etk::String& variableName, const float* matrix,
bool transpose, bool errorIfMissing) const { bool transpose, bool errorIfMissing) const {
assert(mProgramObjectID != 0); assert(mProgramObjectID != 0);
GLint32_t location = getUniformLocation(variableName, errorIfMissing); GLint32_t location = getUniformLocation(variableName, errorIfMissing);
@ -257,7 +257,7 @@ inline void Shader::setetk::Matrix3x3Uniform(const std::string& variableName, co
// Set a 3x3 matrix uniform value to this shader (be careful if the uniform is not // Set a 3x3 matrix uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
inline void Shader::setetk::Matrix3x3Uniform(const std::string& variableName, const Matrix3& matrix, bool errorIfMissing) const { inline void Shader::setetk::Matrix3x3Uniform(const etk::String& variableName, const Matrix3& matrix, bool errorIfMissing) const {
assert(mProgramObjectID != 0); assert(mProgramObjectID != 0);
GLfloat mat[9]; GLfloat mat[9];
for (int32_t i=0; i<3; i++) { for (int32_t i=0; i<3; i++) {
@ -274,7 +274,7 @@ inline void Shader::setetk::Matrix3x3Uniform(const std::string& variableName, co
// Set a 4x4 matrix uniform value to this shader (be careful if the uniform is not // Set a 4x4 matrix uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
inline void Shader::setMatrix4x4Uniform(const std::string& variableName, const float* matrix, inline void Shader::setMatrix4x4Uniform(const etk::String& variableName, const float* matrix,
bool transpose, bool errorIfMissing) const { bool transpose, bool errorIfMissing) const {
assert(mProgramObjectID != 0); assert(mProgramObjectID != 0);
GLint32_t location = getUniformLocation(variableName, errorIfMissing); GLint32_t location = getUniformLocation(variableName, errorIfMissing);
@ -286,7 +286,7 @@ inline void Shader::setMatrix4x4Uniform(const std::string& variableName, const f
// Set a 4x4 matrix uniform value to this shader (be careful if the uniform is not // Set a 4x4 matrix uniform value to this shader (be careful if the uniform is not
// used in the shader, the compiler will remove it, then when you will try // used in the shader, the compiler will remove it, then when you will try
// to set it, an assert will occur) // to set it, an assert will occur)
inline void Shader::setMatrix4x4Uniform(const std::string& variableName, const Matrix4& matrix, bool errorIfMissing) const { inline void Shader::setMatrix4x4Uniform(const etk::String& variableName, const Matrix4& matrix, bool errorIfMissing) const {
assert(mProgramObjectID != 0); assert(mProgramObjectID != 0);
GLfloat mat[16]; GLfloat mat[16];
for (int32_t i=0; i<4; i++) { for (int32_t i=0; i<4; i++) {

View File

@ -27,7 +27,7 @@
#include <ephysics/Texture2D.hpp> #include <ephysics/Texture2D.hpp>
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#include <string> #include <etk/String.hpp>
// Namespaces // Namespaces
using namespace openglframework; using namespace openglframework;

View File

@ -27,7 +27,7 @@
#define TEXTURE2D_H #define TEXTURE2D_H
// Libraries // Libraries
#include <string> #include <etk/String.hpp>
#include <cassert> #include <cassert>
#include <ephysics/definitions.hpp> #include <ephysics/definitions.hpp>
#include <nanogui/opengl.hpp> #include <nanogui/opengl.hpp>

View File

@ -25,7 +25,7 @@
// Librairies // Librairies
#include <ephysics/TextureReaderWriter.hpp> #include <ephysics/TextureReaderWriter.hpp>
#include <string> #include <etk/String.hpp>
#ifdef USE_JPEG_TEXTURE #ifdef USE_JPEG_TEXTURE
#include <jpeglib.hpp> #include <jpeglib.hpp>
#include <jerror.hpp> #include <jerror.hpp>
@ -60,7 +60,7 @@ typedef struct {
#pragma pack(pop) #pragma pack(pop)
// Load a texture from a file // Load a texture from a file
void TextureReaderWriter::loadTextureFromFile(const std::string& filename, void TextureReaderWriter::loadTextureFromFile(const etk::String& filename,
Texture2D& textureToCreate) { Texture2D& textureToCreate) {
// Get the extension of the file // Get the extension of the file
@ -87,7 +87,7 @@ void TextureReaderWriter::loadTextureFromFile(const std::string& filename,
} }
// Write a texture to a file // Write a texture to a file
void TextureReaderWriter::writeTextureToFile(const std::string& filename,const Texture2D& texture) { void TextureReaderWriter::writeTextureToFile(const etk::String& filename,const Texture2D& texture) {
// Get the extension of the file // Get the extension of the file
uint32_t startPosExtension = filename.find_last_of("."); uint32_t startPosExtension = filename.find_last_of(".");
@ -113,7 +113,7 @@ void TextureReaderWriter::writeTextureToFile(const std::string& filename,const T
} }
// Load a TGA picture // Load a TGA picture
void TextureReaderWriter::readTGAPicture(const std::string &filename, Texture2D& textureToCreate) { void TextureReaderWriter::readTGAPicture(const etk::String &filename, Texture2D& textureToCreate) {
// Open the file // Open the file
std::ifstream stream(filename.c_str(), std::ios::binary); std::ifstream stream(filename.c_str(), std::ios::binary);
@ -158,7 +158,7 @@ void TextureReaderWriter::readTGAPicture(const std::string &filename, Texture2D&
// Write a TGA picture // Write a TGA picture
void TextureReaderWriter::writeTGAPicture(const std::string& filename, const Texture2D& texture) { void TextureReaderWriter::writeTGAPicture(const etk::String& filename, const Texture2D& texture) {
assert(texture.getID() != 0); assert(texture.getID() != 0);
// Bind the corresponding texture // Bind the corresponding texture
@ -223,7 +223,7 @@ void TextureReaderWriter::writeTGAPicture(const std::string& filename, const Tex
#ifdef USE_JPEG_TEXTURE #ifdef USE_JPEG_TEXTURE
// Read a JPEG picture // Read a JPEG picture
void TextureReaderWriter::readJPEGPicture(const std::string& filename, Texture2D& textureToCreate) { void TextureReaderWriter::readJPEGPicture(const etk::String& filename, Texture2D& textureToCreate) {
struct jpeg_decompress_struct info; struct jpeg_decompress_struct info;
struct jpeg_error_mgr error; struct jpeg_error_mgr error;
@ -278,7 +278,7 @@ void TextureReaderWriter::readJPEGPicture(const std::string& filename, Texture2D
} }
// Write a JPEG picture // Write a JPEG picture
void TextureReaderWriter::writeJPEGPicture(const std::string& filename, const Texture2D& texture) { void TextureReaderWriter::writeJPEGPicture(const etk::String& filename, const Texture2D& texture) {
struct jpeg_compress_struct info; struct jpeg_compress_struct info;
struct jpeg_error_mgr error; struct jpeg_error_mgr error;

View File

@ -52,26 +52,26 @@ class TextureReaderWriter {
TextureReaderWriter(); TextureReaderWriter();
// Read a TGA picture // Read a TGA picture
static void readTGAPicture(const std::string& filename, Texture2D& textureToCreate); static void readTGAPicture(const etk::String& filename, Texture2D& textureToCreate);
// Write a TGA picture // Write a TGA picture
static void writeTGAPicture(const std::string& filename, const Texture2D& texture); static void writeTGAPicture(const etk::String& filename, const Texture2D& texture);
// Read a JPEG picture // Read a JPEG picture
static void readJPEGPicture(const std::string& filename, Texture2D& textureToCreate); static void readJPEGPicture(const etk::String& filename, Texture2D& textureToCreate);
// Write a JPEG picture // Write a JPEG picture
static void writeJPEGPicture(const std::string& filename, const Texture2D& texture); static void writeJPEGPicture(const etk::String& filename, const Texture2D& texture);
public : public :
// -------------------- Methods -------------------- // // -------------------- Methods -------------------- //
// Load a texture from a file // Load a texture from a file
static void loadTextureFromFile(const std::string& filename, Texture2D& textureToCreate); static void loadTextureFromFile(const etk::String& filename, Texture2D& textureToCreate);
// Write a texture to a file // Write a texture to a file
static void writeTextureToFile(const std::string& filename, const Texture2D& texture); static void writeTextureToFile(const etk::String& filename, const Texture2D& texture);
}; };
} }

View File

@ -31,10 +31,10 @@ using namespace openglframework;
using namespace collisionshapesscene; using namespace collisionshapesscene;
// Constructor // Constructor
CollisionShapesScene::CollisionShapesScene(const std::string& name) CollisionShapesScene::CollisionShapesScene(const etk::String& name)
: SceneDemo(name, SCENE_RADIUS) { : SceneDemo(name, SCENE_RADIUS) {
std::string meshFolderPath("meshes/"); etk::String meshFolderPath("meshes/");
// Compute the radius and the center of the scene // Compute the radius and the center of the scene
openglframework::vec3 center(0, 5, 0); openglframework::vec3 center(0, 5, 0);
@ -73,7 +73,7 @@ CollisionShapesScene::CollisionShapesScene(const std::string& name)
material.setBounciness(ephysics::float(0.2)); material.setBounciness(ephysics::float(0.2));
// Add the mesh the list of dumbbells in the scene // Add the mesh the list of dumbbells in the scene
mDumbbells.push_back(dumbbell); mDumbbells.pushBack(dumbbell);
} }
// Create all the boxes of the scene // Create all the boxes of the scene
@ -97,7 +97,7 @@ CollisionShapesScene::CollisionShapesScene(const std::string& name)
material.setBounciness(ephysics::float(0.2)); material.setBounciness(ephysics::float(0.2));
// Add the sphere the list of sphere in the scene // Add the sphere the list of sphere in the scene
mBoxes.push_back(box); mBoxes.pushBack(box);
} }
// Create all the spheres of the scene // Create all the spheres of the scene
@ -125,7 +125,7 @@ CollisionShapesScene::CollisionShapesScene(const std::string& name)
material.setBounciness(ephysics::float(0.2)); material.setBounciness(ephysics::float(0.2));
// Add the sphere the list of sphere in the scene // Add the sphere the list of sphere in the scene
mSpheres.push_back(sphere); mSpheres.pushBack(sphere);
} }
// Create all the cones of the scene // Create all the cones of the scene
@ -153,7 +153,7 @@ CollisionShapesScene::CollisionShapesScene(const std::string& name)
material.setBounciness(ephysics::float(0.2)); material.setBounciness(ephysics::float(0.2));
// Add the cone the list of sphere in the scene // Add the cone the list of sphere in the scene
mCones.push_back(cone); mCones.pushBack(cone);
} }
// Create all the cylinders of the scene // Create all the cylinders of the scene
@ -181,7 +181,7 @@ CollisionShapesScene::CollisionShapesScene(const std::string& name)
material.setBounciness(ephysics::float(0.2)); material.setBounciness(ephysics::float(0.2));
// Add the cylinder the list of sphere in the scene // Add the cylinder the list of sphere in the scene
mCylinders.push_back(cylinder); mCylinders.pushBack(cylinder);
} }
// Create all the capsules of the scene // Create all the capsules of the scene
@ -208,7 +208,7 @@ CollisionShapesScene::CollisionShapesScene(const std::string& name)
material.setBounciness(ephysics::float(0.2)); material.setBounciness(ephysics::float(0.2));
// Add the cylinder the list of sphere in the scene // Add the cylinder the list of sphere in the scene
mCapsules.push_back(capsule); mCapsules.pushBack(capsule);
} }
// Create all the convex meshes of the scene // Create all the convex meshes of the scene
@ -232,7 +232,7 @@ CollisionShapesScene::CollisionShapesScene(const std::string& name)
material.setBounciness(ephysics::float(0.2)); material.setBounciness(ephysics::float(0.2));
// Add the mesh the list of sphere in the scene // Add the mesh the list of sphere in the scene
mConvexMeshes.push_back(mesh); mConvexMeshes.pushBack(mesh);
} }
// ---------- Create the floor --------- // ---------- Create the floor ---------
@ -290,7 +290,7 @@ CollisionShapesScene::CollisionShapesScene(const std::string& name)
CollisionShapesScene::~CollisionShapesScene() { CollisionShapesScene::~CollisionShapesScene() {
// Destroy all the boxes of the scene // Destroy all the boxes of the scene
for (std::vector<Box*>::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it) { for (etk::Vector<Box*>::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it) {
// Destroy the corresponding rigid body from the dynamics world // Destroy the corresponding rigid body from the dynamics world
mDynamicsWorld->destroyRigidBody((*it)->getRigidBody()); mDynamicsWorld->destroyRigidBody((*it)->getRigidBody());
@ -300,7 +300,7 @@ CollisionShapesScene::~CollisionShapesScene() {
} }
// Destroy all the sphere of the scene // Destroy all the sphere of the scene
for (std::vector<Sphere*>::iterator it = mSpheres.begin(); it != mSpheres.end(); ++it) { for (etk::Vector<Sphere*>::iterator it = mSpheres.begin(); it != mSpheres.end(); ++it) {
// Destroy the corresponding rigid body from the dynamics world // Destroy the corresponding rigid body from the dynamics world
mDynamicsWorld->destroyRigidBody((*it)->getRigidBody()); mDynamicsWorld->destroyRigidBody((*it)->getRigidBody());
@ -310,7 +310,7 @@ CollisionShapesScene::~CollisionShapesScene() {
} }
// Destroy all the cones of the scene // Destroy all the cones of the scene
for (std::vector<Cone*>::iterator it = mCones.begin(); it != mCones.end(); ++it) { for (etk::Vector<Cone*>::iterator it = mCones.begin(); it != mCones.end(); ++it) {
// Destroy the corresponding rigid body from the dynamics world // Destroy the corresponding rigid body from the dynamics world
mDynamicsWorld->destroyRigidBody((*it)->getRigidBody()); mDynamicsWorld->destroyRigidBody((*it)->getRigidBody());
@ -320,7 +320,7 @@ CollisionShapesScene::~CollisionShapesScene() {
} }
// Destroy all the cylinders of the scene // Destroy all the cylinders of the scene
for (std::vector<Cylinder*>::iterator it = mCylinders.begin(); it != mCylinders.end(); ++it) { for (etk::Vector<Cylinder*>::iterator it = mCylinders.begin(); it != mCylinders.end(); ++it) {
// Destroy the corresponding rigid body from the dynamics world // Destroy the corresponding rigid body from the dynamics world
mDynamicsWorld->destroyRigidBody((*it)->getRigidBody()); mDynamicsWorld->destroyRigidBody((*it)->getRigidBody());
@ -330,7 +330,7 @@ CollisionShapesScene::~CollisionShapesScene() {
} }
// Destroy all the capsules of the scene // Destroy all the capsules of the scene
for (std::vector<Capsule*>::iterator it = mCapsules.begin(); it != mCapsules.end(); ++it) { for (etk::Vector<Capsule*>::iterator it = mCapsules.begin(); it != mCapsules.end(); ++it) {
// Destroy the corresponding rigid body from the dynamics world // Destroy the corresponding rigid body from the dynamics world
mDynamicsWorld->destroyRigidBody((*it)->getRigidBody()); mDynamicsWorld->destroyRigidBody((*it)->getRigidBody());
@ -340,7 +340,7 @@ CollisionShapesScene::~CollisionShapesScene() {
} }
// Destroy all the convex meshes of the scene // Destroy all the convex meshes of the scene
for (std::vector<ConvexMesh*>::iterator it = mConvexMeshes.begin(); for (etk::Vector<ConvexMesh*>::iterator it = mConvexMeshes.begin();
it != mConvexMeshes.end(); ++it) { it != mConvexMeshes.end(); ++it) {
// Destroy the corresponding rigid body from the dynamics world // Destroy the corresponding rigid body from the dynamics world
@ -351,7 +351,7 @@ CollisionShapesScene::~CollisionShapesScene() {
} }
// Destroy all the dumbbell of the scene // Destroy all the dumbbell of the scene
for (std::vector<Dumbbell*>::iterator it = mDumbbells.begin(); for (etk::Vector<Dumbbell*>::iterator it = mDumbbells.begin();
it != mDumbbells.end(); ++it) { it != mDumbbells.end(); ++it) {
// Destroy the corresponding rigid body from the dynamics world // Destroy the corresponding rigid body from the dynamics world
@ -400,42 +400,42 @@ void CollisionShapesScene::update() {
SceneDemo::update(); SceneDemo::update();
// Update the position and orientation of the boxes // Update the position and orientation of the boxes
for (std::vector<Box*>::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it) { for (etk::Vector<Box*>::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it) {
// Update the transform used for the rendering // Update the transform used for the rendering
(*it)->updateetk::Transform3D(mInterpolationFactor); (*it)->updateetk::Transform3D(mInterpolationFactor);
} }
// Update the position and orientation of the sphere // Update the position and orientation of the sphere
for (std::vector<Sphere*>::iterator it = mSpheres.begin(); it != mSpheres.end(); ++it) { for (etk::Vector<Sphere*>::iterator it = mSpheres.begin(); it != mSpheres.end(); ++it) {
// Update the transform used for the rendering // Update the transform used for the rendering
(*it)->updateetk::Transform3D(mInterpolationFactor); (*it)->updateetk::Transform3D(mInterpolationFactor);
} }
// Update the position and orientation of the cones // Update the position and orientation of the cones
for (std::vector<Cone*>::iterator it = mCones.begin(); it != mCones.end(); ++it) { for (etk::Vector<Cone*>::iterator it = mCones.begin(); it != mCones.end(); ++it) {
// Update the transform used for the rendering // Update the transform used for the rendering
(*it)->updateetk::Transform3D(mInterpolationFactor); (*it)->updateetk::Transform3D(mInterpolationFactor);
} }
// Update the position and orientation of the cylinders // Update the position and orientation of the cylinders
for (std::vector<Cylinder*>::iterator it = mCylinders.begin(); it != mCylinders.end(); ++it) { for (etk::Vector<Cylinder*>::iterator it = mCylinders.begin(); it != mCylinders.end(); ++it) {
// Update the transform used for the rendering // Update the transform used for the rendering
(*it)->updateetk::Transform3D(mInterpolationFactor); (*it)->updateetk::Transform3D(mInterpolationFactor);
} }
// Update the position and orientation of the capsules // Update the position and orientation of the capsules
for (std::vector<Capsule*>::iterator it = mCapsules.begin(); it != mCapsules.end(); ++it) { for (etk::Vector<Capsule*>::iterator it = mCapsules.begin(); it != mCapsules.end(); ++it) {
// Update the transform used for the rendering // Update the transform used for the rendering
(*it)->updateetk::Transform3D(mInterpolationFactor); (*it)->updateetk::Transform3D(mInterpolationFactor);
} }
// Update the position and orientation of the convex meshes // Update the position and orientation of the convex meshes
for (std::vector<ConvexMesh*>::iterator it = mConvexMeshes.begin(); for (etk::Vector<ConvexMesh*>::iterator it = mConvexMeshes.begin();
it != mConvexMeshes.end(); ++it) { it != mConvexMeshes.end(); ++it) {
// Update the transform used for the rendering // Update the transform used for the rendering
@ -443,7 +443,7 @@ void CollisionShapesScene::update() {
} }
// Update the position and orientation of the dumbbells // Update the position and orientation of the dumbbells
for (std::vector<Dumbbell*>::iterator it = mDumbbells.begin(); for (etk::Vector<Dumbbell*>::iterator it = mDumbbells.begin();
it != mDumbbells.end(); ++it) { it != mDumbbells.end(); ++it) {
// Update the transform used for the rendering // Update the transform used for the rendering
@ -463,38 +463,38 @@ void CollisionShapesScene::renderSinglePass(openglframework::Shader& shader,
shader.bind(); shader.bind();
// Render all the boxes of the scene // Render all the boxes of the scene
for (std::vector<Box*>::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it) { for (etk::Vector<Box*>::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it) {
(*it)->render(shader, worldToCameraMatrix); (*it)->render(shader, worldToCameraMatrix);
} }
// Render all the sphere of the scene // Render all the sphere of the scene
for (std::vector<Sphere*>::iterator it = mSpheres.begin(); it != mSpheres.end(); ++it) { for (etk::Vector<Sphere*>::iterator it = mSpheres.begin(); it != mSpheres.end(); ++it) {
(*it)->render(shader, worldToCameraMatrix); (*it)->render(shader, worldToCameraMatrix);
} }
// Render all the cones of the scene // Render all the cones of the scene
for (std::vector<Cone*>::iterator it = mCones.begin(); it != mCones.end(); ++it) { for (etk::Vector<Cone*>::iterator it = mCones.begin(); it != mCones.end(); ++it) {
(*it)->render(shader, worldToCameraMatrix); (*it)->render(shader, worldToCameraMatrix);
} }
// Render all the cylinders of the scene // Render all the cylinders of the scene
for (std::vector<Cylinder*>::iterator it = mCylinders.begin(); it != mCylinders.end(); ++it) { for (etk::Vector<Cylinder*>::iterator it = mCylinders.begin(); it != mCylinders.end(); ++it) {
(*it)->render(shader, worldToCameraMatrix); (*it)->render(shader, worldToCameraMatrix);
} }
// Render all the capsules of the scene // Render all the capsules of the scene
for (std::vector<Capsule*>::iterator it = mCapsules.begin(); it != mCapsules.end(); ++it) { for (etk::Vector<Capsule*>::iterator it = mCapsules.begin(); it != mCapsules.end(); ++it) {
(*it)->render(shader, worldToCameraMatrix); (*it)->render(shader, worldToCameraMatrix);
} }
// Render all the convex meshes of the scene // Render all the convex meshes of the scene
for (std::vector<ConvexMesh*>::iterator it = mConvexMeshes.begin(); for (etk::Vector<ConvexMesh*>::iterator it = mConvexMeshes.begin();
it != mConvexMeshes.end(); ++it) { it != mConvexMeshes.end(); ++it) {
(*it)->render(shader, worldToCameraMatrix); (*it)->render(shader, worldToCameraMatrix);
} }
// Render all the dumbbells of the scene // Render all the dumbbells of the scene
for (std::vector<Dumbbell*>::iterator it = mDumbbells.begin(); for (etk::Vector<Dumbbell*>::iterator it = mDumbbells.begin();
it != mDumbbells.end(); ++it) { it != mDumbbells.end(); ++it) {
(*it)->render(shader, worldToCameraMatrix); (*it)->render(shader, worldToCameraMatrix);
} }

View File

@ -76,21 +76,21 @@ class CollisionShapesScene : public SceneDemo {
// -------------------- Attributes -------------------- // // -------------------- Attributes -------------------- //
/// All the spheres of the scene /// All the spheres of the scene
std::vector<Box*> mBoxes; etk::Vector<Box*> mBoxes;
std::vector<Sphere*> mSpheres; etk::Vector<Sphere*> mSpheres;
std::vector<Cone*> mCones; etk::Vector<Cone*> mCones;
std::vector<Cylinder*> mCylinders; etk::Vector<Cylinder*> mCylinders;
std::vector<Capsule*> mCapsules; etk::Vector<Capsule*> mCapsules;
/// All the convex meshes of the scene /// All the convex meshes of the scene
std::vector<ConvexMesh*> mConvexMeshes; etk::Vector<ConvexMesh*> mConvexMeshes;
/// All the dumbbell of the scene /// All the dumbbell of the scene
std::vector<Dumbbell*> mDumbbells; etk::Vector<Dumbbell*> mDumbbells;
/// Box for the floor /// Box for the floor
Box* mFloor; Box* mFloor;
@ -103,7 +103,7 @@ class CollisionShapesScene : public SceneDemo {
// -------------------- Methods -------------------- // // -------------------- Methods -------------------- //
/// Constructor /// Constructor
CollisionShapesScene(const std::string& name); CollisionShapesScene(const etk::String& name);
/// Destructor /// Destructor
virtual ~CollisionShapesScene(); virtual ~CollisionShapesScene();
@ -123,11 +123,11 @@ class CollisionShapesScene : public SceneDemo {
virtual void reset(); virtual void reset();
/// Return all the contact points of the scene /// Return all the contact points of the scene
virtual std::vector<ContactPoint> getContactPoints() const; virtual etk::Vector<ContactPoint> getContactPoints() const;
}; };
// Return all the contact points of the scene // Return all the contact points of the scene
inline std::vector<ContactPoint> CollisionShapesScene::getContactPoints() const { inline etk::Vector<ContactPoint> CollisionShapesScene::getContactPoints() const {
return computeContactPointsOfWorld(mDynamicsWorld); return computeContactPointsOfWorld(mDynamicsWorld);
} }

View File

@ -31,10 +31,10 @@ using namespace openglframework;
using namespace trianglemeshscene; using namespace trianglemeshscene;
// Constructor // Constructor
ConcaveMeshScene::ConcaveMeshScene(const std::string& name) ConcaveMeshScene::ConcaveMeshScene(const etk::String& name)
: SceneDemo(name, SCENE_RADIUS) { : SceneDemo(name, SCENE_RADIUS) {
std::string meshFolderPath("meshes/"); etk::String meshFolderPath("meshes/");
// Compute the radius and the center of the scene // Compute the radius and the center of the scene
openglframework::vec3 center(0, 5, 0); openglframework::vec3 center(0, 5, 0);

View File

@ -63,7 +63,7 @@ class ConcaveMeshScene : public SceneDemo {
// -------------------- Methods -------------------- // // -------------------- Methods -------------------- //
/// Constructor /// Constructor
ConcaveMeshScene(const std::string& name); ConcaveMeshScene(const etk::String& name);
/// Destructor /// Destructor
virtual ~ConcaveMeshScene(); virtual ~ConcaveMeshScene();
@ -83,11 +83,11 @@ class ConcaveMeshScene : public SceneDemo {
virtual void reset(); virtual void reset();
/// Return all the contact points of the scene /// Return all the contact points of the scene
virtual std::vector<ContactPoint> getContactPoints() const; virtual etk::Vector<ContactPoint> getContactPoints() const;
}; };
// Return all the contact points of the scene // Return all the contact points of the scene
inline std::vector<ContactPoint> ConcaveMeshScene::getContactPoints() const { inline etk::Vector<ContactPoint> ConcaveMeshScene::getContactPoints() const {
return computeContactPointsOfWorld(mDynamicsWorld); return computeContactPointsOfWorld(mDynamicsWorld);
} }

View File

@ -31,7 +31,7 @@ using namespace openglframework;
using namespace cubesscene; using namespace cubesscene;
// Constructor // Constructor
CubesScene::CubesScene(const std::string& name) CubesScene::CubesScene(const etk::String& name)
: SceneDemo(name, SCENE_RADIUS) { : SceneDemo(name, SCENE_RADIUS) {
// Compute the radius and the center of the scene // Compute the radius and the center of the scene
@ -72,7 +72,7 @@ CubesScene::CubesScene(const std::string& name)
material.setBounciness(ephysics::float(0.4)); material.setBounciness(ephysics::float(0.4));
// Add the box the list of box in the scene // Add the box the list of box in the scene
mBoxes.push_back(cube); mBoxes.pushBack(cube);
} }
// Create the floor // Create the floor
@ -104,7 +104,7 @@ CubesScene::CubesScene(const std::string& name)
CubesScene::~CubesScene() { CubesScene::~CubesScene() {
// Destroy all the cubes of the scene // Destroy all the cubes of the scene
for (std::vector<Box*>::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it) { for (etk::Vector<Box*>::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it) {
// Destroy the corresponding rigid body from the dynamics world // Destroy the corresponding rigid body from the dynamics world
m_dynamicsWorld->destroyRigidBody((*it)->getRigidBody()); m_dynamicsWorld->destroyRigidBody((*it)->getRigidBody());
@ -148,7 +148,7 @@ void CubesScene::update() {
SceneDemo::update(); SceneDemo::update();
// Update the position and orientation of the boxes // Update the position and orientation of the boxes
for (std::vector<Box*>::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it) { for (etk::Vector<Box*>::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it) {
// Update the transform used for the rendering // Update the transform used for the rendering
(*it)->updateetk::Transform3D(mInterpolationFactor); (*it)->updateetk::Transform3D(mInterpolationFactor);
@ -164,7 +164,7 @@ void CubesScene::renderSinglePass(Shader& shader, const openglframework::Matrix4
shader.bind(); shader.bind();
// Render all the cubes of the scene // Render all the cubes of the scene
for (std::vector<Box*>::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it) { for (etk::Vector<Box*>::iterator it = mBoxes.begin(); it != mBoxes.end(); ++it) {
(*it)->render(shader, worldToCameraMatrix); (*it)->render(shader, worldToCameraMatrix);
} }

View File

@ -44,14 +44,14 @@ namespace cubesscene {
class CubesScene : public SceneDemo { class CubesScene : public SceneDemo {
protected : protected :
/// All the boxes of the scene /// All the boxes of the scene
std::vector<Box*> mBoxes; etk::Vector<Box*> mBoxes;
/// Box for the floor /// Box for the floor
Box* mFloor; Box* mFloor;
/// Dynamics world used for the physics simulation /// Dynamics world used for the physics simulation
ephysics::DynamicsWorld* m_dynamicsWorld; ephysics::DynamicsWorld* m_dynamicsWorld;
public: public:
/// Constructor /// Constructor
CubesScene(const std::string& name); CubesScene(const etk::String& name);
/// Destructor /// Destructor
virtual ~CubesScene(); virtual ~CubesScene();
/// Update the physics world (take a simulation step) /// Update the physics world (take a simulation step)
@ -65,7 +65,7 @@ namespace cubesscene {
/// Reset the scene /// Reset the scene
virtual void reset(); virtual void reset();
/// Return all the contact points of the scene /// Return all the contact points of the scene
virtual std::vector<ContactPoint> getContactPoints() const { virtual etk::Vector<ContactPoint> getContactPoints() const {
return computeContactPointsOfWorld(m_dynamicsWorld); return computeContactPointsOfWorld(m_dynamicsWorld);
} }
}; };

View File

@ -31,7 +31,7 @@ using namespace openglframework;
using namespace heightfieldscene; using namespace heightfieldscene;
// Constructor // Constructor
HeightFieldScene::HeightFieldScene(const std::string& name) : SceneDemo(name, SCENE_RADIUS) { HeightFieldScene::HeightFieldScene(const etk::String& name) : SceneDemo(name, SCENE_RADIUS) {
// Compute the radius and the center of the scene // Compute the radius and the center of the scene
openglframework::vec3 center(0, 5, 0); openglframework::vec3 center(0, 5, 0);

View File

@ -60,7 +60,7 @@ class HeightFieldScene : public SceneDemo {
// -------------------- Methods -------------------- // // -------------------- Methods -------------------- //
/// Constructor /// Constructor
HeightFieldScene(const std::string& name); HeightFieldScene(const etk::String& name);
/// Destructor /// Destructor
virtual ~HeightFieldScene(); virtual ~HeightFieldScene();
@ -80,11 +80,11 @@ class HeightFieldScene : public SceneDemo {
virtual void reset(); virtual void reset();
/// Return all the contact points of the scene /// Return all the contact points of the scene
virtual std::vector<ContactPoint> getContactPoints() const; virtual etk::Vector<ContactPoint> getContactPoints() const;
}; };
// Return all the contact points of the scene // Return all the contact points of the scene
inline std::vector<ContactPoint> HeightFieldScene::getContactPoints() const { inline etk::Vector<ContactPoint> HeightFieldScene::getContactPoints() const {
return computeContactPointsOfWorld(mDynamicsWorld); return computeContactPointsOfWorld(mDynamicsWorld);
} }

View File

@ -32,7 +32,7 @@ using namespace openglframework;
using namespace jointsscene; using namespace jointsscene;
// Constructor // Constructor
JointsScene::JointsScene(const std::string& name) JointsScene::JointsScene(const etk::String& name)
: SceneDemo(name, SCENE_RADIUS) { : SceneDemo(name, SCENE_RADIUS) {
// Compute the radius and the center of the scene // Compute the radius and the center of the scene

View File

@ -117,7 +117,7 @@ class JointsScene : public SceneDemo {
// -------------------- Methods -------------------- // // -------------------- Methods -------------------- //
/// Constructor /// Constructor
JointsScene(const std::string& name); JointsScene(const etk::String& name);
/// Destructor /// Destructor
virtual ~JointsScene(); virtual ~JointsScene();
@ -137,11 +137,11 @@ class JointsScene : public SceneDemo {
virtual void reset(); virtual void reset();
/// Return all the contact points of the scene /// Return all the contact points of the scene
virtual std::vector<ContactPoint> getContactPoints() const; virtual etk::Vector<ContactPoint> getContactPoints() const;
}; };
// Return all the contact points of the scene // Return all the contact points of the scene
inline std::vector<ContactPoint> JointsScene::getContactPoints() const { inline etk::Vector<ContactPoint> JointsScene::getContactPoints() const {
return computeContactPointsOfWorld(mDynamicsWorld); return computeContactPointsOfWorld(mDynamicsWorld);
} }

View File

@ -31,7 +31,7 @@ using namespace openglframework;
using namespace raycastscene; using namespace raycastscene;
// Constructor // Constructor
RaycastScene::RaycastScene(const std::string& name) RaycastScene::RaycastScene(const etk::String& name)
: SceneDemo(name, SCENE_RADIUS, false), mMeshFolderPath("meshes/"), : SceneDemo(name, SCENE_RADIUS, false), mMeshFolderPath("meshes/"),
m_raycastManager(mPhongShader, mMeshFolderPath), mCurrentBodyIndex(-1), m_raycastManager(mPhongShader, mMeshFolderPath), mCurrentBodyIndex(-1),
mAreNormalsDisplayed(false), mVBOVertices(GL_ARRAY_BUFFER) { mAreNormalsDisplayed(false), mVBOVertices(GL_ARRAY_BUFFER) {
@ -172,10 +172,10 @@ void RaycastScene::createLines() {
openglframework::vec3 point1(x, y, z); openglframework::vec3 point1(x, y, z);
openglframework::vec3 point2(0.0f, 0.0f, 0.0f); openglframework::vec3 point2(0.0f, 0.0f, 0.0f);
Line* line = new Line(point1, point2); Line* line = new Line(point1, point2);
mLines.push_back(line); mLines.pushBack(line);
mLinePoints.push_back(point1); mLinePoints.pushBack(point1);
mLinePoints.push_back(point2); mLinePoints.pushBack(point2);
} }
} }
} }
@ -287,7 +287,7 @@ RaycastScene::~RaycastScene() {
delete mCollisionWorld; delete mCollisionWorld;
// Destroy the lines // Destroy the lines
for (std::vector<Line*>::iterator it = mLines.begin(); it != mLines.end(); for (etk::Vector<Line*>::iterator it = mLines.begin(); it != mLines.end();
++it) { ++it) {
delete (*it); delete (*it);
} }
@ -309,7 +309,7 @@ void RaycastScene::update() {
m_raycastManager.resetPoints(); m_raycastManager.resetPoints();
// For each line of the scene // For each line of the scene
for (std::vector<Line*>::iterator it = mLines.begin(); it != mLines.end(); for (etk::Vector<Line*>::iterator it = mLines.begin(); it != mLines.end();
++it) { ++it) {
Line* line = *it; Line* line = *it;

View File

@ -67,18 +67,18 @@ class RaycastManager : public ephysics::RaycastCallback {
private: private:
/// All the visual contact points /// All the visual contact points
std::vector<ContactPoint> mHitPoints; etk::Vector<ContactPoint> mHitPoints;
/// All the normals at hit points /// All the normals at hit points
std::vector<Line*> mNormals; etk::Vector<Line*> mNormals;
/// Contact point mesh folder path /// Contact point mesh folder path
std::string mMeshFolderPath; etk::String mMeshFolderPath;
public: public:
RaycastManager(openglframework::Shader& shader, RaycastManager(openglframework::Shader& shader,
const std::string& meshFolderPath) const etk::String& meshFolderPath)
: mMeshFolderPath(meshFolderPath) { : mMeshFolderPath(meshFolderPath) {
} }
@ -86,13 +86,13 @@ class RaycastManager : public ephysics::RaycastCallback {
virtual ephysics::float notifyRaycastHit(const ephysics::RaycastInfo& raycastInfo) { virtual ephysics::float notifyRaycastHit(const ephysics::RaycastInfo& raycastInfo) {
ephysics::vec3 hitPos = raycastInfo.worldPoint; ephysics::vec3 hitPos = raycastInfo.worldPoint;
openglframework::vec3 position(hitPos.x(), hitPos.y(), hitPos.z()); openglframework::vec3 position(hitPos.x(), hitPos.y(), hitPos.z());
mHitPoints.push_back(ContactPoint(position)); mHitPoints.pushBack(ContactPoint(position));
// Create a line to display the normal at hit point // Create a line to display the normal at hit point
ephysics::vec3 n = raycastInfo.worldNormal; ephysics::vec3 n = raycastInfo.worldNormal;
openglframework::vec3 normal(n.x(), n.y(), n.z()); openglframework::vec3 normal(n.x(), n.y(), n.z());
Line* normalLine = new Line(position, position + normal); Line* normalLine = new Line(position, position + normal);
mNormals.push_back(normalLine); mNormals.pushBack(normalLine);
return raycastInfo.hitFraction; return raycastInfo.hitFraction;
} }
@ -102,14 +102,14 @@ class RaycastManager : public ephysics::RaycastCallback {
mHitPoints.clear(); mHitPoints.clear();
// Destroy all the normals // Destroy all the normals
for (std::vector<Line*>::iterator it = mNormals.begin(); for (etk::Vector<Line*>::iterator it = mNormals.begin();
it != mNormals.end(); ++it) { it != mNormals.end(); ++it) {
delete (*it); delete (*it);
} }
mNormals.clear(); mNormals.clear();
} }
std::vector<ContactPoint> getHitPoints() const { etk::Vector<ContactPoint> getHitPoints() const {
return mHitPoints; return mHitPoints;
} }
}; };
@ -122,13 +122,13 @@ class RaycastScene : public SceneDemo {
// -------------------- Attributes -------------------- // // -------------------- Attributes -------------------- //
/// Contact point mesh folder path /// Contact point mesh folder path
std::string mMeshFolderPath; etk::String mMeshFolderPath;
/// Raycast manager /// Raycast manager
RaycastManager m_raycastManager; RaycastManager m_raycastManager;
/// All the raycast lines /// All the raycast lines
std::vector<Line*> mLines; etk::Vector<Line*> mLines;
/// Current body index /// Current body index
int32_t mCurrentBodyIndex; int32_t mCurrentBodyIndex;
@ -153,7 +153,7 @@ class RaycastScene : public SceneDemo {
ephysics::CollisionWorld* mCollisionWorld; ephysics::CollisionWorld* mCollisionWorld;
/// All the points to render the lines /// All the points to render the lines
std::vector<openglframework::vec3> mLinePoints; etk::Vector<openglframework::vec3> mLinePoints;
/// Vertex Buffer Object for the vertices data /// Vertex Buffer Object for the vertices data
openglframework::VertexBufferObject mVBOVertices; openglframework::VertexBufferObject mVBOVertices;
@ -173,7 +173,7 @@ class RaycastScene : public SceneDemo {
// -------------------- Methods -------------------- // // -------------------- Methods -------------------- //
/// Constructor /// Constructor
RaycastScene(const std::string& name); RaycastScene(const etk::String& name);
/// Destructor /// Destructor
virtual ~RaycastScene(); virtual ~RaycastScene();
@ -208,7 +208,7 @@ class RaycastScene : public SceneDemo {
void virtual setIsContactPointsDisplayed(bool display); void virtual setIsContactPointsDisplayed(bool display);
/// Return all the contact points of the scene /// Return all the contact points of the scene
virtual std::vector<ContactPoint> getContactPoints() const; virtual etk::Vector<ContactPoint> getContactPoints() const;
}; };
// Display or not the surface normals at hit points // Display or not the surface normals at hit points
@ -227,7 +227,7 @@ inline void RaycastScene::setIsContactPointsDisplayed(bool display) {
} }
// Return all the contact points of the scene // Return all the contact points of the scene
inline std::vector<ContactPoint> RaycastScene::getContactPoints() const { inline etk::Vector<ContactPoint> RaycastScene::getContactPoints() const {
return m_raycastManager.getHitPoints(); return m_raycastManager.getHitPoints();
} }

View File

@ -79,13 +79,13 @@ void Gui::update() {
} }
// Framerate (FPS) // Framerate (FPS)
mFPSLabel->setCaption(std::string("FPS : ") + floatToString(mCachedFPS, 0)); mFPSLabel->setCaption(etk::String("FPS : ") + floatToString(mCachedFPS, 0));
// Frame time // Frame time
mFrameTimeLabel->setCaption(std::string("Frame time : ") + floatToString(mCachedUpdateTime * 1000.0, 1) + std::string(" ms")); mFrameTimeLabel->setCaption(etk::String("Frame time : ") + floatToString(mCachedUpdateTime * 1000.0, 1) + etk::String(" ms"));
// Physics time // Physics time
mPhysicsTimeLabel->setCaption(std::string("Physics time : ") + floatToString(mCachedPhysicsUpdateTime * 1000.0, 1) + std::string(" ms")); mPhysicsTimeLabel->setCaption(etk::String("Physics time : ") + floatToString(mCachedPhysicsUpdateTime * 1000.0, 1) + etk::String(" ms"));
} }
void Gui::createSimulationPanel() { void Gui::createSimulationPanel() {
@ -122,10 +122,10 @@ void Gui::createSimulationPanel() {
}); });
// Scenes // Scenes
std::vector<Scene*> scenes = mApp->getScenes(); etk::Vector<Scene*> scenes = mApp->getScenes();
std::vector<std::string> scenesNames; etk::Vector<etk::String> scenesNames;
for (uint32_t i=0; i<scenes.size(); i++) { for (uint32_t i=0; i<scenes.size(); i++) {
scenesNames.push_back(scenes[i]->getName().c_str()); scenesNames.pushBack(scenes[i]->getName().c_str());
} }
new Label(mSimulationPanel, "Scene","sans-bold"); new Label(mSimulationPanel, "Scene","sans-bold");
ComboBox* comboBoxScenes = new ComboBox(mSimulationPanel, scenesNames, [&, scenes](int32_t index) { ComboBox* comboBoxScenes = new ComboBox(mSimulationPanel, scenesNames, [&, scenes](int32_t index) {
@ -191,7 +191,7 @@ void Gui::createSettingsPanel() {
out << std::setprecision(1) << std::fixed << (mApp->mEngineSettings.timeStep * 1000); out << std::setprecision(1) << std::fixed << (mApp->mEngineSettings.timeStep * 1000);
textboxTimeStep->setValue(out.str()); textboxTimeStep->setValue(out.str());
textboxTimeStep->setUnits("ms"); textboxTimeStep->setUnits("ms");
textboxTimeStep->setCallback([&, textboxTimeStep](const std::string &str) { textboxTimeStep->setCallback([&, textboxTimeStep](const etk::String &str) {
try { try {
float value = std::stof(str); float value = std::stof(str);
@ -221,9 +221,9 @@ void Gui::createSettingsPanel() {
TextBox* textboxVelocityIterations = new TextBox(panelVelocityIterations); TextBox* textboxVelocityIterations = new TextBox(panelVelocityIterations);
textboxVelocityIterations->setFixedSize(vec2i(70, 25)); textboxVelocityIterations->setFixedSize(vec2i(70, 25));
textboxVelocityIterations->setEditable(true); textboxVelocityIterations->setEditable(true);
textboxVelocityIterations->setValue(std::to_string(mApp->mEngineSettings.nbVelocitySolverIterations)); textboxVelocityIterations->setValue(etk::toString(mApp->mEngineSettings.nbVelocitySolverIterations));
textboxVelocityIterations->setUnits("iter"); textboxVelocityIterations->setUnits("iter");
textboxVelocityIterations->setCallback([&, textboxVelocityIterations](const std::string &str) { textboxVelocityIterations->setCallback([&, textboxVelocityIterations](const etk::String &str) {
try { try {
float value = std::stof(str); float value = std::stof(str);
@ -252,9 +252,9 @@ void Gui::createSettingsPanel() {
TextBox* textboxPositionIterations = new TextBox(panelPositionIterations); TextBox* textboxPositionIterations = new TextBox(panelPositionIterations);
textboxPositionIterations->setFixedSize(vec2i(70, 25)); textboxPositionIterations->setFixedSize(vec2i(70, 25));
textboxPositionIterations->setEditable(true); textboxPositionIterations->setEditable(true);
textboxPositionIterations->setValue(std::to_string(mApp->mEngineSettings.nbPositionSolverIterations)); textboxPositionIterations->setValue(etk::toString(mApp->mEngineSettings.nbPositionSolverIterations));
textboxPositionIterations->setUnits("iter"); textboxPositionIterations->setUnits("iter");
textboxPositionIterations->setCallback([&, textboxPositionIterations](const std::string &str) { textboxPositionIterations->setCallback([&, textboxPositionIterations](const etk::String &str) {
try { try {
float value = std::stof(str); float value = std::stof(str);
@ -287,7 +287,7 @@ void Gui::createSettingsPanel() {
textboxTimeSleep->setEditable(true); textboxTimeSleep->setEditable(true);
textboxTimeSleep->setValue(out.str()); textboxTimeSleep->setValue(out.str());
textboxTimeSleep->setUnits("ms"); textboxTimeSleep->setUnits("ms");
textboxTimeSleep->setCallback([&, textboxTimeSleep](const std::string &str) { textboxTimeSleep->setCallback([&, textboxTimeSleep](const etk::String &str) {
try { try {
float value = std::stof(str); float value = std::stof(str);
@ -321,7 +321,7 @@ void Gui::createSettingsPanel() {
textboxSleepLinearVel->setEditable(true); textboxSleepLinearVel->setEditable(true);
textboxSleepLinearVel->setValue(out.str()); textboxSleepLinearVel->setValue(out.str());
textboxSleepLinearVel->setUnits("m/s"); textboxSleepLinearVel->setUnits("m/s");
textboxSleepLinearVel->setCallback([&, textboxSleepLinearVel](const std::string &str) { textboxSleepLinearVel->setCallback([&, textboxSleepLinearVel](const etk::String &str) {
try { try {
float value = std::stof(str); float value = std::stof(str);
@ -355,7 +355,7 @@ void Gui::createSettingsPanel() {
textboxSleepAngularVel->setEditable(true); textboxSleepAngularVel->setEditable(true);
textboxSleepAngularVel->setValue(out.str()); textboxSleepAngularVel->setValue(out.str());
textboxSleepAngularVel->setUnits("rad/s"); textboxSleepAngularVel->setUnits("rad/s");
textboxSleepAngularVel->setCallback([&, textboxSleepAngularVel](const std::string &str) { textboxSleepAngularVel->setCallback([&, textboxSleepAngularVel](const etk::String &str) {
try { try {
float value = std::stof(str); float value = std::stof(str);
@ -415,13 +415,13 @@ void Gui::createProfilingPanel() {
profilingPanel->setFixedWidth(220); profilingPanel->setFixedWidth(220);
// Framerate (FPS) // Framerate (FPS)
mFPSLabel = new Label(profilingPanel, std::string("FPS : ") + floatToString(mCachedFPS, 0),"sans-bold"); mFPSLabel = new Label(profilingPanel, etk::String("FPS : ") + floatToString(mCachedFPS, 0),"sans-bold");
// Update time // Update time
mFrameTimeLabel = new Label(profilingPanel, std::string("Frame time : ") + floatToString(mCachedUpdateTime * 1000.0, 1) + std::string(" ms"),"sans-bold"); mFrameTimeLabel = new Label(profilingPanel, etk::String("Frame time : ") + floatToString(mCachedUpdateTime * 1000.0, 1) + etk::String(" ms"),"sans-bold");
// Update time // Update time
mPhysicsTimeLabel = new Label(profilingPanel, std::string("Physics time : ") + floatToString(mCachedPhysicsUpdateTime * 1000.0, 1) + std::string(" ms"),"sans-bold"); mPhysicsTimeLabel = new Label(profilingPanel, etk::String("Physics time : ") + floatToString(mCachedPhysicsUpdateTime * 1000.0, 1) + etk::String(" ms"),"sans-bold");
profilingPanel->setVisible(true); profilingPanel->setVisible(true);
} }

View File

@ -71,7 +71,7 @@ class Gui {
Label* mFrameTimeLabel; Label* mFrameTimeLabel;
Label* mPhysicsTimeLabel; Label* mPhysicsTimeLabel;
std::vector<CheckBox*> mCheckboxesScenes; etk::Vector<CheckBox*> mCheckboxesScenes;
// -------------------- Methods -------------------- // // -------------------- Methods -------------------- //
@ -98,7 +98,7 @@ class Gui {
void createProfilingPanel(); void createProfilingPanel();
// Convert float value to string // Convert float value to string
std::string floatToString(float value, int32_t precision); etk::String floatToString(float value, int32_t precision);
public : public :
@ -132,8 +132,8 @@ inline void Gui::setScroll(double scrollX, double scrollY) {
mScrollY = scrollY; mScrollY = scrollY;
} }
inline std::string Gui::floatToString(float value, int32_t precision) { inline etk::String Gui::floatToString(float value, int32_t precision) {
std::stringstream ss; etk::Stringstream ss;
ss << std::fixed << std::setprecision(precision) << value; ss << std::fixed << std::setprecision(precision) << value;
return ss.str(); return ss.str();
} }

View File

@ -30,7 +30,7 @@
using namespace openglframework; using namespace openglframework;
// Constructor // Constructor
Scene::Scene(const std::string& name, bool isShadowMappingEnabled) Scene::Scene(const etk::String& name, bool isShadowMappingEnabled)
: m_name(name), mInterpolationFactor(0.0f), mViewportX(0), mViewportY(0), : m_name(name), mInterpolationFactor(0.0f), mViewportX(0), mViewportY(0),
mViewportWidth(0), mViewportHeight(0), mIsShadowMappingEnabled(isShadowMappingEnabled), mViewportWidth(0), mViewportHeight(0), mIsShadowMappingEnabled(isShadowMappingEnabled),
mIsContactPointsDisplayed(true) { mIsContactPointsDisplayed(true) {

View File

@ -73,7 +73,7 @@ class Scene {
// -------------------- Attributes -------------------- // // -------------------- Attributes -------------------- //
/// Scene name /// Scene name
std::string m_name; etk::String m_name;
/// Physics engine settings /// Physics engine settings
EngineSettings mEngineSettings; EngineSettings mEngineSettings;
@ -134,7 +134,7 @@ class Scene {
// -------------------- Methods -------------------- // // -------------------- Methods -------------------- //
/// Constructor /// Constructor
Scene(const std::string& name, bool isShadowMappingEnabled = false); Scene(const etk::String& name, bool isShadowMappingEnabled = false);
/// Destructor /// Destructor
virtual ~Scene(); virtual ~Scene();
@ -188,7 +188,7 @@ class Scene {
void setInterpolationFactor(float int32_terpolationFactor); void setInterpolationFactor(float int32_terpolationFactor);
/// Return the name of the scene /// Return the name of the scene
std::string getName() const; etk::String getName() const;
/// Return true if the shadow mapping is enabled /// Return true if the shadow mapping is enabled
bool getIsShadowMappingEnabled() const; bool getIsShadowMappingEnabled() const;
@ -200,7 +200,7 @@ class Scene {
void virtual setIsContactPointsDisplayed(bool display); void virtual setIsContactPointsDisplayed(bool display);
/// Return all the contact points of the scene /// Return all the contact points of the scene
std::vector<ContactPoint> virtual getContactPoints() const; etk::Vector<ContactPoint> virtual getContactPoints() const;
}; };
// Called when a keyboard event occurs // Called when a keyboard event occurs
@ -248,7 +248,7 @@ inline void Scene::setInterpolationFactor(float int32_terpolationFactor) {
} }
// Return the name of the scene // Return the name of the scene
inline std::string Scene::getName() const { inline etk::String Scene::getName() const {
return m_name; return m_name;
} }
@ -268,10 +268,10 @@ inline void Scene::setIsContactPointsDisplayed(bool display) {
} }
// Return all the contact points of the scene // Return all the contact points of the scene
inline std::vector<ContactPoint> Scene::getContactPoints() const { inline etk::Vector<ContactPoint> Scene::getContactPoints() const {
// Return an empty list of contact points // Return an empty list of contact points
return std::vector<ContactPoint>(); return etk::Vector<ContactPoint>();
} }
#endif #endif

View File

@ -41,7 +41,7 @@ openglframework::Color SceneDemo::mDemoColors[] = {SceneDemo::mYellowColorDemo,
SceneDemo::mOrangeColorDemo, SceneDemo::mPinkColorDemo}; SceneDemo::mOrangeColorDemo, SceneDemo::mPinkColorDemo};
// Constructor // Constructor
SceneDemo::SceneDemo(const std::string& name, float sceneRadius, bool isShadowMappingEnabled) SceneDemo::SceneDemo(const etk::String& name, float sceneRadius, bool isShadowMappingEnabled)
: Scene(name, isShadowMappingEnabled), mIsShadowMappingInitialized(false), : Scene(name, isShadowMappingEnabled), mIsShadowMappingInitialized(false),
mDepthShader("shaders/depth.vert", "shaders/depth.frag"), mDepthShader("shaders/depth.vert", "shaders/depth.frag"),
mPhongShader("shaders/phong.vert", "shaders/phong.frag"), mPhongShader("shaders/phong.vert", "shaders/phong.frag"),
@ -282,15 +282,15 @@ void SceneDemo::updateContactPoints() {
if (mIsContactPointsDisplayed) { if (mIsContactPointsDisplayed) {
// Get the current contact points of the scene // Get the current contact points of the scene
std::vector<ContactPoint> contactPoints = getContactPoints(); etk::Vector<ContactPoint> contactPoints = getContactPoints();
// For each contact point // For each contact point
std::vector<ContactPoint>::const_iterator it; etk::Vector<ContactPoint>::const_iterator it;
for (it = contactPoints.begin(); it != contactPoints.end(); ++it) { for (it = contactPoints.begin(); it != contactPoints.end(); ++it) {
// Create a visual contact point for rendering // Create a visual contact point for rendering
VisualContactPoint* point = new VisualContactPoint(it->point, mMeshFolderPath); VisualContactPoint* point = new VisualContactPoint(it->point, mMeshFolderPath);
m_contactPoints.push_back(point); m_contactPoints.pushBack(point);
} }
} }
} }
@ -300,7 +300,7 @@ void SceneDemo::renderContactPoints(openglframework::Shader& shader,
const openglframework::Matrix4& worldToCameraMatrix) { const openglframework::Matrix4& worldToCameraMatrix) {
// Render all the raycast hit points // Render all the raycast hit points
for (std::vector<VisualContactPoint*>::iterator it = m_contactPoints.begin(); for (etk::Vector<VisualContactPoint*>::iterator it = m_contactPoints.begin();
it != m_contactPoints.end(); ++it) { it != m_contactPoints.end(); ++it) {
(*it)->render(shader, worldToCameraMatrix); (*it)->render(shader, worldToCameraMatrix);
} }
@ -309,7 +309,7 @@ void SceneDemo::renderContactPoints(openglframework::Shader& shader,
void SceneDemo::removeAllContactPoints() { void SceneDemo::removeAllContactPoints() {
// Destroy all the visual contact points // Destroy all the visual contact points
for (std::vector<VisualContactPoint*>::iterator it = m_contactPoints.begin(); for (etk::Vector<VisualContactPoint*>::iterator it = m_contactPoints.begin();
it != m_contactPoints.end(); ++it) { it != m_contactPoints.end(); ++it) {
delete (*it); delete (*it);
} }
@ -317,15 +317,15 @@ void SceneDemo::removeAllContactPoints() {
} }
// Return all the contact points of the scene // Return all the contact points of the scene
std::vector<ContactPoint> SceneDemo::computeContactPointsOfWorld(const ephysics::DynamicsWorld* world) const { etk::Vector<ContactPoint> SceneDemo::computeContactPointsOfWorld(const ephysics::DynamicsWorld* world) const {
std::vector<ContactPoint> contactPoints; etk::Vector<ContactPoint> contactPoints;
// Get the list of contact manifolds from the world // Get the list of contact manifolds from the world
std::vector<const ephysics::ContactManifold*> manifolds = world->getContactsList(); etk::Vector<const ephysics::ContactManifold*> manifolds = world->getContactsList();
// For each contact manifold // For each contact manifold
std::vector<const ephysics::ContactManifold*>::const_iterator it; etk::Vector<const ephysics::ContactManifold*>::const_iterator it;
for (it = manifolds.begin(); it != manifolds.end(); ++it) { for (it = manifolds.begin(); it != manifolds.end(); ++it) {
const ephysics::ContactManifold* manifold = *it; const ephysics::ContactManifold* manifold = *it;
@ -336,7 +336,7 @@ std::vector<ContactPoint> SceneDemo::computeContactPointsOfWorld(const ephysics:
ephysics::ContactPoint* contactPoint = manifold->getContactPoint(i); ephysics::ContactPoint* contactPoint = manifold->getContactPoint(i);
ephysics::vec3 point = contactPoint->getWorldPointOnBody1(); ephysics::vec3 point = contactPoint->getWorldPointOnBody1();
ContactPoint contact(openglframework::vec3(point.x(), point.y(), point.z())); ContactPoint contact(openglframework::vec3(point.x(), point.y(), point.z()));
contactPoints.push_back(contact); contactPoints.pushBack(contact);
} }
} }

View File

@ -59,7 +59,7 @@ class SceneDemo : public Scene {
static int32_t shadowMapTextureLevel; static int32_t shadowMapTextureLevel;
/// All the visual contact points /// All the visual contact points
std::vector<VisualContactPoint*> m_contactPoints; etk::Vector<VisualContactPoint*> m_contactPoints;
/// Shadow map bias matrix /// Shadow map bias matrix
openglframework::Matrix4 mShadowMapBiasMatrix; openglframework::Matrix4 mShadowMapBiasMatrix;
@ -90,7 +90,7 @@ class SceneDemo : public Scene {
static openglframework::Color mDemoColors[]; static openglframework::Color mDemoColors[];
static int32_t mNbDemoColors; static int32_t mNbDemoColors;
std::string mMeshFolderPath; etk::String mMeshFolderPath;
// -------------------- Methods -------------------- // // -------------------- Methods -------------------- //
@ -117,7 +117,7 @@ class SceneDemo : public Scene {
// -------------------- Methods -------------------- // // -------------------- Methods -------------------- //
/// Constructor /// Constructor
SceneDemo(const std::string& name, float sceneRadius, bool isShadowMappingEnabled = true); SceneDemo(const etk::String& name, float sceneRadius, bool isShadowMappingEnabled = true);
/// Destructor /// Destructor
virtual ~SceneDemo(); virtual ~SceneDemo();
@ -136,7 +136,7 @@ class SceneDemo : public Scene {
void virtual setIsShadowMappingEnabled(bool isShadowMappingEnabled); void virtual setIsShadowMappingEnabled(bool isShadowMappingEnabled);
/// Return all the contact points of the scene /// Return all the contact points of the scene
std::vector<ContactPoint> computeContactPointsOfWorld(const ephysics::DynamicsWorld* world) const; etk::Vector<ContactPoint> computeContactPointsOfWorld(const ephysics::DynamicsWorld* world) const;
}; };
// Enabled/Disable the shadow mapping // Enabled/Disable the shadow mapping

View File

@ -95,27 +95,27 @@ void TestbedApplication::createScenes() {
// Cubes scene // Cubes scene
CubesScene* cubeScene = new CubesScene("Cubes"); CubesScene* cubeScene = new CubesScene("Cubes");
mScenes.push_back(cubeScene); mScenes.pushBack(cubeScene);
// Joints scene // Joints scene
JointsScene* jointsScene = new JointsScene("Joints"); JointsScene* jointsScene = new JointsScene("Joints");
mScenes.push_back(jointsScene); mScenes.pushBack(jointsScene);
// Collision shapes scene // Collision shapes scene
CollisionShapesScene* collisionShapesScene = new CollisionShapesScene("Collision Shapes"); CollisionShapesScene* collisionShapesScene = new CollisionShapesScene("Collision Shapes");
mScenes.push_back(collisionShapesScene); mScenes.pushBack(collisionShapesScene);
// Heightfield shape scene // Heightfield shape scene
HeightFieldScene* heightFieldScene = new HeightFieldScene("Heightfield"); HeightFieldScene* heightFieldScene = new HeightFieldScene("Heightfield");
mScenes.push_back(heightFieldScene); mScenes.pushBack(heightFieldScene);
// Raycast scene // Raycast scene
RaycastScene* raycastScene = new RaycastScene("Raycast"); RaycastScene* raycastScene = new RaycastScene("Raycast");
mScenes.push_back(raycastScene); mScenes.pushBack(raycastScene);
// Raycast scene // Raycast scene
ConcaveMeshScene* concaveMeshScene = new ConcaveMeshScene("Concave Mesh"); ConcaveMeshScene* concaveMeshScene = new ConcaveMeshScene("Concave Mesh");
mScenes.push_back(concaveMeshScene); mScenes.pushBack(concaveMeshScene);
assert(mScenes.size() > 0); assert(mScenes.size() > 0);
mCurrentScene = mScenes[0]; mCurrentScene = mScenes[0];
@ -270,7 +270,7 @@ void TestbedApplication::checkOpenGLErrorsInternal(const char* file, int32_t lin
// While there are errors // While there are errors
while (glError != GL_NO_ERROR) { while (glError != GL_NO_ERROR) {
std::string error; etk::String error;
switch(glError) { switch(glError) {
case GL_INVALID_OPERATION: error="INVALID_OPERATION"; break; case GL_INVALID_OPERATION: error="INVALID_OPERATION"; break;

View File

@ -60,7 +60,7 @@ class TestbedApplication : public Screen {
Timer mTimer; Timer mTimer;
/// List of 3D scenes /// List of 3D scenes
std::vector<Scene*> mScenes; etk::Vector<Scene*> mScenes;
/// Current 3D scene /// Current 3D scene
Scene* mCurrentScene; Scene* mCurrentScene;
@ -142,7 +142,7 @@ class TestbedApplication : public Screen {
void destroyScenes(); void destroyScenes();
/// Return the list of the scenes /// Return the list of the scenes
std::vector<Scene*> getScenes(); etk::Vector<Scene*> getScenes();
/// Start/stop the simulation /// Start/stop the simulation
void togglePlayPauseSimulation(); void togglePlayPauseSimulation();
@ -208,7 +208,7 @@ class TestbedApplication : public Screen {
}; };
// Return the list of the scenes // Return the list of the scenes
inline std::vector<Scene*> TestbedApplication::getScenes() { inline etk::Vector<Scene*> TestbedApplication::getScenes() {
return mScenes; return mScenes;
} }