texture.h
上传用户:qccn516
上传日期:2013-05-02
资源大小:3382k
文件大小:3k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. /* Texture
  2.  *
  3.  * Copyright (C) 2003-2004, Alexander Zaprjagaev <frustum@frustum.org>
  4.  *
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or
  8.  * (at your option) any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  18.  */
  19. #ifndef __TEXTURE_H__
  20. #define __TEXTURE_H__
  21. #ifdef _WIN32
  22. #include <windows.h>
  23. #endif
  24. #include <GL/gl.h>
  25. #include <GL/glext.h>
  26. class Texture {
  27. public:
  28. enum {
  29. TEXTURE_2D = GL_TEXTURE_2D,
  30. TEXTURE_RECT = GL_TEXTURE_RECTANGLE_NV,
  31. TEXTURE_CUBE = GL_TEXTURE_CUBE_MAP,
  32. TEXTURE_3D = GL_TEXTURE_3D,
  33. };
  34. enum {
  35. // format
  36. LUMINANCE = 1 << 0,
  37. LUMINANCE_ALPHA = 1 << 1,
  38. RGB = 1 << 2,
  39. RGBA = 1 << 3,
  40. // flags
  41. FLOAT = 1 << 4,
  42. CLAMP = 1 << 5,
  43. CLAMP_TO_EDGE = 1 << 6,
  44. // filter
  45. NEAREST = 1 << 7,
  46. LINEAR = 1 << 8,
  47. NEAREST_MIPMAP_NEAREST = 1 << 9,
  48. LINEAR_MIPMAP_NEAREST = 1 << 10,
  49. LINEAR_MIPMAP_LINEAR = 1 << 11,
  50. // anisotropy
  51. ANISOTROPY_1 = 1 << 12,
  52. ANISOTROPY_2 = 1 << 13,
  53. ANISOTROPY_4 = 1 << 14,
  54. ANISOTROPY_8 = 1 << 15,
  55. ANISOTROPY_16 = 1 << 16,
  56. };
  57. Texture(int width,int height,GLuint target = TEXTURE_2D,int flag = RGB | LINEAR_MIPMAP_LINEAR);
  58. Texture(const char *name,GLuint target = TEXTURE_2D,int flag = RGB | LINEAR_MIPMAP_LINEAR);
  59. ~Texture();
  60. void load(const char *name,GLuint target = TEXTURE_2D,int flag = RGB | LINEAR_MIPMAP_LINEAR);
  61. void enable();
  62. void disable();
  63. void bind();
  64. void copy(GLuint target = 0);
  65. void render(float x0 = -1.0,float y0 = -1.0,float x1 = 1.0,float y1 = 1.0);
  66. // 2d textures
  67. static unsigned char *load(const char *name,int &width,int &height);
  68. static int save(const char *name,const unsigned char *data,int width,int height);
  69. static unsigned char *load_tga(const char *name,int &width,int &height);
  70. static unsigned char *load_png(const char *name,int &width,int &height);
  71. static unsigned char *load_jpeg(const char *name,int &width,int &height);
  72. static unsigned char *load_dds(const char *name,int &width,int &height);
  73. static int save_tga(const char *name,const unsigned char *data,int width,int height);
  74. static int save_jpeg(const char *name,const unsigned char *data,int width,int height,int quality);
  75. static unsigned char *rgba2luminance(unsigned char *data,int width,int height);
  76. static unsigned char *rgba2luminance_alpha(unsigned char *data,int width,int height);
  77. static unsigned char *rgba2rgb(unsigned char *data,int width,int height);
  78. // 3d textures
  79. static unsigned char *load_3d(const char *name,int &width,int &height,int &depth,int &format);
  80. static int save_3d(const char *name,const unsigned char *data,int width,int height,int depth,int format);
  81. int width,height,depth;
  82. GLuint target;
  83. int flag;
  84. GLuint format;
  85. GLuint id;
  86. };
  87. #endif /* __TEXTURE_H__ */