00001
00002 #ifndef RC_SHADERPROGRAM_H
00003 #define RC_SHADERPROGRAM_H
00004
00005 #define RC_MAX_SHADERS 4
00006
00010 class ShaderProgram : public Resource {
00011
00012 friend class SceneGraph;
00013 friend class Geometry;
00014
00015 friend class Renderer;
00016 #ifdef RC_OPENGL
00017 friend class RendererGL;
00018 #endif
00019
00020
00021
00022 protected:
00023 ShaderProgram(
00024 const char *nidentifier,
00025
00026 const char *description,
00027 char *prefix
00028 );
00029
00030 ~ShaderProgram();
00031
00032 public:
00033
00034 static void registerCommands();
00035
00036
00037
00038 void setScalar(
00039 const char *name,
00040 f32 value,
00041 UniformType_t type
00042 );
00043
00044 void setScalar(
00045 const char *name,
00046 i32 value,
00047 UniformType_t type
00048 );
00049
00050 void setScalarArray(
00051 const char *name,
00052 void *list,
00053 u32 n_values,
00054 UniformType_t type
00055 );
00056
00057
00058 void setVector(
00059 const char *name,
00060 void *vecptr,
00061 u32 dimension,
00062 UniformType_t type
00063 );
00064
00065 void setVectorArray(
00066 const char *name,
00067 void *list,
00068 u32 n_values,
00069 u32 dimension,
00070 UniformType_t type
00071 );
00072
00073 void setMatrix(
00074 const char *name,
00075 void *matptr,
00076 u32 dimension
00077 );
00078
00079 void setMatrixArray(
00080 const char *name,
00081 void *list,
00082 u32 n_values,
00083 u32 dimension
00084 );
00085
00086
00087
00088
00089 void setTexture(
00090 const char *name,
00091 Texture *tex
00092 );
00093
00094 void setCubeMap(
00095 const char *name,
00096 CubeMap *cubemap
00097 );
00098
00099
00100 RenderState *getRenderState();
00101
00102
00103
00104 Uniform *getUniform();
00105
00106
00107
00108 bool hasUniform(
00109 const char *name
00110 );
00111
00112 void recompile();
00113
00114
00115
00116
00117 void *getHandle();
00118 protected:
00119 void setHandle(
00120 void *nhandle
00121 );
00122
00123 #ifdef DEBUG
00124 protected:
00125 void print(
00126 FILE *f
00127 );
00128 #endif
00129
00130
00131
00132 public:
00133 RenderState renderState;
00134
00135 private:
00136 char *shader_description;
00137 char *shader_prefix;
00138
00139 Uniform uniform;
00140
00141 void *handle;
00142
00143 };
00144
00145 #endif
00146