Alors là, je comprend pas!
Voila un mon code (ultra simplifier) et il ne marche pas : Il plante sur le glend() !
Si c'est ,comme je le crois, une erreur bete et mechante; dite le moi svp.
Merci d'avance.
Mon code :
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include "SDL.h"
#include <GL/gl.h>
#include <GL/glu.h>
#pragma comment(lib,"Opengl32.lib")
#pragma comment(lib,"Glu32.lib")
void STD_ERROR(char * message)
{
fprintf(stderr, message);
fprintf(stderr, SDL_GetError());
fprintf(stderr, "\n");
exit(1);
}
void STD_OUT(char * message)
{
fprintf(stdout, message);
fprintf(stdout, "\n");
}
void process_events( void )
{
SDL_Event event;
while( SDL_PollEvent( &event ) ) {
switch( event.type ) {
case SDL_KEYDOWN:
exit(0);
break;
case SDL_QUIT:
exit(0);
break;
}
}
}
int main( int argc, char* argv[] )
{
int width=1024,height=728;
float ratio = (float) width / (float) height;
if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
STD_ERROR("Impossible d'initialiser SDL \n");
STD_OUT("Initialisation SDL reussit");
atexit(SDL_Quit );
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 );
if ( SDL_SetVideoMode(width , height ,24, SDL_OPENGL + SDL_FULLSCREEN + SDL_INIT_TIMER) == NULL )
STD_ERROR("impossible d'initialise le mode video");
STD_OUT("Initialisation mode video reussit");
glClearColor( 0, 0, 0, 0 );
glViewport( 0, 0, width, height );
glMatrixMode( GL_PROJECTION );
gluPerspective( 45.0f, ratio, 0.1f, 100.0f );
glMatrixMode(GL_MODELVIEW);
GLfloat lumiere_position[4];
GLfloat lumiere_diffusion[4];
GLfloat lumiere_ambient[4];
lumiere_ambient[0]=1.0f;
lumiere_ambient[1]=1.0f;
lumiere_ambient[2]=1.0f;
lumiere_ambient[3]=1.0f;
glLightfv(GL_LIGHT1, GL_AMBIENT,lumiere_ambient);
lumiere_diffusion[0]=1.0f;
lumiere_diffusion[1]=1.0f;
lumiere_diffusion[2]=1.0f;
lumiere_diffusion[3]=0.0f;
glLightfv(GL_LIGHT1, GL_DIFFUSE,lumiere_diffusion);
lumiere_position[0]=100.0f;
lumiere_position[1]=0.0f;
lumiere_position[2]=0.0f;
lumiere_position[3]=0.0f;
glLightfv(GL_LIGHT1, GL_POSITION,lumiere_position);
glEnable(GL_LIGHT1);
glEnable(GL_LIGHTING);
GLfloat angle;
angle=0.0f;
while(1)
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
glTranslatef(0.0f,0.0f,-5.0f);
glRotatef(angle,1.0f,0.0f,0.0f);
glRotatef(angle,0.0f,1.0f,0.0f);
glRotatef(angle,0.0f,0.0f,1.0f);
angle+=0.5f;
glBegin(GL_QUADS);
glNormal3f( 0.0f, 0.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f( 1.0f, -1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glNormal3f( 0.0f, 0.0f,-1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f( 1.0f, 1.0f, -1.0f);
glVertex3f( 1.0f, -1.0f, -1.0f);
glNormal3f( 0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, -1.0f);
glNormal3f( 0.0f,-1.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f( 1.0f, -1.0f, -1.0f);
glVertex3f( 1.0f, -1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glNormal3f( 1.0f, 0.0f, 0.0f);
glVertex3f( 1.0f, -1.0f, -1.0f);
glVertex3f( 1.0f, 1.0f, -1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, -1.0f, 1.0f);
glNormal3f(-1.0f, 0.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, -1.0f);
STD_OUT("avant glEnd()");
glEnd(); // il plante là
STD_OUT("apres glEnd()");
SDL_GL_SwapBuffers();
Sleep(50);
process_events();
}
return 0;
}