[Add] Moving stars.
[Change] optimized opengl.c a little.
This commit is contained in:
		
							parent
							
								
									b5a7ba8919
								
							
						
					
					
						commit
						c84a11e4a7
					
				| @ -18,6 +18,7 @@ | ||||
| #include "ai.h" | ||||
| #include "pilot.h" | ||||
| 
 | ||||
| #define WINDOW_CAPTION "Lephisto" | ||||
| #define CONF_FILE "conf" | ||||
| 
 | ||||
| static gl_font fdefault; | ||||
| @ -112,6 +113,9 @@ int main(int argc, char** argv) { | ||||
|     exit(EXIT_FAILURE); | ||||
|   } | ||||
| 
 | ||||
|   // Window.
 | ||||
|   SDL_WM_SetCaption(WINDOW_CAPTION, NULL); | ||||
| 
 | ||||
|   // Input.
 | ||||
|   if(indjoystick >= 0 || namjoystick != NULL) { | ||||
|     if(joystick_init()) | ||||
| @ -191,7 +195,7 @@ static void display_fps(const double dt) { | ||||
|   fps_dt += dt; | ||||
|   fps_cur += 1.; | ||||
|   if(fps_dt > 1.) { | ||||
|     fps = fps_cur; | ||||
|     fps = fps_cur / fps_dt; | ||||
|     fps_dt = fps_cur = 0.; | ||||
|   } | ||||
|   Vec2 pos = { .x = 10., .y = (double)(gl_screen.h-20) }; | ||||
|  | ||||
							
								
								
									
										71
									
								
								src/opengl.c
									
									
									
									
									
								
							
							
						
						
									
										71
									
								
								src/opengl.c
									
									
									
									
									
								
							| @ -77,12 +77,15 @@ static GLuint gl_loadSurface(SDL_Surface* surface, int* rw, int* rh) { | ||||
|   SDL_Surface* tmp; | ||||
|   Uint32 saved_flags; | ||||
|   Uint8  saved_alpha; | ||||
|   int potw, poth; | ||||
|    | ||||
|   // Make size power of two.
 | ||||
|   if(rw)*rw = pot(surface->w); | ||||
|   if(rh)*rh = pot(surface->h); | ||||
|   potw = pot(surface->w); | ||||
|   poth = pot(surface->h); | ||||
|   if(rw)*rw = potw; | ||||
|   if(rh)*rh = poth; | ||||
| 
 | ||||
|   if(surface->w != *rw || surface->h != *rh) { | ||||
|   if(surface->w != potw || surface->h != poth) { | ||||
|     // Size isn't original.
 | ||||
|     SDL_Rect rtemp; | ||||
|     rtemp.x = rtemp.y = 0; | ||||
| @ -97,7 +100,7 @@ static GLuint gl_loadSurface(SDL_Surface* surface, int* rw, int* rh) { | ||||
| 
 | ||||
|     // Create the temp POT surface.
 | ||||
|     tmp = SDL_CreateRGBSurface(SDL_SRCCOLORKEY, | ||||
|           *rw, *rh, surface->format->BytesPerPixel*8, RGBMASK); | ||||
|           potw, poth, surface->format->BytesPerPixel*8, RGBMASK); | ||||
|     if(tmp == NULL) { | ||||
|       WARN("Unable to create POT surface %s", SDL_GetError()); | ||||
|       return 0; | ||||
| @ -118,7 +121,7 @@ static GLuint gl_loadSurface(SDL_Surface* surface, int* rw, int* rh) { | ||||
| 
 | ||||
|     // Create the temp POT surface.
 | ||||
|     tmp = SDL_CreateRGBSurface(SDL_SRCCOLORKEY, | ||||
|           *rw, *rh, surface->format->BytesPerPixel*8, RGBMASK); | ||||
|           potw, poth, surface->format->BytesPerPixel*8, RGBMASK); | ||||
|     if(tmp == NULL) { | ||||
|       WARN("Unable to create POT surface %s", SDL_GetError()); | ||||
|       return 0; | ||||
| @ -230,6 +233,8 @@ void gl_blitSprite(const gl_texture* sprite, const Vec2* pos, const int sx, cons | ||||
|   if(fabs(pos->x - gl_camera->x) > gl_screen.w / 2 + sprite->sw / 2 || | ||||
|         fabs(pos->y-gl_camera->y) > gl_screen.h / 2 + sprite->sh / 2) | ||||
|     return; | ||||
| 
 | ||||
|   glEnable(GL_TEXTURE_2D); | ||||
|   glMatrixMode(GL_TEXTURE); | ||||
|   glPushMatrix(); | ||||
|   glTranslated(sprite->sw * (double)(sx)/sprite->rw, | ||||
| @ -243,8 +248,8 @@ void gl_blitSprite(const gl_texture* sprite, const Vec2* pos, const int sx, cons | ||||
| 
 | ||||
|   // Actual blitting....
 | ||||
|   glBindTexture(GL_TEXTURE_2D, sprite->texture); | ||||
|   glColor4ub(255, 255, 255, 255); | ||||
|   glBegin(GL_TRIANGLE_STRIP); | ||||
|     glColor4d(1., 1., 1., 1.); | ||||
|     glTexCoord2d(0., 0.); | ||||
|       glVertex2d(0., 0.); | ||||
|     glTexCoord2d(sprite->sw/sprite->rw, 0.); | ||||
| @ -259,10 +264,13 @@ void gl_blitSprite(const gl_texture* sprite, const Vec2* pos, const int sx, cons | ||||
| 
 | ||||
|   glMatrixMode(GL_TEXTURE); | ||||
|   glPopMatrix(); // Sprite translation matrix.
 | ||||
|    | ||||
|   glDisable(GL_TEXTURE_2D); | ||||
| } | ||||
| 
 | ||||
| // Just straight out blit the thing at position.
 | ||||
| void gl_blitStatic(const gl_texture* texture, const Vec2* pos) { | ||||
|   glEnable(GL_TEXTURE_2D); | ||||
|   glMatrixMode(GL_PROJECTION); | ||||
|   glPushMatrix(); // Set up translation matrix.
 | ||||
|   glTranslated(pos->x - (double)gl_screen.w/2., pos->y - (double)gl_screen.h/2., 0); | ||||
| @ -270,8 +278,8 @@ void gl_blitStatic(const gl_texture* texture, const Vec2* pos) { | ||||
|    | ||||
|   // Actual blitting..
 | ||||
|   glBindTexture(GL_TEXTURE_2D, texture->texture); | ||||
|   glColor4ub(255, 255, 255, 255); | ||||
|   glBegin(GL_TRIANGLE_STRIP); | ||||
|     glColor4ub(1., 1., 1., 1.); | ||||
|     glTexCoord2d(0., 0.); | ||||
|       glVertex2d(0., 0.); | ||||
|     glTexCoord2d(texture->w/texture->rw, 0.); | ||||
| @ -283,6 +291,8 @@ void gl_blitStatic(const gl_texture* texture, const Vec2* pos) { | ||||
|   glEnd(); | ||||
| 
 | ||||
|   glPopMatrix(); // Pop the translation matrix.
 | ||||
| 
 | ||||
|   glDisable(GL_TEXTURE_2D); | ||||
| } | ||||
| 
 | ||||
| // Bind our precious camera to a vector.
 | ||||
| @ -291,14 +301,12 @@ void gl_bindCamera(const Vec2* pos) { | ||||
| } | ||||
| 
 | ||||
| // Print text on screen! YES!!!! Just like printf! But different!
 | ||||
| void gl_print(const gl_font* ft_font, Vec2* pos, const char* fmt, ...) { | ||||
| void gl_print(const gl_font* ft_font, const Vec2* pos, const char* fmt, ...) { | ||||
|   //float h = ft_font->h / .63; // Slightly increases font size.
 | ||||
|   char text[256]; | ||||
|   va_list ap; | ||||
|   //int i;
 | ||||
| 
 | ||||
|   if(fmt == NULL) | ||||
|     *text = 0; | ||||
|   if(fmt == NULL) return; | ||||
|   else { | ||||
|     // convert the symbols to text.
 | ||||
|     va_start(ap, fmt); | ||||
| @ -306,16 +314,20 @@ void gl_print(const gl_font* ft_font, Vec2* pos, const char* fmt, ...) { | ||||
|     va_end(ap); | ||||
|   } | ||||
| 
 | ||||
|   glEnable(GL_TEXTURE_2D); | ||||
| 
 | ||||
|   glListBase(ft_font->list_base); | ||||
| 
 | ||||
|   glMatrixMode(GL_PROJECTION); | ||||
|   //for(i = 0; i < strlen(text); i++) {
 | ||||
|     glPushMatrix(); | ||||
| 
 | ||||
|   glPushMatrix(); // Translation matrix.
 | ||||
|   glTranslated(pos->x - (double)gl_screen.w/2., pos->y - (double)gl_screen.h/2., 0); | ||||
|     glColor4ub(255, 255, 255, 255); | ||||
| 
 | ||||
|   glColor4d(1., 1., 1., 1.); | ||||
|   glCallLists(strlen(text), GL_UNSIGNED_BYTE, &text); | ||||
|     glPopMatrix(); | ||||
|   //}
 | ||||
| 
 | ||||
|   glPopMatrix(); // Translation matrix.
 | ||||
|   glDisable(GL_TEXTURE_2D); | ||||
| } | ||||
| 
 | ||||
| // ================
 | ||||
| @ -364,30 +376,26 @@ static void gl_fontMakeDList(FT_Face face, char ch, GLuint list_base, GLuint* te | ||||
|   // Create the display lists.
 | ||||
|   glNewList(list_base+ch, GL_COMPILE); | ||||
| 
 | ||||
|   glBindTexture(GL_TEXTURE_2D, tex_base[(int)ch]); | ||||
| 
 | ||||
|   // Corrects a spacing flaw between letters and
 | ||||
|   // downwards correction for letters like g or y.
 | ||||
|   glPushMatrix(); | ||||
| 
 | ||||
|   // Corrects a spacing flaw between letters.
 | ||||
|   glTranslated(bitmap_glyph->left, 0,0); | ||||
| 
 | ||||
|   // Downwards correction for letters like g or y.
 | ||||
|   glTranslated(0, bitmap_glyph->top-bitmap.rows,0); | ||||
|   glTranslated(bitmap_glyph->left, bitmap_glyph->top-bitmap.rows, 0); | ||||
| 
 | ||||
|   // Take the opengl POT wrapping into account.
 | ||||
|   double x = (double)bitmap.width/(double)w; | ||||
|   double y = (double)bitmap.rows/(double)h; | ||||
| 
 | ||||
|   // Draw the texture mapped quad.
 | ||||
|   glBegin(GL_QUADS); | ||||
|   glBindTexture(GL_TEXTURE_2D, tex_base[(int)ch]); | ||||
|   glBegin(GL_TRIANGLE_STRIP); | ||||
|     glTexCoord2d(0, 0); | ||||
|       glVertex2d(0, bitmap.rows); | ||||
|     glTexCoord2d(x, 0); | ||||
|       glVertex2d(bitmap.width, bitmap.rows); | ||||
|     glTexCoord2d(0, y); | ||||
|       glVertex2d(0, 0); | ||||
|     glTexCoord2d(x, y); | ||||
|       glVertex2d(bitmap.width, 0); | ||||
|     glTexCoord2d(x, 0); | ||||
|       glVertex2d(bitmap.width, bitmap.rows); | ||||
|   glEnd(); | ||||
| 
 | ||||
|   glPopMatrix(); | ||||
| @ -515,9 +523,11 @@ int gl_init(void) { | ||||
|   DEBUG("Renderer: %s", glGetString(GL_RENDERER)); | ||||
| 
 | ||||
|   // Some openGL options.
 | ||||
|   glClearColor(0., 0., 0., 0.); | ||||
|   glClearColor(0., 0., 0., 1.); | ||||
|   glDisable(GL_DEPTH_TEST); // Set for doing 2D shidazles.
 | ||||
|   glEnable(GL_TEXTURE_2D); | ||||
|   //glEnable(GL_TEXTURE_2D);
 | ||||
|   glDisable(GL_LIGHTING); // No lighting, it is done when rendered.
 | ||||
|   glMatrixMode(GL_PROJECTION); | ||||
|   glMatrixMode(GL_PROJECTION); | ||||
|   glLoadIdentity(); | ||||
|   glOrtho(-SCREEN_W /2,   // Left edge.
 | ||||
| @ -529,10 +539,9 @@ int gl_init(void) { | ||||
|   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Alpha.
 | ||||
|   glEnable(GL_BLEND); | ||||
| 
 | ||||
|   glPointSize(1.); // Default is 1.
 | ||||
|   glClear(GL_COLOR_BUFFER_BIT); | ||||
| 
 | ||||
|   SDL_WM_SetCaption(WINDOW_CAPTION, NULL); | ||||
| 
 | ||||
|   return 0; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -17,8 +17,6 @@ | ||||
| #endif | ||||
| #define RGBMASK RMASK,GMASK,BMASK,AMASK | ||||
| 
 | ||||
| #define WINDOW_CAPTION "Lephisto" | ||||
| 
 | ||||
| // Info about opengl screen.
 | ||||
| typedef struct { | ||||
|   int w, h;         // Window dimensions.
 | ||||
| @ -60,7 +58,7 @@ void gl_freeTexture(gl_texture* texture); | ||||
| void gl_blitSprite(const gl_texture* sprite, const Vec2* pos, const int sx, const int sy); | ||||
| void gl_blitStatic(const gl_texture* texture, const Vec2* pos); | ||||
| void gl_bindCamera(const Vec2* pos); | ||||
| void gl_print(const gl_font* ft_font, Vec2* pos, const char* fmt, ...); | ||||
| void gl_print(const gl_font* ft_font, const Vec2* pos, const char* fmt, ...); | ||||
| 
 | ||||
| // Initialize/cleanup.
 | ||||
| int gl_init(void); | ||||
|  | ||||
| @ -1,7 +1,7 @@ | ||||
| #pragma once | ||||
| #include <stdlib.h> | ||||
| 
 | ||||
| #define RNG(L,H) rand()%(H-L+1)+L | ||||
| #define RNG(L,H) (rand()%(H-L+1)+L) | ||||
| 
 | ||||
| void rng_init(void); | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										175
									
								
								src/space.c
									
									
									
									
									
								
							
							
						
						
									
										175
									
								
								src/space.c
									
									
									
									
									
								
							| @ -1,3 +1,5 @@ | ||||
| #include <SDL.h> | ||||
| #include <SDL_opengl.h> | ||||
| #include "log.h" | ||||
| #include "physics.h" | ||||
| #include "opengl.h" | ||||
| @ -5,183 +7,50 @@ | ||||
| #include "pilot.h" | ||||
| #include "space.h" | ||||
| 
 | ||||
| #define STAR_LAYERS 1 | ||||
| 
 | ||||
| static gl_texture* starBG[STAR_LAYERS]; | ||||
| static Vec2 starPos[STAR_LAYERS]; | ||||
| 
 | ||||
| #define STAR_BUF 100 // Area to leave around screen.
 | ||||
| typedef struct { | ||||
|   Vec2 pos; | ||||
|   Uint8 brightness; | ||||
|   double brightness; | ||||
| } Star; | ||||
| 
 | ||||
| Star* stars; | ||||
| int nstars; | ||||
| 
 | ||||
| static gl_texture* starBG_create(const int density); | ||||
| static void put_pixel(SDL_Surface* surface, const int x, const int y, | ||||
|       const Uint8 R, const Uint8 G, const Uint8 B, const Uint8 A); | ||||
| 
 | ||||
| // Modify the pixel at (x,y) of the surface to be of color RGB.
 | ||||
| static void put_pixel(SDL_Surface* surface, const int x, const int y, | ||||
|       const Uint8 R, const Uint8 G, const Uint8 B, const Uint8 A) { | ||||
|    | ||||
|   Uint32 pixel = SDL_MapRGBA(surface->format, R, G, B, A); | ||||
|   int bpp = surface->format->BytesPerPixel; | ||||
|   // p is the address to the pixel we want to set.
 | ||||
|   Uint8* p = (Uint8*)surface->pixels + y * surface->pitch + x * bpp; | ||||
| 
 | ||||
|   switch(bpp) { | ||||
|     case 1:  | ||||
|       *p = pixel; | ||||
|       break; | ||||
|     case 2: | ||||
|       *(Uint16*)p = pixel; | ||||
|       break; | ||||
|     case 3: | ||||
|       if(SDL_BYTEORDER == SDL_BIG_ENDIAN) { | ||||
|         p[0] = (pixel >> 16)  & 0xff; | ||||
|         p[1] = (pixel >> 8)   & 0xff; | ||||
|         p[2] = pixel & 0xff; | ||||
|       } else { | ||||
|         p[0] = pixel & 0xff; | ||||
|         p[1] = (pixel >> 8)   & 0xff; | ||||
|         p[2] = (pixel >> 16)  & 0xff; | ||||
|       } | ||||
|       break; | ||||
|     case 4: | ||||
|       *(Uint32*)p = pixel; | ||||
|       break; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| // Create a background of stars to use.
 | ||||
| // Background consists of four tiles together.
 | ||||
| static gl_texture* starBG_create(const int density) { | ||||
|   SDL_Surface* surface; | ||||
|   int w, h; | ||||
|   int i, d; | ||||
| 
 | ||||
|   w = (int)((float)gl_screen.w * 1.5); | ||||
|   if((w & (w-1)) != 0) { | ||||
|     w = 1; | ||||
|     while(w < (int)((float)gl_screen.w*1.5)) | ||||
|       w <<= 1; | ||||
|   } | ||||
|   h = (int)((float)gl_screen.h * 1.5); | ||||
|   if((h & (h-1)) != 0) { | ||||
|     h = 1; | ||||
|     while(h < (int)((float)gl_screen.h * 1.5)) | ||||
|       h <<= 1; | ||||
|   } | ||||
| 
 | ||||
|   surface = SDL_CreateRGBSurface(SDL_SRCCOLORKEY, w, h, | ||||
|         SDL_GetVideoSurface()->format->BytesPerPixel*8, RGBMASK); | ||||
|    | ||||
|   if(surface == NULL) { | ||||
|     WARN("Unable to create RGB surface"); | ||||
|     return NULL; | ||||
|   } | ||||
| 
 | ||||
|   SDL_LockSurface(surface); | ||||
| 
 | ||||
|   d = (int)((double)(density)*(double)(gl_screen.w)*(double)(gl_screen.h)/1000./1000.); | ||||
|   for(i = 0; i < d; i++) | ||||
|     put_pixel(surface, RNG(0,w-1), RNG(0,h-1), 255, 255, 255, RNG(50, 255)); | ||||
| 
 | ||||
|   SDL_UnlockSurface(surface); | ||||
| 
 | ||||
|   return gl_loadImage(surface); | ||||
| } | ||||
| 
 | ||||
| void space_init(void) { | ||||
|   int i; | ||||
|   nstars = 2000; | ||||
|   nstars = (500*gl_screen.w*gl_screen.h + STAR_BUF*STAR_BUF)/(800*640);; | ||||
|   stars = malloc(sizeof(Star)*nstars); | ||||
|   for(i = 0; i < nstars; i++) { | ||||
|     stars[i].brightness = RNG(50, 255); | ||||
|     stars[i].pos.x = RNG(STAR_BUF, gl_screen.w + STAR_BUF); | ||||
|     stars[i].pos.y = RNG(-STAR_BUF, gl_screen.h + STAR_BUF); | ||||
|     stars[i].brightness = (float)RNG(50, 200)/256.; | ||||
|     stars[i].pos.x = (float)RNG(-STAR_BUF, gl_screen.w + STAR_BUF); | ||||
|     stars[i].pos.y = (float)RNG(-STAR_BUF, gl_screen.h + STAR_BUF); | ||||
|   } | ||||
| #if 0 | ||||
|   for(i = 0; i < STAR_LAYERS; i++) { | ||||
|     starBG[i] = starBG_create(1000); | ||||
|     starPos[i].x = 0.; | ||||
|     starPos[i].y = 0.; | ||||
|   } | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| void space_render(double dt) { | ||||
|   int i; | ||||
|   glMatrixMode(GL_PROJECTION); | ||||
|   glPushMatrix(); | ||||
|   glPushMatrix(); // Projection translation matrix.
 | ||||
|   glTranslated(-(double)gl_screen.w/2., -(double)gl_screen.h/2., 0.); | ||||
|   glBegin(GL_POINTS); | ||||
|     glColor4ub(255, 255, 255, stars[i].brightness); | ||||
|   for(i = 0; i < nstars; i++) { | ||||
|     // Update the position.
 | ||||
|     stars[i].pos.x -= player->solid->vel.x/(15.-10.*stars[i].brightness)*dt; | ||||
|     stars[i].pos.y -= player->solid->vel.y/(15.-10.*stars[i].brightness)*dt; | ||||
|     // Scroll those stars bitch!
 | ||||
|     if(stars[i].pos.x > gl_screen.w + STAR_BUF) stars[i].pos.x = -STAR_BUF; | ||||
|     else if(stars[i].pos.x < -STAR_BUF) stars[i].pos.x = gl_screen.w + STAR_BUF; | ||||
|     if(stars[i].pos.y > gl_screen.h + STAR_BUF) stars[i].pos.y = -STAR_BUF; | ||||
|     else if(stars[i].pos.y < -STAR_BUF) stars[i].pos.y = gl_screen.h + STAR_BUF; | ||||
|     // Render.
 | ||||
|     glColor4d(1., 1., 1., stars[i].brightness); | ||||
|     glVertex2d(stars[i].pos.x, stars[i].pos.y); | ||||
|   } | ||||
|   glEnd(); | ||||
|   glPopMatrix(); | ||||
| 
 | ||||
| #if 0 | ||||
|   Vec2 tmp; | ||||
|   FP f; | ||||
| 
 | ||||
|   for(i = 0; i < STAR_LAYERS; i++) { | ||||
|     // Movement.
 | ||||
|     starPos[i].x -= player->solid->vel.x / (FP)(2*i+10)*dt; | ||||
|     starPos[i].y -= player->solid->vel.y / (FP)(2*i+104)*dt; | ||||
| 
 | ||||
|     // Displaces x if reaches edge.
 | ||||
|     if(starPos[i].x > 0) | ||||
|       starPos[i].x -= starBG[i]->w; | ||||
|     else if(starPos[i].x < -starBG[i]->w) | ||||
|       starPos[i].x += starBG[i]->w; | ||||
| 
 | ||||
|     // Displaces y if reaches edge.
 | ||||
|     if(starPos[i].y > 0) | ||||
|       starPos[i].y -= starBG[i]->h; | ||||
|     else if(starPos[i].y < -starBG[i]->h) | ||||
|       starPos[i].y += starBG[i]->h; | ||||
| 
 | ||||
|     // Primary blit.
 | ||||
|     gl_blitStatic(starBG[i], &starPos[i]); | ||||
| 
 | ||||
|     tmp.x = starPos[i].x; | ||||
|     tmp.y = starPos[i].y; | ||||
| 
 | ||||
|     // More blits if part of the screen is blank.
 | ||||
|     if(starPos[i].x < starBG[i]->w/4.) | ||||
|       tmp.x += starBG[i]->w; | ||||
|     else if(starPos[i].x < starBG[i]->w*3./4.) | ||||
|       tmp.y -= starBG[i]->w; | ||||
| 
 | ||||
|     if(starPos[i].y < starBG[i]->h/4.) | ||||
|       tmp.y += starBG[i]->h; | ||||
|     else if(starPos[i].y < starBG[i]->h*3./4.) | ||||
|       tmp.y -= starBG[i]->h; | ||||
| 
 | ||||
|     if(tmp.x != starPos[i].x && tmp.y != starPos[i].y) { | ||||
|       gl_blitStatic(starBG[i], &tmp); | ||||
|       f = tmp.x; | ||||
|       tmp.x = starPos[i].x; | ||||
|       gl_blitStatic(starBG[i], &tmp); | ||||
|       tmp.x = f; | ||||
|       tmp.y = starPos[i].y; | ||||
|       gl_blitStatic(starBG[i], &tmp); | ||||
|     } | ||||
|     else if(tmp.x != starPos[i].x || tmp.y != starPos[i].y) | ||||
|       gl_blitStatic(starBG[i], &tmp); | ||||
|   } | ||||
| #endif | ||||
|   glPopMatrix(); // Projection translation matrix.
 | ||||
| } | ||||
| 
 | ||||
| void space_exit(void) { | ||||
|   free(stars); | ||||
| #if 0 | ||||
|   int i; | ||||
|   for(i = 0; i < STAR_LAYERS; i++) | ||||
|     gl_freeTexture(starBG[i]); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Allanis
						Allanis