| 
 | 
 
盖莫游戏引擎2.1.2 GLSL+Light 
这几天忙着做项目 引擎进度缓慢 
先上封转的GLSL吧(这个是从网上找的一段代码修改的) 
如下: 
//////////////////////////////////////////////////////////// 
/// GL着色器基类 
//////////////////////////////////////////////////////////// 
class GLSLShader : public Object  
{ 
public: 
//////////////////////////////////////////////////////// 
/// 构造,析构GL着色器 
////////////////////////////////////////////////////////  
GLSLShader(); 
virtual ~GLSLShader(); 
 
//////////////////////////////////////////////////////// 
/// 着色器编译,检测是否编译 
////////////////////////////////////////////////////////   
    virtual bool Compile() = 0; 
    virtual bool IsCompiled() const = 0;  
 
//////////////////////////////////////////////////////// 
/// 获取着色器日志 
////////////////////////////////////////////////////////   
    virtual void GetShaderLog(engine_string &log) const = 0; 
     
//////////////////////////////////////////////////////// 
/// 获取,设置着色器数据 
////////////////////////////////////////////////////////   
virtual void GetShaderSource(engine_string &shader) const = 0; 
    virtual void SetShaderSource(engine_string &code) = 0; 
   
//////////////////////////////////////////////////////// 
/// 获取着色器句柄(标号) 
////////////////////////////////////////////////////////    
    virtual GLuint GetHandle() const = 0; 
 
//////////////////////////////////////////////////////// 
/// 获取着色器参数   
////////////////////////////////////////////////////////   
    virtual void   GetParameter(GLenum param, GLint *data) const = 0; 
private: 
    DECLARE_OBJECT(GLSLShader) 
};  
 
//////////////////////////////////////////////////////////// 
/// 定义引擎GLSL着色程序 
//////////////////////////////////////////////////////////// 
class GLSLProgram : public Object  
{ 
public: 
        //////////////////////////////////////////////////////// 
        /// 构造,析构GL着色程序 
        //////////////////////////////////////////////////////// 
        GLSLProgram(); 
        virtual ~GLSLProgram(); 
   
        //////////////////////////////////////////////////////// 
        /// 链接,卸载着色程序 
        ////////////////////////////////////////////////////////   
        virtual void Attach(const RefPtr<GLSLShader> &shader) = 0; 
    virtual void Detach(const RefPtr<GLSLShader> &shader) = 0; 
         
        //////////////////////////////////////////////////////// 
        /// 链接着色程序 
        ////////////////////////////////////////////////////////         
        virtual bool Link() = 0; 
         
        //////////////////////////////////////////////////////// 
        /// 启用,禁止着色程序 
        ////////////////////////////////////////////////////////                 
        virtual void Begin() const = 0; 
        virtual void End() const = 0; 
 
        //////////////////////////////////////////////////////// 
        /// 设置着色程序参数 
        ////////////////////////////////////////////////////////         
        virtual void SendUniform(const engine_string &name, float x) = 0; 
        virtual void SendUniform(const engine_string &name, float x, float y) = 0; 
        virtual void SendUniform(const engine_string &name, float x, float y, float z) = 0; 
        virtual void SendUniform(const engine_string &name, float x, float y, float z, float w) = 0; 
        virtual void SendUniform(const engine_string &name, int x) = 0; 
        virtual void SendUniform(const engine_string &name, int x, int y) = 0; 
        virtual void SendUniform(const engine_string &name, int x, int y, int z) = 0; 
        virtual void SendUniform(const engine_string &name, int x, int y, int z, int w) = 0; 
        virtual void SendUniform(const engine_string &name, float *m, bool transp = false, int size = 4) = 0; 
 
        //////////////////////////////////////////////////////// 
        /// 设置指定位置的着色程序参数 
        ////////////////////////////////////////////////////////         
        virtual void SendUniform(GLuint location, float x) = 0; 
        virtual void SendUniform(GLuint location, float x, float y) = 0; 
        virtual void SendUniform(GLuint location, float x, float y, float z) = 0; 
        virtual void SendUniform(GLuint location, float x, float y, float z, float w) = 0; 
        virtual void SendUniform(GLuint location, int x) = 0; 
        virtual void SendUniform(GLuint location, int x, int y) = 0; 
        virtual void SendUniform(GLuint location, int x, int y, int z) = 0; 
        virtual void SendUniform(GLuint location, int x, int y, int z, int w) = 0; 
        virtual void SendUniform(GLuint location, float *m, bool transp = false, int size = 4) = 0; 
         
        //////////////////////////////////////////////////////// 
        /// 设置给定索引的顶点属性参数  
        ////////////////////////////////////////////////////////         
    virtual void SendVertexAttrib(GLuint index, int x) = 0;  
    virtual void SendVertexAttrib(GLuint index, int x, int y) = 0;  
    virtual void SendVertexAttrib(GLuint index, int x, int y, int z) = 0;  
    virtual void SendVertexAttrib(GLuint index, int x, int y, int z, int w) = 0;  
         
    virtual void SendVertexAttrib(GLuint index, float x) = 0;  
    virtual void SendVertexAttrib(GLuint index, float x, float y) = 0;  
    virtual void SendVertexAttrib(GLuint index, float x, float y, float z) = 0;  
    virtual void SendVertexAttrib(GLuint index, float x, float y, float z, float w) = 0;   
 
        //////////////////////////////////////////////////////// 
        /// 获取指定参数的位置  
        //////////////////////////////////////////////////////// 
        virtual GLuint GetUniformLocation(const engine_string &name) const = 0; 
        virtual void   SetAttributeLocation(const engine_string &name, GLuint location) = 0; 
        virtual GLuint GetAttributeLocation(const engine_string &name) const = 0; 
 
        //////////////////////////////////////////////////////// 
        /// 获取程序日志  
        //////////////////////////////////////////////////////// 
        virtual void   GetProgramLog(engine_string &log) const = 0; 
         
        //////////////////////////////////////////////////////// 
        /// 获取着色程序句柄  
        ////////////////////////////////////////////////////////         
        virtual GLuint GetHandle() const = 0; 
         
        //////////////////////////////////////////////////////// 
        /// 获取着色器参数  
        ////////////////////////////////////////////////////////         
        virtual void   GetParameter(GLenum param, GLint *data) const = 0; 
         
        //////////////////////////////////////////////////////// 
        /// 着色器合法性检查  
        ////////////////////////////////////////////////////////         
        virtual bool   IsValid() const = 0; 
        virtual bool   IsValidProgram() const = 0; 
        virtual void   GetAttributeInfo(GLuint location, engine_string &name, GLenum &type, GLint &size) const = 0; 
        virtual void   GetUniformInfo(GLuint location, engine_string &name, GLenum &datatype, GLint &size) const = 0; 
        virtual void   GetAttachedShaders(std::vector<GLuint> &shaderhandles) = 0; 
        virtual void   GetAttachedShaders(std::vector<GLSLShader> &shaders) = 0; 
private: 
    DECLARE_OBJECT(GLSLProgram)         
};  
 
 
  
  
  
  
  |   
 
 
 
 |