|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
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; Исправьте моё ДНК, плз Последний раз редактировалось stalker_2000, 09.07.2007 в 19:05. |
#2
|
|||
|
|||
Можно попробовать в FormClose остановить таймер (Timer1.Enabled:= false;)
|
#3
|
|||
|
|||
Ставил, не то это всё.
Нашел ошибку, как обычно глупая и досадная )) Код:
glGenTextures(2,@ntex_logo); Всем спасибо за внимание |