ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/material.C
Revision: 1.14
Committed: Sat Oct 23 21:43:27 2004 UTC (19 years, 7 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.13: +0 -296 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.8 #include <cstdlib>
2     #include <cstring>
3    
4 root 1.9 #include <algorithm>
5    
6 root 1.13 #include "opengl.h"
7     #include "material.h"
8     #include "util.h"
9    
10 root 1.1 material::~material ()
11     {
12     }
13    
14 root 1.6 void
15     simple_material::begin ()
16 root 1.1 {
17 root 1.6 glMaterialfv (GL_FRONT, GL_DIFFUSE, (GLfloat *) & diffuse);
18     glMaterialfv (GL_FRONT, GL_SPECULAR, (GLfloat *) & specular);
19     glMaterialfv (GL_FRONT, GL_EMISSION, (GLfloat *) & emission);
20     glMaterialf (GL_FRONT, GL_SHININESS, shininess);
21 root 1.1 }
22    
23 root 1.6 void
24     simple_material::end ()
25 root 1.1 {
26     }
27 root 1.6
28     void
29     osama_material::begin ()
30 root 1.3 {
31     cgGLEnableProfile (vsh_profile);
32     cgGLEnableProfile (fsh_profile);
33 root 1.6 cgGLEnableTextureParameter (g_Texture);
34 root 1.3 }
35 root 1.6
36     void
37     osama_material::end ()
38 root 1.3 {
39 root 1.6 cgGLDisableTextureParameter (g_Texture);
40     // cgGLUnbindProgram (vsh_profile);
41     // cgGLUnbindProgram (fsh_profile);
42 root 1.3 cgGLDisableProfile (vsh_profile);
43     cgGLDisableProfile (fsh_profile);
44     }
45 root 1.1
46 root 1.6 GLuint
47     texture::load_texture (SDL_Surface * surface, GLfloat * tex2oord)
48 root 1.3 {
49 root 1.4 GLuint textur;
50 root 1.3 int w, h;
51     SDL_Surface *image;
52     SDL_Rect area;
53     Uint32 saved_flags;
54     Uint8 saved_alpha;
55    
56     /* Use the surface width and height expanded to powers of 2 */
57     //w = power_of_two (surface->w);
58     //h = power_of_two (surface->h);
59     w = power_of_two (surface->w);
60     h = power_of_two (surface->h);
61 root 1.5 tex2oord[0] = 0.0f; /* Min X */
62     tex2oord[1] = 0.0f; /* Min Y */
63     tex2oord[2] = (GLfloat) surface->w / w; /* Max X */
64     tex2oord[3] = (GLfloat) surface->h / h; /* Max Y */
65 root 1.3
66     image = SDL_CreateRGBSurface (SDL_SWSURFACE, w, h, 32,
67     #if SDL_BYTEORDER == SDL_LIL_ENDIAN /* OpenGL RGBA masks */
68     0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000
69     #else
70     0xFF000000, 0x00FF0000, 0x0000FF00, 0x000000FF
71     #endif
72     );
73 root 1.6
74 root 1.3 if (image == NULL)
75 root 1.6 return 0;
76 root 1.3
77     /* Save the alpha blending attributes */
78     saved_flags = surface->flags & (SDL_SRCALPHA | SDL_RLEACCELOK);
79     saved_alpha = surface->format->alpha;
80     if ((saved_flags & SDL_SRCALPHA) == SDL_SRCALPHA)
81 root 1.6 SDL_SetAlpha (surface, 0, 0);
82 root 1.3
83     /* Copy the surface into the GL texture image */
84     area.x = 0;
85     area.y = 0;
86     area.w = surface->w;
87     area.h = surface->h;
88     SDL_BlitSurface (surface, &area, image, &area);
89    
90     /* Restore the alpha blending attributes */
91     if ((saved_flags & SDL_SRCALPHA) == SDL_SRCALPHA)
92 root 1.6 SDL_SetAlpha (surface, saved_flags, saved_alpha);
93 root 1.3
94     /* Create an OpenGL texture for the image */
95 root 1.4 glGenTextures (1, &textur);
96     glBindTexture (GL_TEXTURE_2D, textur);
97 root 1.6 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
98     glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
99 root 1.7 glTexParameteri (GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_TRUE); // GENERATE_MIPMAP_SGIS
100 root 1.3 glTexImage2D (GL_TEXTURE_2D,
101     0,
102     GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->pixels);
103     SDL_FreeSurface (image); /* No longer needed */
104    
105 root 1.4 return textur;
106 root 1.3 }
107    
108 root 1.6 CGcontext cgc;
109 root 1.3
110 root 1.6 void
111     init_shaders ()
112     {
113 root 1.3 cgc = cgCreateContext ();
114     }
115 root 1.8