Wie kann ich eine Scroll-Konsole rendern? Beispiel:Render Scroll-Konsole
Speicherinhalt (Frame 0):
Line 0
Line 1
Line 2
Line 3
Line 4
Speicherinhalt (Frame 1):
Line 5
Line 1
Line 2
Line 3
Line 4
Die entsprechende Bildschirmausgabe für Frame 1:
Line 1
Line 2
Line 3
Line 4
Line 5
The Text wird in ein Framebuffer-Objekt gerendert (einige Wrapper beteiligt):
auto N=r_console->rowsCountGet();
for(size_t k=0;k<N;++k)
{
glUniform3f(m_voffset_loc,0.0f,r_console->lineOffsetGet(k),0.0f);
m_faces.dataSet(r_console->facesGet(k),GL_STATIC_DRAW);
m_faces.draw();
}
Die Wiedergabe arbeitet für eine triviale Console::lineOffsetGet
, die den Speicherinhalt in der Speicherreihenfolge zieht: das heißt
auto n_rows=rowsCountGet();
return -static_cast<float>(2*k)/static_cast<float>(n_rows);
wo k
ist die Zeile in Speicher. Ich kann nicht finden, wie man Console::lineOffsetGet
macht, die gewünschte Umwandlung zu machen (setzt die späteste Linie an der Unterseite). Es sollte eine Zeile im Speicher k
zu geeigneten y
Koordinaten zuordnen. müssen eine Formel finden, um die Zeile auf dem Bildschirm zu berechnen, wenn die Zeile im Speicher vorhanden ist. Ich habe versucht
auto n_rows=rowsCountGet();
auto m_line_current<=n_rows? //If current line fits on the screen it is trivial
k : (k+ (n_rows-(m_line_current-n_rows)%n_rows))%n_rows;
return -static_cast<float>(2*k)/static_cast<float>(n_rows);
wo m_line_current
Erhöhungen für jede Zeile in die Konsole geschrieben beginnend bei Null. Dies funktioniert für zwei Bildschirmseiten, bricht aber zu Beginn des dritten.