comparison old/simple_pack/texture.cpp @ 507:735f76483bb2

Reorganization..
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 12 Oct 2009 09:39:35 +0900
parents TaskManager/Test/simple_pack/texture.cpp@0c8ae614d421
children
comparison
equal deleted inserted replaced
506:1d4a8a86f26b 507:735f76483bb2
1 #include <iostream>
2 #include <SDL.h>
3 #include <SDL_opengl.h>
4 #include <SDL_image.h>
5 #include <libxml/parser.h>
6 using namespace std;
7
8 int power_of_two(int input)
9 {
10 int value = 1;
11
12 while ( value < input )
13 {
14 value <<= 1;
15 }
16 return value;
17 }
18
19 GLuint SDL_GL_LoadTexture(SDL_Surface *surface, GLfloat *texcoord)
20 {
21 GLuint texture;
22 int w, h;
23 SDL_Surface *image;
24 SDL_Rect area;
25 Uint32 saved_flags;
26 Uint8 saved_alpha;
27
28 /* Use the surface width and height expanded to powers of 2 */
29 w = power_of_two(surface->w);
30 h = power_of_two(surface->h);
31 texcoord[0] = 0.0f; /* Min X */
32 texcoord[1] = 0.0f; /* Min Y */
33 texcoord[2] = (GLfloat)surface->w / w; /* Max X */
34 texcoord[3] = (GLfloat)surface->h / h; /* Max Y */
35
36 image = SDL_CreateRGBSurface(
37 SDL_SWSURFACE,
38 w, h,
39 32,
40 #if SDL_BYTEORDER == SDL_LIL_ENDIAN /* OpenGL RGBA masks */
41 0x000000FF,
42 0x0000FF00,
43 0x00FF0000,
44 0xFF000000
45 #else
46 0xFF000000,
47 0x00FF0000,
48 0x0000FF00,
49 0x000000FF
50 #endif
51 );
52 if ( image == NULL )
53 {
54 return 0;
55 }
56
57 /* Save the alpha blending attributes */
58 saved_flags = surface->flags&(SDL_SRCALPHA|SDL_RLEACCELOK);
59 saved_alpha = surface->format->alpha;
60 if ( (saved_flags & SDL_SRCALPHA) == SDL_SRCALPHA )
61 {
62 SDL_SetAlpha(surface, 0, 0);
63 }
64 /* Copy the surface into the GL texture image */
65 area.x = 0;
66 area.y = 0;
67 area.w = surface->w;
68 area.h = surface->h;
69 SDL_BlitSurface(surface, &area, image, &area);
70
71 /* Restore the alpha blending attributes */
72 if ( (saved_flags & SDL_SRCALPHA) == SDL_SRCALPHA )
73 {
74 SDL_SetAlpha(surface, saved_flags, saved_alpha);
75 }
76
77 /* Create an OpenGL texture for the image */
78 glGenTextures(1, &texture);
79 glBindTexture(GL_TEXTURE_2D, texture);
80 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
81 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
82 glTexImage2D(GL_TEXTURE_2D,
83 0,
84 GL_RGBA,
85 w, h,
86 0,
87 GL_RGBA,
88 GL_UNSIGNED_BYTE,
89 image->pixels);
90 SDL_FreeSurface(image); /* No longer needed */
91
92 return texture;
93 }