Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

16.04.2011, 10:28

C-/C++-Quelltext

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
// CTerrain.cpp
void CTerrain::exitTerrain()
{
    //OGRE_DELETE mTerrainGroup;
    OGRE_DELETE mTerrain1;
    OGRE_DELETE mTerrainGlobals;
}

// main.cpp
bool CApp::destroyScene()
{
    // Terrain
    mTerrain.exitTerrain();

    return true;
}

// App.cpp
bool CApp::go()
{
//...

    if(!createScene())
        return false;

    mRoot->startRendering();

    destroyScene();

    return true;
}

12

16.04.2011, 10:38

Hmm sieht ganz okay aus, hast schon mal probiert mit dem Debugger zu gucken was der Callstack sagt?

13

16.04.2011, 16:52

Komisch, ich hab ein paarmal gedebuggt und jetzt funktioniert das Programm ohne Fehlermeldung. Allerdings braucht er noch extrem lange bis er nach Escape korrekt beendet. Der Debugger hat mir einmal eine Zugriffsverletzung beim Löschen des Terrains ausgegeben und danach nichts mehr. Am Code habe ich nichts verändert

14

20.04.2011, 15:03

Ich habe das Projekt mal ein paar Tage ruhen lassen,jetzt gehts weiter. Das ich nichts am Code verändert und trotzdem die Fehlermeldung nicht mehr kommt ist natürlich Unsinn. Vermutlich hatte ich ausversehen ein new statt einem OGRE_NEW stehen.
Die Zeitverzögerung tritt bei den beiden OGRE_DELETEs auf, allerdings funktioniert es auch ohne sie nicht richtig
Folgende Zeilen sind mir in dem Log ohne die OGRE_DELETEs stark aufgefallen:

Zitat

14:53:35: DefaultWorkQueue('Root')::WorkerFunc - thread 007BB2C0 stopped.
14:53:35: DefaultWorkQueue('Root')::WorkerFunc - thread 007BB2F0 stopped.
14:53:35: DefaultWorkQueue('Root')::WorkerFunc - thread 007BB260 stopped.
14:56:49: DefaultWorkQueue('Root')::WorkerFunc - thread 007BB290 stopped.
Habe ich sie mit dabei beendet das Programm laut Konsole korrekt,im Log wird allerdings der ganze Herunterfahrvorgang nicht mehr angezeigt

15

20.04.2011, 19:43

Also die Logzeilen sagen ja nur aus das die Workqueues deaktiviert wurden. Das ist ja nichts schlimmes und auch kein error :D

16

20.04.2011, 19:47

Das stimmt,ich warte aber ungern 3 - 5 Minuten bis Ogre herunterfährt ;)

17

21.04.2011, 13:17

Das Problem tritt zwar noch auf, aber da ich das Terrain nun einigermaßen verstanden habe, gehe ich wieder zur TerrainGroup über. Ich habe mir eine Funktion zum Verändern der Höhe geschrieben, mit der ich die Höhe an einer Position über eine bestimmte Größe verändern kann. Dummerweise wird wenn ich größere Flächen verändere die Funktion changeHeightAtPos() in meiner Funktion sehr oft aufgerufen und das führt zu ernsthaften Verzögerungen. Ich kann mir allerdings nicht vorstellen, dass Ogre keinen Weg bietet das auf andere Weise zu lösen. Wie bekomme ich das schneller auf die Reihe?

18

21.04.2011, 13:51

Naja du musst da immer mit Frameeinbrüchen rechnen, ist ja normal.
Ist das den so viel?
Bei mir wird das ja auch sehr oft aufgerufen, wenn ich gerade was verändere.
Aber Splatting ist glaube ich noch Hardwarehungriger.

19

21.04.2011, 14:21

Hmm, soviel ist es nicht, ich wollte nur mal mit größeren Zahlen testen. Kommt es mir nur so vor oder rundet Ogre die Kanten der veränderten Flächen von selbst ab?

20

21.04.2011, 14:51

Vll macht das ja dein Algorithmus bereits^^
Eigentlich rundet Ogre nichts ;)

Werbeanzeige