Давно и довольно успешно (начиная с Delphi7) работал фрагмент кода для вывода OpenGL графики на BitMap (этот фрагмент вызывается в ходе выполнения программы
многократно, в цикле: из Bitmap-ов строится AVI-файл-мультик):
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | procedure TFormOpenGL . RenderToBitmap( const ABitmap: TBitmap);
var FormatIndex: Integer ; PFD: TPixelFormatDescriptor; lFDC: HDC;
begin
lFDC := ABitmap . Canvas . Handle;
FillChar(PFD, SizeOf(PFD), 0 );
With PFD do begin
nSize := SizeOf(PFD); nVersion := 1 ;
dwFlags := pfd_Draw_to_Bitmap or pfd_Support_OpenGL;
iPixelType := pfd_Type_RGBA;
cColorBits := 24 ; cDepthBits := 32 ;
iLayerType := pfd_Main_Plane;
end ;
FormatIndex := ChoosePixelFormat(lFDC, @PFD);
SetPixelFormat(lFDC, FormatIndex, @PFD);
FGLContext := wglCreateContext(lFDC);
wglMakeCurrent(lFDC, FGLContext);
MyPaint( True );
.............
end ;
|
Недавно перешёл на Delphi XE2. При компиляции 32bit - по-прежнему всё ОК. А вот при создании приложения 64bit -при выводе на Bitmap иногда (!!), причём
ни сразу вылезают ошибки с сообщением "External exception 80000003"

. После такой ошибки при закрытии приложения [x] часть его остаётся где-то в памяти и продолжает жрать ресурсы: добивается только через TaskMngr.

Вопросы:
1) Это моя ошибка, или ошибка нового компилятора? Повторюсь. Крах программы происходит случайным образом, на разных компах по-разному.
Сразу скажу: никаких присвоений целым переменным значений указателей я не использую никогда (это могло давать ошибки на 64битном компиляторе).
2) Нет ли примера вывода на Bitmap другими функциями OpenGL, скажем - рисования не текстуре и далее- сохранения текстуры как Bitmap, или чем то ещё более правильным и не таким глючным, как прямой вывод на невидимый Bitmap?