![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||||
|
||||||
![]() Доброго времени суток.
Нашёл библиотеку (UrickGL, U3Dpolys, GL, GLU, Glut ) в которой просто можно работать OpenGL и решил поизучать её и вставить в проект. Столкнулся с "неудобностью" библиотеки - текстуры надо грузить из файла во время работы программы. Можно ли их хранить в ресурсах или допустим загрузить в TImage и оттуда уже грузить картинку в текстуру?При этом я могу в неё сразу рисовать и печатать текст модифицируя её!! Я же могу и имею доступ к битовому пространству картинки в Image.. Но вот не соображу как это совместить передачей в текстуру. Привожу оригинальный код создания текстуры с загрузкой по имени файла xxxx.bmp. Код:
имеем вызов: Код:
Код:
Понятно что уже нет необходимости проверять битность, есть файл или нет, проверять заголовок, надо просто как-то сразу обратиться в область данных и передать этот массив.. туплю - не соображу. ![]() |
#2
|
|||
|
|||
![]() Ну, если по простому, я бы модернизировал бы этот код под чтение из потока (TStream). А там дальше что ты подсунешь (TFileStream, TMemoryStream или какой другой поток, TResourceStream например) уже не важно.
Собственно, для модификации нужно поменять стрки: 1 - вместо имени файла передавать ссылку на TStream 49-53 - убрать вообще или хотя бы проверять данные в потоке (что они есть - size > 0) 54-55 - Stream.seek(0,0) - на всякий случай ставим указатель в начало потока 56-57б68 - меняем на чтение из потока 76 - убрать. тот, кто создал поток, пусть его и закрывает Как-то так. |
#3
|
|||
|
|||
![]() Если честно не работал с потоками.. Ну мы тем самым имитируем работу с диском только в памяти..
Я думал выкинуть "псевдо" работу с диском а как-то влезть в blockread - в буфер перебросить данные с памяти image1.Picture.Bitmap сразу в buffer3b |
#4
|
|||
|
|||
![]() Ну, наверное, можно.
Просто выкидывается вся работа с файлом, а строки 69-75 поменять на использование ScanLine. Через ScanLine получается доступ к триплетам (RGB) битмапа. |