Bekannte Probleme mit externen Bibliotheken

Aus PantheonWiki


Hier bitte Problem mit den anderen Libs eintragen, die wir so verwenden.

Inhaltsverzeichnis

Boost Bibliothek

Bind

  • Problem: Wie funktioniert das mit dem Bind
  • Lösung: http://www.boost.org/libs/bind/bind.html#with_member_pointers
    • Brauche ich das Ereignis selbst, muss
      boost::bind(&CeConsole::handleEnter, this, _1)
      benutzt werden (mehr Parameter sind natürlich möglich, siehe obigen Link), die Methode hat dann die Signatur
      bool CeConsole::handleEnter(const CEGUI:: EventArgs& e)
    • Brauche ich das Ereignis nicht, kann ich z.B. folgendes benutzen
      boost::bind(&CharacterSheetWindow::showTab, this, (utf8*)" MagicSheet ")
      dann muss die Methode die Signatur
      bool CharacterSheetWindow::showTab(utf8*)
      haben.

Thread

  • Problem: Wie funktioniert das mit den Threads
  • Lösung: http://www.boost.org/doc/html/threads.html
    • Boost Thread möchte gerne einen Funktor, als ein Funktionsobjekt haben. D.h. man muss dem Konstruktor von boost::thread ein Objekt mit
      operator() ()
      übergeben.
    • Bei thread::sleep(xtime) muss man beachten, dass sleep als Wecker funktioniert, also muss man den Zeitpunkt angeben, an dem sleep wieder aufwachen soll.
    • Für einen Mutex muss man zum Locken ein Objekt vom Typ boost::mutex::scoped_lock definieren. Das Mutex ist gesperrt, solange das Lock-Objekt lebt.
...
{
  scoped_lock lock(mutex);
  ...
}
...

Crazy Eddie's Gui

  • Problem: Beim Debuggen sehe ich nicht den Inhalt eines CeGuiStrings
  • Lösung: In Visual Studio gibt es die Möglichkeit dem Debugger zu erklären wie er Klassen/Strukturen anzeigen soll. Dies steht in der Datei autoexp.dat, zu finden unter Programme\Microsoft Visual Studio 8\Common7\Packages\Debugger (o.ä. bei anderen VS-Versionen)

Die folgenden Zeilen einfach in der autoexp.dat hinzufügen, und zwar am Ende der Datei, aber noch über [hresult]:

CEGUI::String{
  preview
  (
	#if (($c.d_reserve) > (32))
	(
		[$c.d_buffer,sub]
	)
	#else
	(
		[$c.d_quickbuff,sub]
	)
  )
	
  stringview
  (
	#if ($c.d_reserve > 32)
	(
		[$c.d_buffer,su]
	)
	#else
	(
		[$c.d_quickbuff,su]
	)
  )
  children
  (
    #(
          [raw members]: [$c,!],
          [size]: $c.d_cplength,
          #if (($c.d_cplength) < 32) 
          (
            #array (
                expr: $c.d_quickbuff[$i],
                size: $c.d_cplength
            ) : [$e, c]
          ) #else (
            #array (
                expr: $c.d_buffer[$i],
                size: $c.d_cplength
            ) : [$e, c]
          )
    )
  )
}

Die "alte" Darstellung aller Member findet man in "raw members" Das ganze sieht dann so aus:

Bild:Autoexp.PNG

Devil Bibliothek

  • Problem: Ich schaffe es nicht, Devil unter Linux zu kompilieren.
  • Lösung: Nimm die 1.6.5, die 1.6.6 und 1.6.7 sind kaputt.


Ogre

Das Ogre Koordinatensystem

Ogre verwendet ein rechtshändiges System, das bedeutet konkret X geht nach rechts, Y nach oben und Z nach vorne (also quasi zu einem hin).

  • Rotation um X ist pitch
  • Rotation um Y ist yaw
  • Rotation um Z ist roll

Noch hinzuzufügen:

  • Quaternionen

Links

Persönliche Werkzeuge
Link zur berliOS-Projektseite