Funktion zum zeichnen von text auf dem Bildschirm mit C++/OpenGL/Glut schneller als glutBitmapCharacter

Ich brauche etwas muuuch schneller als glutBitmapCharacter(Schrift, text[i]). Es ist eine Verringerung performacne paar mal ! Ich brauche zur Anzeige von fps -, xyz-position etc. also nicht in 3D nur die Anzeige HUD.

Derzeit bin ich mit :

glRasterPos2f(x,y);

for (int i=0; i<text.size(); i++)
{
   glutBitmapCharacter(font, text[i]);
}

Bin ich mit dieser Funktion :

void glutPrint(float x, float y, LPVOID font, string text) 
{ 
    glRasterPos2f(x,y); 

    for (int i=0; i<text.size(); i++)
    {
        glutBitmapCharacter(font, text[i]);
    }
}

Jedes Bild im DisplayFunction in der Zeichnung Abschnitt " HUD " (Aufruf DrawHUD()) :

void DrawHUD (void)
{
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    glOrtho(0.0, windowWidth, windowHeight, 0.0, -1.0, 10.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glClear(GL_DEPTH_BUFFER_BIT);
    glColor3f(0.2f,0.2f,0.2f);

    glutPrint(2,10,glutFonts[4],its(sfps)+" fps; "+its(todrawquads)+" quads drawing; ");

    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    glMatrixMode(GL_MODELVIEW);

}

Auch mit int zu string-Funktion :

string its(int i)
{
stringstream out;
out << i;
return out.str();
}

einige Tatsache über die Leistung (gemessen in FPS)

Ohne Aufruf DrawHUD Funktion ~ 3500

Mit Berufung DrawHUD Funktion ~ 3500 (vielleicht ein paar weniger fps)

Mit DrawHUD + 1 x GlutPrint ~ 3300

Mit DrawHUD + 2 x GlutPrint ~ 2400

Mit DrawHUD + 3 x GlutPrint ~ 1700

(zB. wenn ich meine 3 x GlutPrint ich meinte DrawHUD :

{
[...]

glutPrint(...);
glutPrint(...);
glutPrint(...);

[...]
}

)

Das ist nicht schön ... ich weiß, dass die Messung mit frame-rate ist nicht gut.

auch

wenn ich sagte :

glutBitmapCharacter(Schrift, text[i]);

in der Schleife, die in glutPrint es war ~3500 fps ... also ich bin SICHER, dass glutBitmapCharacter problem. So was benutzen Sie stattdessen, es 🙂 ?

Dann, was zu tun ist ?

  • Ich bezweifle, glutBitmapCharacter ein Engpass. Bitte zeigen Sie den Kontext, in dem der code aufgerufen wird.
  • Zeit zu geben, auf die GLUT. Deine Frage ist viel zu schlecht dokumentiert, um vorschlagen, eine bessere Bibliothek.
  • Ich bin mir nicht sicher über die glut, aber ich weiß, GDI usw. es ist viel besser zu zeichnen in einen Puffer und ziehen Sie dann den Puffer.
  • Das ist hier nicht der Fall. glutBitmapCharacter bietet nur wenig Komfort rund um glBitmap. glBitmap selbst ist Recht schnell, aber wenn Sie in der falschen Kontext auslösen können einige Auswirkungen auf die Leistung.
  • check code (aktualisiert)
  • Jetzt haben Sie genügend Informationen , richtig 🙂 ?
  • keine Sorge. Wie gesagt, ich weiß nicht viel über gl.
  • Uhh, also das, was ich stattdessen verwenden können von glutBitmapCharacter ??
  • Hmm, das ist wirklich strage. Ich sehe keinen Grund, warum sollten Sie laufen in eine OpenGL-Synchronisation Punkt. Welche GPU nutzt du? Ist es ein AMD/ATI ein? Wenn dem so ist, dann wäre ich weniger überrascht. Jetzt anderen dir bereits gesagt, nicht zu verwenden, GLUT. Ich bin damit einverstanden, aber ich, dass glBitmap verursachen würde wie ein Tropfen habe ich nicht erwartet. Trotzdem, zum testen, ausprobieren glutStrokeCharacter, sieht nicht so schön, aber tut, ziehen Zeichen mit GL_LINES openglut.sourceforge.net/group__fonts.html
  • Ich werde diese Weise, aber wenn glutStrokeCharacter text wird rückgängig gemacht, und wie im Spiegel reflektiert. Wie es zu lösen ist ?
  • Von nicht sagen, OpenGL spiegeln die Projektion in die Y-Achse. Die Art und Weise, die Sie genannt glOrtho wird es drehen. tauschen Sie die oberen und unteren parameter und stellen Sie die Koordinaten der linken unteren (das ist, wo OpenGL Orte der screeen Herkunft).
  • glBitmap ist lächerlich langsam. Das ist, warum jeder benutzt Texturierung zum zeichnen von bitmaps.

InformationsquelleAutor dj8000 | 2011-06-17
Schreibe einen Kommentar