Skocz do zawartości

[Delphi][SDL] Mały problem z SDL


Brainer

Polecane posty

Witam.

 

EDIT:

Poradziłem sobie z tym - po prostu brakowało DLLa w systemie. :) Ale problem mam inny - nie mogę skorzystać z OpenGL. Inicjalizuję ekran tym kodem:

 

constructor TBaseEngine.Create;
begin
 FLastTick := 0;
 FWidth := 800;
 FHeight := 600;
 FTitle := '';

 FScreen := nil;

 FFPSTickCounter := 0;
 FFPSCounter := 0;
 FCurrentFPS := 0;

 FMinimized := False;

 InitOpenGL();
 FVideoFlags := SDL_OPENGL;
 FVideoFlags := FVideoFlags or SDL_DOUBLEBUF;
 FVideoFlags := FVideoFlags or SDL_HWPALETTE;
 FVideoFlags := FVideoFlags or SDL_SWSURFACE;
 FVideoFlags := FVideoFlags or SDL_RESIZABLE;
end;

 

I po próbie stworzenia okna wywala mi AV... :| Co zrobić?

Link do komentarza
Udostępnij na innych stronach

Zapodaje konstruktor z jednej mojej klasy, którą zacząłem pisać. W taki sposób podręcznikowo uruchamia sie OpenGl pod kontrolą SDL. Dopiero po tym można wywołać InitGL (chyba nie InitOpenGL). Bardziej rozbudowane (chyba lepsze) przykłady są w demach od JEDI-SDL.

constructor TGraphMngr.Create(AWidth, AHeight: Cardinal);
begin
 fWidth := AWidth;
 fHeight := AHeight;
 fVideoInfo := nil;

 if ( SDL_Init( SDL_INIT_VIDEO ) < 0 ) then
 begin
   ShowMessage (Format('Video initialization failed : %s', [SDL_GetError]));
 end;

 fVideoInfo := SDL_GetVideoInfo;
 if ( fVideoInfo = nil ) then
 begin
   ShowMessage(Format('Video query failed : %s', [SDL_GetError]));
 end;

 fBPP := fVideoInfo^.vfmt^.BitsPerPixel;

 SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 5 );
 SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 5 );
 SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 5 );
 SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 );
 SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );

 fFlags := SDL_OPENGL {or SDL_FULLSCREEN};

 if ( SDL_SetVideoMode( fWidth, fHeight, fBPP, fFlags ) = nil ) then
 begin
   ShowMessage(Format('Video mode set failed : %s', [SDL_GetError]));
 end;
end;

Link do komentarza
Udostępnij na innych stronach

Okazało się, że problem leżał w inicjalizacji biblioteki dglOpenGL. Po prostu w klasie dziedziczącej z TBaseEngine brakowało mi dwóch ostatnich linijek kodu:

 
procedure TTestEngine.AdditionalInit;
begin
 InitOpenGL();
 ReadExtensions();
 ReadImplementationProperties();
end;

 

Tak czy siak, dzięki za pomoc TSr. :D

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...