Added some m_ prefixes to member variables in GLRenderer and related classes
[supertux.git] / src / video / gl / gl_texture.cpp
index b0ce080..fe3864c 100644 (file)
@@ -35,54 +35,71 @@ inline int next_power_of_two(int val)
 } // namespace
 
 GLTexture::GLTexture(unsigned int width, unsigned int height) :
-  handle(),
-  texture_width(),
-  texture_height(),
-  image_width(),
-  image_height()
+  m_handle(),
+  m_texture_width(),
+  m_texture_height(),
+  m_image_width(),
+  m_image_height()
 {
+#ifdef GL_VERSION_ES_CM_1_0
   assert(is_power_of_2(width));
   assert(is_power_of_2(height));
-  texture_width  = width;
-  texture_height = height;
-  image_width  = width;
-  image_height = height;
+#endif
+  m_texture_width  = width;
+  m_texture_height = height;
+  m_image_width  = width;
+  m_image_height = height;
 
   assert_gl("before creating texture");
-  glGenTextures(1, &handle);
+  glGenTextures(1, &m_handle);
 
   try {
-    glBindTexture(GL_TEXTURE_2D, handle);
+    glBindTexture(GL_TEXTURE_2D, m_handle);
 
-    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture_width,
-                 texture_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 
+                 m_texture_width, m_texture_height, 
+                 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
 
     set_texture_params();
   } catch(...) {
-    glDeleteTextures(1, &handle);
+    glDeleteTextures(1, &m_handle);
     throw;
   }
 }
 
 GLTexture::GLTexture(SDL_Surface* image) :
-  handle(),
-  texture_width(),
-  texture_height(),
-  image_width(),
-  image_height()
+  m_handle(),
+  m_texture_width(),
+  m_texture_height(),
+  m_image_width(),
+  m_image_height()
 {
-  texture_width = next_power_of_two(image->w);
-  texture_height = next_power_of_two(image->h);
-  image_width = image->w;
-  image_height = image->h;
+#ifdef GL_VERSION_ES_CM_1_0
+  m_texture_width = next_power_of_two(image->w);
+  m_texture_height = next_power_of_two(image->h);
+#else
+  if (GLEW_ARB_texture_non_power_of_two)
+  {
+    m_texture_width  = image->w;
+    m_texture_height = image->h;
+  }
+  else
+  {
+    m_texture_width = next_power_of_two(image->w);
+    m_texture_height = next_power_of_two(image->h);
+  }
+#endif
+
+  m_image_width  = image->w;
+  m_image_height = image->h;
 
 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
-  SDL_Surface* convert = SDL_CreateRGBSurface(SDL_SWSURFACE,
-                                              texture_width, texture_height, 32,
+  SDL_Surface* convert = SDL_CreateRGBSurface(0,
+                                              m_texture_width, m_texture_height, 32,
                                               0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff);
 #else
-  SDL_Surface* convert = SDL_CreateRGBSurface(SDL_SWSURFACE,
-                                              texture_width, texture_height, 32,
+  SDL_Surface* convert = SDL_CreateRGBSurface(0,
+                                              m_texture_width, m_texture_height, 32,
                                               0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000);
 #endif
 
@@ -90,11 +107,11 @@ GLTexture::GLTexture(SDL_Surface* image) :
     throw std::runtime_error("Couldn't create texture: out of memory");
   }
 
-  SDL_SetAlpha(image, 0, 0);
+  SDL_SetSurfaceBlendMode(image, SDL_BLENDMODE_NONE);
   SDL_BlitSurface(image, 0, convert, 0);
 
   assert_gl("before creating texture");
-  glGenTextures(1, &handle);
+  glGenTextures(1, &m_handle);
 
   try {
     GLenum sdl_format;
@@ -102,10 +119,12 @@ GLTexture::GLTexture(SDL_Surface* image) :
       sdl_format = GL_RGB;
     else if(convert->format->BytesPerPixel == 4)
       sdl_format = GL_RGBA;
-    else
+    else {
+      sdl_format = GL_RGBA;
       assert(false);
+    }
 
-    glBindTexture(GL_TEXTURE_2D, handle);
+    glBindTexture(GL_TEXTURE_2D, m_handle);
     glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
 #ifdef GL_UNPACK_ROW_LENGTH
     glPixelStorei(GL_UNPACK_ROW_LENGTH, convert->pitch/convert->format->BytesPerPixel);
@@ -119,9 +138,17 @@ GLTexture::GLTexture(SDL_Surface* image) :
     {
       SDL_LockSurface(convert);
     }
-    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture_width,
-                 texture_height, 0, sdl_format,
+
+    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 
+                 m_texture_width, m_texture_height, 0, sdl_format,
                  GL_UNSIGNED_BYTE, convert->pixels);
+
+    // no not use mipmaps
+    if(false)
+    {
+      glGenerateMipmap(GL_TEXTURE_2D);
+    }
+
     if(SDL_MUSTLOCK(convert))
     {
       SDL_UnlockSurface(convert);
@@ -131,7 +158,7 @@ GLTexture::GLTexture(SDL_Surface* image) :
 
     set_texture_params();
   } catch(...) {
-    glDeleteTextures(1, &handle);
+    glDeleteTextures(1, &m_handle);
     SDL_FreeSurface(convert);
     throw;
   }
@@ -140,7 +167,7 @@ GLTexture::GLTexture(SDL_Surface* image) :
 
 GLTexture::~GLTexture()
 {
-  glDeleteTextures(1, &handle);
+  glDeleteTextures(1, &m_handle);
 }
 
 void
@@ -148,11 +175,9 @@ GLTexture::set_texture_params()
 {
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-#ifdef GL_CLAMP
-  /* OpenGL ES doesn't support it */
-  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
-  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
-#endif
+
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 
   assert_gl("set texture params");
 }