1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
#include <SDL/SDL.h>
#include <SDL/SDL_Image.h>
#include <SDL/SDL_getenv.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include "sdlglutils.h"
#define LARGEUR_ECRAN 1024
#define HAUTEUR_ECRAN 768
int main(int argc, char *argv[])
{
// Variables
SDL_Event event;
bool continuer = true;
// *** Initialisation de la fenêtre *** //
SDL_Init(SDL_INIT_VIDEO);
SDL_WM_SetCaption("Entrainement", NULL);
SDL_SetVideoMode(LARGEUR_ECRAN, HAUTEUR_ECRAN, 32, SDL_OPENGL);
putenv("SDL_VIDEO_WINDOW_POS=center");
glMatrixMode( GL_PROJECTION );
glLoadIdentity( );
gluOrtho2D(0,LARGEUR_ECRAN,0,HAUTEUR_ECRAN);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
// création de la texture et chargement
GLuint Fond = loadTexture("fond.jpg");
while(continuer)
{
// *** BOUCLE DES EVENEMENTS *** //
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
continuer = false;
break;
}
}
// *** AFFICHAGE *** //
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glMatrixMode(GL_MODELVIEW);
// j'appliquerais la texture Fond au prochain GL_QUADS
glBindTexture(GL_TEXTURE_2D, Fond);
// Je crée un GL Quads
glBegin(GL_QUADS);
glTexCoord2d( 0, 0); glVertex2d( 0, 0);
glTexCoord2d( 0, 1); glVertex2d( 0, 100);
glTexCoord2d( 1, 1); glVertex2d( 100, 100);
glTexCoord2d( 1, 0); glVertex2d( 100, 0);
glEnd();
// Mise à jour de l'écran
glFlush();
SDL_GL_SwapBuffers();
}
return 0;
SDL_Quit();
}
// Et la fonction loadtexture() :
SDL_Surface * flipSurface(SDL_Surface * surface);
GLuint loadTexture(const char * filename,bool useMipMap)
{
GLuint glID;
SDL_Surface * picture_surface = NULL;
SDL_Surface *gl_surface = NULL;
SDL_Surface * gl_fliped_surface = NULL;
Uint32 rmask, gmask, bmask, amask;
picture_surface = IMG_Load(filename);
if (picture_surface == NULL)
return 0;
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
rmask = 0xff000000;
gmask = 0x00ff0000;
bmask = 0x0000ff00;
amask = 0x000000ff;
#else
rmask = 0x000000ff;
gmask = 0x0000ff00;
bmask = 0x00ff0000;
amask = 0xff000000;
#endif
SDL_PixelFormat format = *(picture_surface->format);
format.BitsPerPixel = 32;
format.BytesPerPixel = 4;
format.Rmask = rmask;
format.Gmask = gmask;
format.Bmask = bmask;
format.Amask = amask;
gl_surface = SDL_ConvertSurface(picture_surface,&format,SDL_SWSURFACE);
gl_fliped_surface = flipSurface(gl_surface);
glGenTextures(1, &glID);
glBindTexture(GL_TEXTURE_2D, glID);
if (useMipMap)
{
gluBuild2DMipmaps(GL_TEXTURE_2D, 4, gl_fliped_surface->w,
gl_fliped_surface->h, GL_RGBA,GL_UNSIGNED_BYTE,
gl_fliped_surface->pixels);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,
GL_LINEAR_MIPMAP_LINEAR);
}
else
{
glTexImage2D(GL_TEXTURE_2D, 0, 4, gl_fliped_surface->w,
gl_fliped_surface->h, 0, GL_RGBA,GL_UNSIGNED_BYTE,
gl_fliped_surface->pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
}
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
SDL_FreeSurface(gl_fliped_surface);
SDL_FreeSurface(gl_surface);
SDL_FreeSurface(picture_surface);
return glID;
} |
Partager