Ho scaricato il file OpenGL.pas per usare OPENGL con Delphi. Seguendo una guida, ho scritto questo codice:
Purtroppo non so come mai ma la riga indicata genera un errore mooolto generico:codice:procedure TForm12.FormCreate(Sender: TObject); var PFD: TPixelFormatDescriptor; FormatIndex: Integer; begin FillChar(PFD,sizeof(PFD),0); with PFD do begin nSize := sizeof(PFD); nVersion := 1; dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL; iPixelType := PFD_TYPE_RGBA; cColorBits := 24; cDepthBits := 32; iLayerType := PFD_MAIN_PLANE; end; FormatIndex := ChoosePixelFormat(Canvas.Handle,@PFD); // <------- (*showmessage(inttostr(formatindex)); SetPixelFormat(Canvas.Handle,FormatIndex,@PFD); *) end;
Access violation at address 00000000. Read of address 00000000.
Come mai? Non mi pare di aver sbagliato qualcosa anche perchè sto copiando...![]()
A meno che la versione di OpenGL che ho scaricato è sbagliata... Per altro ho pure dovuto manomettere il codice della Unit, perchè in alcuni punti assegnava valori a variabili dichiarate come costantiVVoVe: ....
EDIT: ho scaricato un'altra versione dell'OPENGL.PAS e almeno quel punto sembra funzionare... Ecco il codice completo:
Tuttavia nel punto segnalato viene generata nuovamente l'eccezione sopracitata. Non so che dire... Chi mi sa dire qualcosa di + ??codice:var Form12: TForm12; GlContext: HGLRC; ErrorCode: cardinal;//GLenum; Init: Boolean = false; GlDC: HDC; implementation {$R *.dfm} procedure TForm12.FormCreate(Sender: TObject); var PFD: TPixelFormatDescriptor; FormatIndex: Integer; begin FillChar(PFD,sizeof(PFD),0); with PFD do begin nSize := sizeof(PFD); nVersion := 1; dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL; iPixelType := PFD_TYPE_RGBA; cColorBits := 24; cDepthBits := 32; iLayerType := PFD_MAIN_PLANE; end; glDC := getDC(handle); FormatIndex := ChoosePixelFormat(glDC,@pfd); if FormatIndex=0 then raise Exception.Create('ChoosePixelFormat failed '+IntToStr(GetLastError)); if not SetPixelFormat(glDC,FormatIndex,@pfd) then raise Exception.Create('SetPixelFormat failed '+IntToStr(GetLastError)); GLContext := wglCreateContext(glDC); if GLContext=0 then raise Exception.Create('wglCreateContext failed '+IntToStr(GetLastError)); if not wglMakeCurrent(glDC,GLContext) then raise Exception.Create('wglMakeCurrent failed '+IntToStr(GetLastError)); Init:=true; end; procedure TForm12.FormDestroy(Sender: TObject); begin wglMakeCurrent(Canvas.Handle,0); wglDeleteContext(GlContext); end; procedure TForm12.FormPaint(Sender: TObject); var errorCode: Cardinal; begin if not Init then exit; try glClearColor(0.0,0.4,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT); errorCode := glGetError; if errorCode <> GL_NO_ERROR then raise Exception.Create('Paint Error'+#13#10+gluErrorString(ErrorCode)); except on Ex:exception do showmessage(ex.Message); Eccezione!!!! end; end;![]()
![]()

VVoVe: ....
Rispondi quotando