X-Git-Url: http://git.mutantstargoat.com?p=demo;a=blobdiff_plain;f=src%2Fshader.cc;h=b8ca8ef4d6c0fa6453b1eca3c3567f7a1d46418c;hp=703c2dc852123a696af11a76cdc2ca357561c4e7;hb=31bab00bc3b476be9814c1ee06b9a2f0dc77d4e9;hpb=64e2adbbab48320b6cd792e515b44cea112a3be4 diff --git a/src/shader.cc b/src/shader.cc index 703c2dc..b8ca8ef 100644 --- a/src/shader.cc +++ b/src/shader.cc @@ -1,18 +1,87 @@ +#include #include #include "shader.h" +ShaderProgram *current_program; + Shader::Shader() {} -Shader::~Shader() {} +Shader::~Shader() +{ + type = SDR_UNKNOWN; +} + +bool Shader::load(const char *fname, SType type) +{ + switch(type) { + case SDR_VERTEX: + case SDR_FRAGMENT: + this->type = type; + break; + default: + fprintf(stderr, "Invalid shader type used in loading.\n"); + return false; + } + + FILE *fp; + unsigned int fsz; + + if(!(fp = fopen(fname, "rb"))) { + fprintf(stderr, "Failed to open shader: %s.\n", fname); + + return false; + } + fseek(fp, 0, SEEK_END); + fsz = ftell(fp); + rewind(fp); + + char *buf; + if(!(buf = new char[fsz + 1])) { + fprintf(stderr, "Failed to allocate %u buffers.\n", fsz + 1); + fclose(fp); + + return false; + } + + if(fread(buf, 1, fsz, fp) < fsz) { + fprintf(stderr, "Failed to read shader: %s.\n", fname); + delete buf; + fclose(fp); + + return false; + } + buf[fsz] = '\0'; + fclose(fp); + + create(buf, fsz, fname); + return true; +} ShaderProgram::ShaderProgram() { + current_program = 0; + + int len = sizeof shaders / sizeof *shaders; + for(int i=0; itype < sizeof shaders / sizeof *shaders); +// shaders[sdr->type] = sdr; +// } + +ShaderProgram *get_current_program() { - shaders[type] = sdr; + return current_program; } \ No newline at end of file