Генерация очень больших изображений во время выполнения с OpenGL и libgdx - PullRequest
1 голос
/ 02 февраля 2012

Я генерирую очень большие гекс-гриды (общее количество гексов до 120 КБ в гексах шириной 32 пикселя приводит к изображениям шириной более 12 КБ), и я пытаюсь найти эффективный способ связать их с текстурами OpenGL в libgdx.Я думал об использовании нескольких FBO и разбивке сетки по мере необходимости на тайлы, но я не уверен, как обеспечить непрерывность между FBO.Я не могу начать с одного массивного FBO, потому что оно поддерживается текстурой, поэтому не удастся загрузить его в видеопамять.Я не могу использовать стандартное растровое изображение в куче, потому что мне нужны функциональные возможности рисования поверхности OpenGL.

Так что я подумал, что мне нужно будет перерисовать на FBO и каким-то образом взять на следующем FBO точно , где предыдущий остановился.Однако я не знаю, как это сделать.Я рисую шестнадцатеричную сетку с помощью ряда шестиугольных ячеек, к вашему сведению.

Конечно, есть, вероятно, какой-то другой, гораздо более простой и эффективный способ сделать это, о котором я даже не думаю, поэтомуЯ задаю этот вопрос вам, прекрасные люди!

1 Ответ

3 голосов
/ 02 февраля 2012

Вы должны нарисовать его по частям.Вы должны быть в состоянии нарисовать свою гекс-сетку из произвольной позиции.Это означает, что вы можете рассчитать, какие гексы нарисовать, основываясь на прямоугольнике, наложенном на карту.Это не сложная проблема, и я бы не стал слишком беспокоиться о том, чтобы рисовать лишние вещи за кадром.Вы должны овладеть этой способностью просматривать гексакарту из любой позиции, прежде чем двигаться дальше.

Как только вы освоите это, это действительно просто.

Нарисуйте верхний левый угол и сохраните данные пикселей,Затем переместите область рисования точно на одну ширину изображения.Нарисуй и сохрани это.Переместить область на ширину одного изображения.Нарисуй и сохрани его.Продолжайте делать это, пока вы не охватите всю ширину.

Переместитесь вниз на одну высоту изображения и повторите процесс.Как только вы исчерпали ширину и высоту, все готово.Сохраните свое мега-огромное изображение.

Вам не нужны FBO для этого.Вы можете нарисовать его на экране, если хотите.Хотя, если вам нужна максимальная производительность, я бы предложил использовать FBO, дважды буферизовать их и использовать glReadPixels через буферный объект .Это должно сильно сократить время ожидания.

...