00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #import <string>
00027 #import <vector>
00028 #import <cstdio>
00029 #import <OpenGLES/ES1/gl.h>
00030 #import <OpenGLES/ES1/glext.h>
00031 #import <OpenGLES/ES2/gl.h>
00032 #import <OpenGLES/ES2/glext.h>
00033
00034 #import "sgBase.h"
00035 #import "sgShader.h"
00036 #import "sgTexture.h"
00037 #import "sgColor.h"
00038 #import "sgMatrix4x4.h"
00039
00040 class sgMaterialParameter
00041 {
00042 public:
00043 bool operator== (const sgMaterialParameter &other)
00044 {
00045 if(location == other.location && parameter == other.parameter)
00046 return true;
00047
00048 return false;
00049 }
00050
00051 bool operator!= (const sgMaterialParameter &other)
00052 {
00053 if(location != other.location || parameter != other.parameter)
00054 return true;
00055
00056 return false;
00057 }
00058
00059 std::string name;
00060 unsigned int location;
00061
00062 void *parameter;
00063 unsigned int datatype;
00064 unsigned int size;
00065 unsigned int count;
00066 };
00067
00071 class sgMaterial : public sgBase
00072 {
00073 public:
00078 sgMaterial();
00079
00085 sgMaterial(unsigned int shad);
00086
00093 sgMaterial(const char *vsname, const char *fsname);
00094
00102 sgMaterial(const char *texfile, BOOL mipmaps = TRUE, unsigned int shad = 1);
00103
00112 sgMaterial(const char *vsname, const char *fsname, const char *texfile, BOOL mipmaps = TRUE);
00113
00118 ~sgMaterial();
00119
00124 bool operator== (const sgMaterial &other);
00125
00130 void setDefault();
00131
00138 void setShader(const char *vsname, const char *fsname);
00139
00145 void setShader(unsigned int shad);
00146
00154 void setTexture2D(unsigned int tex, const char *texfile, BOOL mipmaps = TRUE);
00155
00166
00167
00172 void getUniforms();
00173
00183 void addParameter(const char *name, void *ptr, unsigned int datatype = 0, unsigned int size = 3, unsigned int count = 1);
00184
00189 static sgMaterial *getMaterial();
00190
00196 static sgMaterial *getMaterial(unsigned int shad);
00197
00204 static sgMaterial *getMaterial(const char *vsname, const char *fsname);
00205
00213 static sgMaterial *getMaterial(const char *texfile, BOOL mipmaps = TRUE, unsigned int shad = 1);
00214
00223 static sgMaterial *getMaterial(const char *vsname, const char *fsname, const char *texfile, BOOL mipmaps = TRUE);
00224
00229 sgShader *shader;
00230
00235 std::vector<sgTexture*> textures;
00236
00241 std::vector<unsigned int> texlocation;
00242
00247 std::vector<sgMaterialParameter> parameters;
00248
00253 BOOL culling;
00254
00259 unsigned int cullmode;
00260
00265 BOOL blending;
00266
00271 unsigned int blendsource;
00272
00277 unsigned int blenddestination;
00278
00283 BOOL lighting;
00284
00289 BOOL colors;
00290
00295 sgFColorA ambient;
00296
00301 sgFColorA diffuse;
00302
00307 sgFColorA specular;
00308
00313 float shininess;
00314
00319 sgFColorA emissive;
00320
00325 BOOL alphatest;
00326
00331 float alphatestvalue;
00332
00337 BOOL depthtest;
00338
00343 unsigned int depthtestmode;
00344
00349 sgMatrix4x4 mattex;
00350 };