c++ crash lorsque j'appelle une fonction membre sur une simple variable.
Salut, j'ai une classe ici :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| Instance::Instance (Material& material, sf::PrimitiveType pType) : material(material) {
primType = pType;
numInstances = 0;
vertices = VertexArray(pType);
}
void Instance::addVertexArray(VertexArray va, TransformMatrix tm) {
m_transforms.push_back(tm);
m_vertexArrays.push_back(va);
for (unsigned int i = 0; i < va.getVertexCount(); i++) {
Vertex v (tm.transform(math::Vec3f(va[i].position.x, va[i].position.y, va[i].position.z)), va[i].color, va[i].texCoords);
vertices.append(v);
}
}
void Instance::sortVertexArrays(View& view) {
vertices.clear();
std::multimap<float, VertexArray> sortedVA;
std::multimap<float, TransformMatrix> sortedTM;
for (unsigned int i = 0; i < m_vertexArrays.size(); i++) {
odfaeg::math::Vec3f center;
if (m_vertexArrays[i].getEntity() != nullptr) {
center = view.getViewMatrix().transform(m_vertexArrays[i].getEntity()->getCenter());
}
sortedVA.insert(std::make_pair(center.z, m_vertexArrays[i]));
sortedTM.insert(std::make_pair(center.z, m_transforms[i]));
}
m_vertexArrays.clear();
m_transforms.clear();
std::multimap<float, VertexArray>::iterator it;
std::multimap<float, TransformMatrix>::iterator it2;
for (it = sortedVA.begin(); it != sortedVA.end(); it++, it2++) {
VertexArray va = it->second;
TransformMatrix tm = it2->second;
m_vertexArrays.push_back(va);
m_transforms.push_back(tm);
for (unsigned int i = 0; i < it->second.getVertexCount(); i++) {
Vertex v (tm.transform(math::Vec3f(va[i].position.x, va[i].position.y, va[i].position.z)), va[i].color, va[i].texCoords);
vertices.append(v);
}
}
}
VertexArray& Instance::getAllVertices() {
return vertices;
}
std::vector<VertexArray> Instance::getVertexArrays() {
return m_vertexArrays;
}
void Instance::clear() {
m_transforms.clear();
m_vertexArrays.clear();
} |
Ou je ne fais que d'ajouter et trier des tableaux de sommets. Mais lorsque j'appelle la méthode sortVertexArrays j'ai un crash :
Code:
1 2 3 4 5 6 7 8 9 10
|
int main(int argc, char* argv[])
{
RenderWindow window(sf::VideoMode(800, 600, 32), "Test odfaeg",sf::Style::Default, sf::ContextSettings(0, 0, 4, 3, 0));
Tile tile(nullptr, Vec3f(0, 0, 0), Vec3f(100, 100, 0), sf::IntRect(0, 0, 0, 0));
Instance instance(tile.getFaces()[0]->getMaterial(), sf::Quads);
instance.addVertexArray(tile.getFaces()[0]->getVertexArray(), tile.getTransform());
instance.sortVertexArrays(window.getView());
return 0;
} |
Code:
1 2 3
|
#0 0x80aee2e odfaeg::graphic::Instance::sortVertexArrays(this=0xbfffed40, view=...) (/home/laurent/Développement/Projets-c++/ODFAEG/src/odfaeg/Graphics/batcher.cpp:194)
#1 0x808d1aa main(argc=1, argv=0xbffff614) (/home/laurent/Développement/Projets-c++/ODFAEG-DEMO/main.cpp:100) |
On dirait que la matrice de transformation existe mais il n'arrive pas à appeler la méthode dessus, je ne comprend pas pourquoi.