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

游戏引擎

开发平台:

Visual C++

  1. /* Shader
  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 __SHADER_H__
  20. #define __SHADER_H__
  21. #include "engine.h"
  22. #include "mathlib.h"
  23. class Shader {
  24. public:
  25. Shader(const char *name);
  26. ~Shader();
  27. void load(const char *name);
  28. static void setParameter(int num,const vec4 &parameter);
  29. void enable();
  30. void disable();
  31. void bind();
  32. void bindTexture(int unit,Texture *texture);
  33. enum {
  34. NUM_MATRIXES = 4,
  35. NUM_PARAMETERS = 2,
  36. NUM_LOCAL_PARAMETERS = 4,
  37. NUM_TEXTURES = 6,
  38. };
  39. static Shader *old_shader;
  40. protected:
  41. enum {
  42. TIME = 1,
  43. SIN,
  44. COS,
  45. CAMERA,
  46. ICAMERA,
  47. LIGHT,
  48. ILIGHT,
  49. LIGHT_COLOR,
  50. FOG_COLOR,
  51. VIEWPORT,
  52. PARAMETER,
  53. PROJECTION,
  54. MODELVIEW,
  55. IMODELVIEW,
  56. TRANSFORM,
  57. ITRANSFORM,
  58. LIGHT_TRANSFORM,
  59. };
  60. struct Matrix {
  61. int num; // matrix number
  62. int type; // matrix type
  63. };
  64. struct LocalParameter {
  65. int num; // parameter number
  66. int type; // parameter type
  67. int parameter;
  68. };
  69. GLuint compileARBtec(const char *src);
  70. void getMatrix(const char *name,Matrix *m);
  71. void getLocalParameter(const char *name,LocalParameter *p);
  72. int num_matrixes;
  73. Matrix matrixes[NUM_MATRIXES];
  74. int num_vertex_parameters;
  75. LocalParameter vertex_parameters[NUM_LOCAL_PARAMETERS];
  76. int num_fragment_parameters;
  77. LocalParameter fragment_parameters[NUM_LOCAL_PARAMETERS];
  78. GLuint vertex_target;
  79. GLuint vertex_id;
  80. GLuint fragment_target;
  81. GLuint fragment_id;
  82. static vec4 parameters[NUM_PARAMETERS];
  83. static Texture *old_textures[Shader::NUM_TEXTURES];
  84. };
  85. #endif /* __SHADER_H__ */