Давно и довольно успешно (начиная с Delphi7) работал фрагмент кода для вывода OpenGL графики на BitMap (этот фрагмент вызывается в ходе выполнения программы
многократно, в цикле: из Bitmap-ов строится AVI-файл-мультик):
Код:
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?