#include "material.h" void RenderMaterial::Alpha(float a) { alpha=a; } float RenderMaterial::Alpha() { return alpha; } void RenderMaterial::Shininess(float shininess) { this->shininess=shininess; } float RenderMaterial::Shininess() { return shininess; } void RenderMaterial::Tex(Texture *tex) { this->tex=tex; } Texture *RenderMaterial::Tex() { return tex; } void RenderMaterial::Shader(ShaderProgram *shader) { this->shader=shader; } ShaderProgram *RenderMaterial::Shader() { return shader; } void RenderMaterial::UsingVertexColor(bool usevertexcolor) {dontoverridevertexcolor=usevertexcolor;} bool RenderMaterial::UsingVertexColor() {return dontoverridevertexcolor;} char *ShaderProgram::LoadShaderFile(const char *filename) { char *content=NULL; long count=0; FILE *stream=fopen(filename,"rt"); if (!stream) return NULL; fseek(stream,0,SEEK_END); count=ftell(stream); rewind(stream); if (count>0) { content=(char *)malloc(sizeof(char)*(count+1)); count=fread(content,sizeof(char),count,stream); content[count]='\0'; } fclose(stream); return content; } ShaderProgram::ShaderProgram(const char *dir,const char *name,bool fragprogram): numuniforms(0),is_valid(true) { hasfrag=fragprogram; char frag_filename[5000]; char vert_filename[5000]; strcpy(vert_filename,dir); strcat(vert_filename,"/"); strcat(vert_filename,name); strcat(vert_filename,".vert"); vpsrc=LoadShaderFile(vert_filename); if (!vpsrc) is_valid=false; if (hasfrag) { strcpy(frag_filename,dir); strcat(frag_filename,"/"); strcat(frag_filename,name); strcat(frag_filename,".frag"); fpsrc=LoadShaderFile(frag_filename); if (!fpsrc) is_valid=false; } } ShaderProgram::~ShaderProgram() { if (vpsrc) free(vpsrc); if (fpsrc) free(fpsrc); } bool ShaderProgram::AddUniform(const ShaderVariable &var) { if (64>numuniforms) { strcpy(uniforms[numuniforms].name,var.name); uniforms[numuniforms].type=var.type; uniforms[numuniforms].val=var.val; numuniforms++; return true; } else return false; } void ShaderProgram::ClearUniforms() { numuniforms=0; }