vertexprog.h
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:4k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // vertexprog.h
  2. //
  3. // Copyright (C) 2001 Chris Laurel <claurel@shatters.net>
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. #ifndef _VERTEXPROG_H_
  10. #define _VERTEXPROG_H_
  11. #include <celmath/vecmath.h>
  12. #include <celutil/color.h>
  13. #include <celengine/gl.h>
  14. class VertexProcessor;
  15. namespace vp
  16. {
  17.     VertexProcessor* initNV();
  18.     VertexProcessor* initARB();
  19.     void enable();
  20.     void disable();
  21.     void use(unsigned int);
  22.     void parameter(unsigned int, const Vec3f&);
  23.     void parameter(unsigned int, const Point3f&);
  24.     void parameter(unsigned int, const Color&);
  25.     void parameter(unsigned int, float, float, float, float);
  26.     enum Parameter {
  27.         LightDirection0    = 0,
  28.         EyePosition        = 1,
  29.         DiffuseColor0      = 2,
  30.         SpecularColor0     = 3,
  31.         SpecularExponent   = 4,
  32.         AmbientColor       = 5,
  33.         HazeColor          = 6,
  34.         TextureTranslation = 7,
  35.         Constant0          = 8,
  36.         TexGen_S           = 10,
  37.         TexGen_T           = 11,
  38.         TexGen_S2          = 12,
  39.         TexGen_T2          = 13,
  40.         TexGen_S3          = 14,
  41.         TexGen_T3          = 15,
  42.         TexGen_S4          = 16,
  43.         TexGen_T4          = 17,
  44.         LightDirection1    = 18,
  45.         DiffuseColor1      = 19,
  46.         SpecularColor1     = 20,
  47.         Scale              = 21,
  48.         InverseScale       = 22
  49.     };
  50.     extern unsigned int specular;
  51.     extern unsigned int diffuse;
  52.     extern unsigned int diffuseHaze;
  53.     extern unsigned int diffuseBump;
  54.     extern unsigned int diffuseBumpHaze;
  55.     extern unsigned int everything;
  56.     extern unsigned int shadowTexture;
  57.     extern unsigned int multiShadow;
  58.     extern unsigned int diffuseTexOffset;
  59.     extern unsigned int ringIllum;
  60.     extern unsigned int ringShadow;
  61.     extern unsigned int cometTail;
  62.     extern unsigned int nightLights;
  63.     extern unsigned int glossMap;
  64.     extern unsigned int perFragmentSpecular;
  65.     extern unsigned int perFragmentSpecularAlpha;
  66.     extern unsigned int diffuse_2light;
  67.     extern unsigned int diffuseTexOffset_2light;
  68.     extern unsigned int diffuseHaze_2light;
  69.     extern unsigned int specular_2light;
  70.     extern unsigned int nightLights_2light;
  71.     extern unsigned int ellipticalGalaxy;
  72.     extern unsigned int starDisc;
  73. #ifdef HDR_COMPRESS
  74.     extern unsigned int diffuseBumpHDR;
  75.     extern unsigned int diffuseBumpHazeHDR;
  76.     extern unsigned int nightLightsHDR;
  77.     extern unsigned int nightLights_2lightHDR;
  78. #endif
  79. };
  80. namespace arbvp
  81. {
  82.     void parameter(unsigned int, const Vec3f&);
  83.     void parameter(unsigned int, const Point3f&);
  84.     void parameter(unsigned int, const Color&);
  85.     void parameter(unsigned int, float, float, float, float);
  86.     void parameter(unsigned int, const float*);
  87. };
  88. class VertexProcessor
  89. {
  90.  public:
  91.     VertexProcessor();
  92.     virtual ~VertexProcessor();
  93.     virtual void enable() = 0;
  94.     virtual void disable() = 0;
  95.     virtual void use(unsigned int) = 0;
  96.     virtual void parameter(vp::Parameter, const Vec3f&);
  97.     virtual void parameter(vp::Parameter, const Point3f&);
  98.     virtual void parameter(vp::Parameter, const Color&);
  99.     virtual void parameter(vp::Parameter, float, float, float, float) = 0;
  100.     virtual void parameter(vp::Parameter, const float*) = 0;
  101.     virtual void enableAttribArray(unsigned int) = 0;
  102.     virtual void disableAttribArray(unsigned int) = 0;
  103.     virtual void attribArray(unsigned int index,
  104.                              int size,
  105.                              GLenum type,
  106.                              unsigned int strude,
  107.                              const void* pointer) = 0;
  108.  private:
  109.     int dummy;
  110. };
  111. #endif // _VERTEXPROG_H_