- {$APPTYPE GUI}
- Program Test1;
- Uses SDL,SDL_Video,SDL_Events,GL,GLU,GLUT;
- Var Screen:PSDL_Surface;
- Events:SDL_Event;
- Running:Boolean;
- Rotate:GLFloat;
- Data:PSDL_Surface;
- Texture:GLuint;
- Const LightAmbiente:Array[0..3] of GLFloat=(1.0,1.0,1.0,1.0);
- LightDiffuse:Array[0..3] of GLFloat=(1.0,1.0,1.0,1.0);
- LightPosition:Array[0..3] of GLFloat=(0.0,0.0,2.0,1.0);
- Procedure DrawGLScene;
- Begin
- glClear(GL_COLOR_BUFFER_BIT OR GL_DEPTH_BUFFER_BIT);
- glLoadIdentity;
- glTranslatef(0.0,0.0,-5.0);
- glRotatef(Rotate,1.0,0.75,0.5);
- glBindTexture(GL_TEXTURE_2D,Texture);
- glBegin(GL_QUADS);
- glNormal3f(0.0,0.0,1.0);
- glTexCoord2f(0.0,0.0); glVertex3f(-1.0,-1.0, 1.0);
- glTexCoord2f(1.0,0.0); glVertex3f( 1.0,-1.0, 1.0);
- glTexCoord2f(1.0,1.0); glVertex3f( 1.0, 1.0, 1.0);
- glTexCoord2f(0.0,1.0); glVertex3f(-1.0, 1.0, 1.0);
- glNormal3f(0.0,0.0,-1.0);
- glTexCoord2f(1.0,0.0); glVertex3f(-1.0,-1.0,-1.0);
- glTexCoord2f(1.0,1.0); glVertex3f(-1.0, 1.0,-1.0);
- glTexCoord2f(0.0,1.0); glVertex3f( 1.0, 1.0,-1.0);
- glTexCoord2f(0.0,0.0); glVertex3f( 1.0,-1.0,-1.0);
- glNormal3f(0.0,1.0,0.0);
- glTexCoord2f(0.0,1.0); glVertex3f(-1.0, 1.0,-1.0);
- glTexCoord2f(0.0,0.0); glVertex3f(-1.0, 1.0, 1.0);
- glTexCoord2f(1.0,0.0); glVertex3f( 1.0, 1.0, 1.0);
- glTexCoord2f(1.0,1.0); glVertex3f( 1.0, 1.0,-1.0);
- glNormal3f(0.0,-1.0,0.0);
- glTexCoord2f(1.0,1.0); glVertex3f(-1.0,-1.0,-1.0);
- glTexCoord2f(0.0,1.0); glVertex3f( 1.0,-1.0,-1.0);
- glTexCoord2f(0.0,0.0); glVertex3f( 1.0,-1.0, 1.0);
- glTexCoord2f(1.0,0.0); glVertex3f(-1.0,-1.0, 1.0);
- glNormal3f(1.0,0.0,0.0);
- glTexCoord2f(1.0,0.0); glVertex3f( 1.0,-1.0,-1.0);
- glTexCoord2f(1.0,1.0); glVertex3f( 1.0, 1.0,-1.0);
- glTexCoord2f(0.0,1.0); glVertex3f( 1.0, 1.0, 1.0);
- glTexCoord2f(0.0,0.0); glVertex3f( 1.0,-1.0, 1.0);
- glNormal3f(-1.0,0.0,0.0);
- glTexCoord2f(0.0,0.0); glVertex3f(-1.0,-1.0,-1.0);
- glTexCoord2f(1.0,0.0); glVertex3f(-1.0,-1.0, 1.0);
- glTexCoord2f(1.0,1.0); glVertex3f(-1.0, 1.0, 1.0);
- glTexCoord2f(0.0,1.0); glVertex3f(-1.0, 1.0,-1.0);
- glEnd;
- Rotate:=Rotate+1.5;
- End;
- Procedure InitGL;
- Begin
- glViewport(0,0,639,479);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity;
- gluPerspective(45.0,640/480,0.1,100.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity;
- glEnable(GL_TEXTURE_2D);
- 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);
- glLightfv(GL_LIGHT1,GL_AMBIENT,LightAmbiente);
- glLightfv(GL_LIGHT1,GL_DIFFUSE,LightDiffuse);
- glLightfv(GL_LIGHT1,GL_POSITION,LightPosition);
- glEnable(GL_LIGHT1);
- glEnable(GL_LIGHTING);
- End;
- Begin
- If Boolean(SDL_Init(SDL_INIT_VIDEO)) Then
- Begin
- 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);
- End;
- Screen:=SDL_SetVideoMode(640,480,0,SDL_OPENGL OR SDL_FULLSCREEN);
- InitGL;
- Data:=SDL_LoadBMP('texture.bmp');
- glGenTextures(1,@Texture);
- glBindTexture(GL_TEXTURE_2D,Texture);
- glTexImage2D(GL_TEXTURE_2D,0,3,Data^.W,Data^.H,0,GL_RGB,GL_UNSIGNED_BYTE,Data^.Pixels);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
- Running:=True;
- While (Running) Do
- Begin
- While Boolean(SDL_PollEvent(@Events)) Do
- Begin
- Case (Events.Eventtype) Of
- SDL_KEYDOWN: Begin Running:=False; Break; End;
- SDL_EVENTQUIT: Begin Running:=False; Break; End;
- End;
- End;
- DrawGLScene;
- SDL_GL_SwapBuffers;
- End;
- SDL_Freesurface(Data);
- SDL_Freesurface(Screen);
- SDL_Quit;
- End.