Uint8List
реализует List<int>
. Вы можете объединить их с новым List<int>
, а затем создать новый Uint8List
с
List<List<int>> myByteLists = ...;
var bytes = Uint8List.fromList(myByteList.expand((x) => x).toList());
Если это - единственное изображение всплеска кадра без анимаций, то нет никакого использования вреда 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 системы, у Вас есть по крайней мере две опции, если Ваше изображение не соответствует:
GL_PACK_ROW_LENGTH
параметр для загрузки разделов увеличенного изображения в структуру.Я не думаю, что существует встроенная функция opengl, но Вы могли бы найти библиотеку (или записать функцию сами) разломать изображение на меньшие блоки и затем распечатать для экранирования меньших блоков (128x128 мозаики или подобный).
У меня была проблема с этим использованием Slick2D для Java игры. Можно проверить их класс "BigImage" для идей здесь.