00001 00002 00003 #ifndef SHADEROBJECT_H 00004 #define SHADEROBJECT_H 00005 00006 00007 #include "GPUProgram.h" 00008 00009 00010 namespace pge { 00011 00012 00013 class ShaderObject { 00014 00015 00016 public: 00017 //************************************************************************ 00018 // 00019 // Constructor 00020 // 00021 //************************************************************************ 00023 ShaderObject(const std::string &vertexSourceFile, const std::string &fragmentSourceFile) { 00024 m_program = new GPUProgram(vertexSourceFile, fragmentSourceFile); 00025 } 00026 00027 00028 //************************************************************************ 00029 // 00030 // Destructor 00031 // 00032 //************************************************************************ 00034 virtual ~ShaderObject(void) { 00035 if(m_program != NULL) { 00036 delete m_program; 00037 m_program = NULL; 00038 } 00039 } 00040 00041 00042 //************************************************************************ 00043 // 00044 // Functions 00045 // 00046 //************************************************************************ 00047 void bind(void) { 00048 m_program->bind(); 00049 } 00050 00051 virtual void preRender(void) = 0; 00052 virtual void postRender(void) = 0; 00053 00054 00055 void release(void) { 00056 m_program->release(); 00057 } 00058 00059 00060 protected: 00061 //************************************************************************ 00062 // 00063 // Variables 00064 // 00065 //************************************************************************ 00066 GPUProgram *m_program; 00067 }; 00068 }; 00069 00070 #endif