Maxizar писал(а):Задачка: Нужно обрабатывать данные (массив точек), в фоне и после чего сохронять картинку в файл, Но OpenGL, просто не рисует потому что окно скрыто, Как это победить. Окно показывать нельзя. Можно каким то макаром создать вертуальную Канву на ней рисовать OpenGL-ем и уже обрабатывать данную канву как мне нужно.
-Предлогать сторонние компаненты не надо.
1й способ) Под Windows так же поддерживается OpenGL отрисовка в Bitmap. (т.е. Хендл берётся от некого окна, а DC берётся от Bitmap), работает ли это на всех драйверах я не пробовал и ничего гарантировать не могу.
2й способ) Выполнять отрисовку OpenGL можно начать в любой момент, главное, чтобы существовал Handle окна и DC контекста.
Но факт в том, что DC можно получить и от невидимого окна и рисовать в невидимое окно можно.
Т.е. если нужно рисовать (не обязательно в Paint событии), выполняем
- Код: Выделить всё
GetDC..
SetCurrentContext..
рисуем
SetCurrentContext(nil,nil);
ReleaseDC;
после чего копируем с DC в Image.
3й способ) Вообще мутить с DC не обязательно, можно использовать glReadPixels которые читает пиксели из буфера отрисовки OpenGL. После чтения буфера отрисовки, пиксели можно положить в bmp картинку и сохранить в файл.
4й способ) ***СОВРЕМЕННЫЙ*** Используется расширение FBO. OpenGL рисует в некий кусок текстуры (читай буфер памяти), после чего из этого буфера пиксели записываются в bmp картинку и сохраняются в файл.
4ый способ работает быстрее, чем 3ий. Опят же для 3 и 4 способов, нужно окно (даже не видимое, и не обязательно Panel) - для создания контекста OpenGL.
ЗЫ: Не в обиду, но вы, ребят, тонкие извращенцы!!!!
ЗЗЫ: Мне тут подсказывают, что если ни один из выше перечисленных способов вам не подходит, вы можете использовать СВОЙ существующий код, но при этом окно, в которое рисуется OpenGL находится на вне экрана, например с координатами X: -MaxInt Y: -MaxInt.