OpenGL программа, проблема при закрытии
Значитцца, имеецца такой код
Код:
unit m_main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls, MPlayer, StdCtrls, jpeg, OpenGL;
type
Tw_main = class(TForm)
w_main_button_turn: TButton;
w_statistic: TGroupBox;
Panel1 : TPanel;
MainMenu1 : TMainMenu;
MediaPlayer1 : TMediaPlayer;
cube1 : TImage;
cube2 : TImage;
Label1: TLabel;
Panel2: TPanel;
Timer1: TTimer;
Label3: TLabel;
Label4: TLabel;
procedure menu_aboutClick(Sender: TObject);
procedure menu_exitClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure w_main_button_turnClick(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure menu_newClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Timer1Timer(Sender: TObject);
private { Private declarations }
hrc: HGLRC; // êîíòåêñò âîñïðîèçâåäåíèÿ OpenGL
dc : HDC;
tex_logo : array[1..512*512*3] of Byte;
public { Public declarations }
ntex_logo : GLuint;
end;
procedure glGenTextures(n: GLsizei; var textures: GLuint); stdcall; external opengl32;
procedure glBindTexture(Target: GLEnum; Texture: GLuInt); stdcall; external opengl32;
var w_main: Tw_main;
//---------------------------------------------------------------------------
implementation
{$R *.dfm}
...
//---------------------------------------------------------------------------
procedure Tw_main.menu_exitClick(Sender: TObject);
begin
Halt;
end;
//---------------------------------------------------------------------------
...
//---------------------------------------------------------------------------
procedure Tw_main.FormCreate(Sender: TObject);
begin
randomize;
dc:=GetDC(Panel2.Handle);
SetDCPixelFormat(dc);
hrc:=wglCreateContext(dc);
wglMakeCurrent(DC,hrc);
glClearColor(0,0,0,0);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glGenTextures(2,ntex_logo);
rgb_load('default\logo.res',512*512*3,tex_logo); glBindTexture(GL_TEXTURE_2D,ntex_logo);
glTexImage2D(GL_TEXTURE_2D,0,3,512,512,0,GL_RGB,GL_UNSIGNED_BYTE,@tex_logo);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);
end;
//---------------------------------------------------------------------------
procedure Tw_main.FormPaint(Sender: TObject);
var
ps : TPaintStruct;
begin
BeginPaint(Panel2.Handle,ps);
wglMakeCurrent(dc,hrc);
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glRotate(5,1,0,1);
glBindTexture(GL_TEXTURE_2D,ntex_logo);
glBegin(GL_QUADS);
glVertex2d(-1,-1); glTexCoord2d(0,0);
glVertex2d(-1,1); glTexCoord2d(1,0);
glVertex2d(1,1); glTexCoord2d(1,1);
glVertex2d(1,-1); glTexCoord2d(0,1);
glEnd;
wglMakeCurrent(dc,0);
EndPaint(Panel2.Handle,ps);
end;
//---------------------------------------------------------------------------
...
//---------------------------------------------------------------------------
procedure Tw_main.FormClose(Sender: TObject; var Action: TCloseAction);
begin
wglMakeCurrent(0,0);
wglDeleteContext(hrc);
ReleaseDC(Handle,DC);
end;
//---------------------------------------------------------------------------
procedure Tw_main.Timer1Timer(Sender: TObject);
begin
w_main.Repaint;
end;
//---------------------------------------------------------------------------
end.
всё нормально работает, а когда я давлю закрыть или через менюшку - выйти, появляется ошибка
Код:
Project 111 raised exception class EInvalidPointer with message 'Invalid pointer operation'. Process stopped. Use Step or Run to continue.
Выяснил, что ошибка появляется из-за объявления функций
Код:
procedure glGenTextures(n: GLsizei; var textures: GLuint); stdcall; external opengl32;
procedure glBindTexture(Target: GLEnum; Texture: GLuInt); stdcall; external opengl32;
Но без них никак...
Исправьте моё ДНК, плз 
|