Что является предпочтительным способом показать большие изображения в OpenGL

Uint8List реализует List<int>. Вы можете объединить их с новым List<int>, а затем создать новый Uint8List с

List<List<int>> myByteLists = ...;
var bytes = Uint8List.fromList(myByteList.expand((x) => x).toList());
6
задан falstro 8 January 2009 в 18:54
поделиться

2 ответа

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

GLint width = 0;
while ( 0 == width ) {  /* use a better condition to prevent possible endless loop */
    glTexImage2D(GL_PROXY_TEXTURE_2D, 
                      0,                /* mip map level */
                      GL_RGBA,          /* internal format */
                      desiredWidth,     /* width of image */
                      desiredHeight,    /* height of image */
                      0,                /* texture border */
                      GL_RGBA           /* pixel data format, */ 
                      GL_UNSIGNED_BYTE, /* pixel data type */
                      NULL              /* null pointer because this a proxy texture */
    );

    /* the queried width will NOT be 0, if the texture format is supported */
    glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);

    desiredWidth /= 2; desiredHeight /= 2;
}

После того как Вы знаете максимальный размер структуры, поддерживаемый драйвером OpenGL системы, у Вас есть по крайней мере две опции, если Ваше изображение не соответствует:

  • Мозаичное размещение изображения: используйте несколько четверок после разделения Вашего изображения в меньшие поддерживаемые блоки. Мозаичное размещение изображения для чего-то как экран-заставка не должно быть слишком хитрым. Можно использовать glPixelStorei's GL_PACK_ROW_LENGTH параметр для загрузки разделов увеличенного изображения в структуру.
  • Изменение размеров изображения: измените размер своего изображения для установки максимальному поддерживаемому размеру структуры. Существует даже функция помощника GLU, чтобы сделать это для Вас, gluScaleImage.
10
ответ дан 10 December 2019 в 00:45
поделиться

Я не думаю, что существует встроенная функция opengl, но Вы могли бы найти библиотеку (или записать функцию сами) разломать изображение на меньшие блоки и затем распечатать для экранирования меньших блоков (128x128 мозаики или подобный).

У меня была проблема с этим использованием Slick2D для Java игры. Можно проверить их класс "BigImage" для идей здесь.

0
ответ дан 10 December 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: