Как визуализировать прокручивающую консоль? Пример:Проигрыватель прокрутки консоли
содержимого памяти (кадр 0):
Line 0
Line 1
Line 2
Line 3
Line 4
содержимого памяти (кадр 1):
Line 5
Line 1
Line 2
Line 3
Line 4
Соответствующий вывод на экран для кадра 1:
Line 1
Line 2
Line 3
Line 4
Line 5
текст передается объекту framebuffer (некоторые связанные с ним обертки):
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();
}
Рендеринг работает для тривиального Console::lineOffsetGet
что черпает содержимое памяти в порядке памяти: это
auto n_rows=rowsCountGet();
return -static_cast<float>(2*k)/static_cast<float>(n_rows);
где k
является строка в памяти. Я не могу найти, как сделать Console::lineOffsetGet
сделать необходимое преобразование (помещает последнюю строку внизу). Он должен отобразить строку в памяти k
, чтобы соответствовать координатам y
. нужно найти формулу для вычисления строки на экране, заданной для строки в памяти. Я попытался Пробовал
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);
где m_line_current
увеличивается для каждой строки, написанные на консоли, начиная с нуля. Это работает для двух экранных страниц, но ломается в начале третьего.