![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
OpenGL не хочет рисовать на битмапе [D7, XP]
Evgnevius © (2009-11-16 18:55:00)Подскажите, почему OpenGL на холсте формы рисует, а когда передаю в качестве контекста холст битмапа - ничего не происходит. Почему? Как решить эту проблему? Вроде и
PFD.dwFlags в PFD_DRAW_TO_BITMAP устанавливаю и
Bmp.PixelFormat ставлю в pf24bit...
а всё равно сплошным белым цветом...
Помогите.
Григорьев Антон (2009-11-17 07:00:00) [21]Странно читать всю эту ветку. Много раз рисовал с помощью OpenGL на bitmap'е и не испытывал никаких проблем. Навскидку не помню, как это делал, до своего кода доберусь только вечером. Но, кажется, там вся хитрость в том, что по умолчанию создаётся DDB-растр, а OpenGL рисует только на DIB. Попробуйте сразу после создания растра, ещё до установки Width и Height, сделать Bitmap.PixelFormat:=pf24bit. Если не поможет, вечером кину сюда свой код.
> В библиотеку приходит указатель на TBitmap
А вот это уже серьёзная ошибка проектирования. Между приложением и DLL нельзя передавать классы, так как у них разные RTTI, и поэтому TBitmap приложения - это совсем другой класс, нежели TBitmap DLL, и совместимы они лишь частично. Отсюда возможны самые разные неприятные эффекты.
Sapersky (2009-11-17 00:29:00) [22]Не нужно мешать битмапы (софтверный рендер) и OpenGL (главным образом интерфейс к аппаратным функциям видеокарты). Либо передаём битмап и рисуем вручную, либо заранее решаем, что всё будет рисоваться через OGL и передаём его контекст или как он правильно называется.
Даже есть получится заставить OGL рисовать в битмап - он будет делать это через софтверную эмуляцию, медленно и с ограниченной функциональностью.
sniknik (2009-11-17 00:13:00) [23]> Спасибо, это не ответ.
это ответ, то что он тебе не нравится, реальности не изменит... если для OpenGL нужна "оконная подложка" то хоть на миллионы строк кода ссылайся это ничего не изменит.
p.s. если нету, и неоткуда взять, то нужно создать.
Evgnevius (2009-11-16 23:48:00) [24]Спасибо, это не ответ. Мне нужно на битмапе, потому что переписывать приложение из 20 тыс. строк никто не собирается. Пожалуйста, если не знаете, лучше не пишите, а то только время тратиться - и моё и ваше. Ещё раз спасибо за предложенную помощь
sniknik (2009-11-16 23:41:00) [25]> то ответьте, пожалуйста
а я разве не ответил?
> пусть приходит ссылка на форму...
Evgnevius (2009-11-16 23:36:00) [26]Весёлая картинка :) на самом деле, ночью я сплю.
Однако, если можете сказать, как это сделать, то ответьте, пожалуйста, а нет - спасибо за общение...
sniknik (2009-11-16 23:10:00) [27]> А технология такова, что в плагин из приложения приходит ссылка на битмап
пусть приходит ссылка на форму... трах тибедох © Хоттабыч.
так, сейчас работает?
> Как же такое можно провернуть? Люди ведь делают...
так и представляю нервного программиста с воспаленными после бессонных ночей глазами, мечущегося из угла в угол по комнате, и бормочащего себе под нос. "... люди ведь делают. как же это провернуть. так, успокоимся, тише тише вот хорошо, условия еще раз - на холсте формы рисует, на битмапе нет, форма да, битмап нет, форма рисует... вот, вот, мысль, почти уловил... черт сорвалось! на битмапе нет!!! (бьется в истерике)... ну как же это провернуть? люди ведь делают..."
Evgnevius (2009-11-16 22:44:00) [28]>Что за библиотека? Распиши в общем плане
Да не важно в принципе. Я создал тестовое приложение в котором создаётся битмап, далее я пытаюсь его просто залить синим цветом и вывести на форме (для просмотра). А вообще, конечно, чисто ради удовлетворения вашего любопытства могу сказать, что пишу графический редактор построенный по принципу библиотечных модулей (плагинов). А технология такова, что в плагин из приложения приходит ссылка на битмап, на котором эта библиотека должна что-нибудь нарисовать. Да хоть, просто залить его одним цветом. Как же такое можно провернуть? Люди ведь делают...
_ (2009-11-16 22:34:00) [29]На DC Bitmap'а рисовать нельзя.
Т.к. контекст постоянно теряется. Об этом, кстати, в книге Краснова в 1-й главе написано и пример есть.
Что за библиотека? Распиши в общем плане. А то как то всё не правильно...
Evgnevius (2009-11-16 22:24:00) [30]> Выводи на форму, копируй с неё на DC Bitmap'а через BitBlt.
Это исключено. Никакой формы у меня нет. В библиотеку приходит указатель на TBitmap, на котором нужно рисовать. Что делать с изменённым битмапом, это уже дело приложения, которое отдало его на обработку в библиотеку.
_ (2009-11-16 22:10:00) [31]
> А как тогда можно это осуществить? Можно ведь как-то где-
> то нарисовать, а потом в битмап сохранить?
Проще простого.
Выводи на форму, копируй с неё на DC Bitmap'а через BitBlt.
Evgnevius (2009-11-16 20:56:00) [32]А как тогда можно это осуществить? Можно ведь как-то где-то нарисовать, а потом в битмап сохранить?
Amoeba (2009-11-16 20:46:00) [33]
> почему OpenGL на холсте формы рисует, а когда передаю в
> качестве контекста холст битмапа - ничего не происходит
Так и должно быть. Не может OpenGL это делать, у него свой контекст для рисования.