Skocz do zawartości

Sdl+opengl


Lukasz69

Rekomendowane odpowiedzi

Zaczalem sie bawic w SDL + OpenGL we Free Pascalu. Mam problem - siedze nad tym juz 2 godziny i krew mnie zalewa - nic chyba sam nie wymysle wiec prosze o pomoc. Okno sie pojawia - SDL czyta klawisze i na esc wychodzi ale nie widze bryl ktore powinny zostac narysowane. Zapewne gdzies tam jest blad albo ja cos poknocilem - gdy daje gotowy ten tutorial dostarczony z headerami to program smiga - jednak moja wersja samodzielna troche okrojona juz nie dziala tak ladnie. Czemu?

 

program test_sdl;
uses
sdl,
gl,
crt;

procedure InitGL;
begin
glShadeModel(GL_SMOOTH);
glClearColor(0.0,0.0,0.0,0.0);
glClearDepth(1.0);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
end;

procedure DrawGLScene;
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(-1.5,0.0,-6.0);
glBegin(GL_TRIANGLES);
	glVertex3f(0.0,1.0,0.0);
	glVertex3f(-1.0,-1.0,0.0);
	glVertex3f(1.0,-1.0,0.0);
glEnd();
glTranslatef(3.0,0.0,0.0);
glBegin(GL_QUADS);
	glVertex3f(-1.0,1.0,0.0);
	glVertex3f(1.0,1.0,0.0);
	glVertex3f(1.0,-1.0,0.0);
	glVertex3f(-1.0,-1.0,0.0);
glEnd();
SDL_GL_SwapBuffers();
end;


var
screen: PSDL_Surface;
flags: Uint32;
event:TSDL_Event;
done: boolean;
kl:Pchar;

begin
if SDL_Init(SDL_INIT_VIDEO)<0 then
	begin
	writeln('Wystapil blad inicjacji', SDL_GetError());
	halt(1);
	end;
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);

flags:= SDL_OPENGL;
screen:= SDL_SetVideoMode(1024, 756, 16, flags);
if screen=nil then
	begin
	writeln('Wystapil blad inicjacji VIDEO', SDL_GetError());
	halt(1);
	end;
InitGL;
done:=true;
while done do
	begin
		SDL_WaitEvent(@event);
	case event.type_ of
	SDL_KEYDOWN :
		begin
		kl:=SDL_GetKeyName(event.key.keysym.sym);
		writeln('Nacisniet przycisk ',kl);
		if kl='escape' then done:=false;
		SDL_WM_SetCaption(kl,nil);
		end
	end;
DrawGLScene;
end;
SDL_Quit();
end.

Odnośnik do komentarza
Udostępnij na innych stronach

hehe, byłem tego pewien ;)

 

ogólnie jeśli nie potrzebujesz zmieniać rozmiaru okna to możesz spoko wrzucić te kilka linii do InitGL(),

 

dodatkowo możesz w głównej pętli na końcu wstawić SDL_Delay(), żeby applikacja nie kosiła proca na 100% - to nieeleganckie, ale spadnie trochę wydajność ;)

 

 

pozdro

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...