#ifndef QGLSLSHADER_H #define QGLSLSHADER_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include //QT_FORWARD_DECLARE_CLASS(QOpenGLTexture) //QT_FORWARD_DECLARE_CLASS(QOpenGLShader) QT_FORWARD_DECLARE_CLASS(QOpenGLShaderProgram) namespace SOPENGL { class QGLSLShader : protected QOpenGLFunctions { public: QGLSLShader(); virtual ~QGLSLShader(); qreal GetAngle(); qreal GetScale(); QVector GetVertices(); QVector GetNormals(); virtual void CreateShader(const char* pSrcVShader, const char* pSrcFShader); virtual void CreateTexture(int nWidth, int nHeight, QOpenGLTexture::Target target, QOpenGLTexture::TextureFormat format); void Bind(); void Release(); virtual void SetUniformValue(); virtual void EnableAttributeArray(); virtual void SetAttributeBuffer(); virtual void DisableAttributeArray(); virtual void BindTexture(); virtual void ReleaseTexture(); virtual void Translate(float fX, float fY, float fZ); QOpenGLTexture *GetTexture(); virtual void CreateGeometry(); virtual void Quad(qreal x1, qreal y1, qreal x2, qreal y2, qreal x3, qreal y3, qreal x4, qreal y4); protected: qreal m_fAngle; qreal m_fScale; QVector m_Vertices; QVector m_Normals; QOpenGLShader* m_pVShader; QOpenGLShader* m_pFShader; QOpenGLShaderProgram* m_pProgram; int m_AttrVertex; int m_AttrNormal; int m_AttrTexCoord; int m_UniformMatrix; int m_UniformVideoTexture; int m_nTextureWidth; int m_nTextureHeight; QOpenGLTexture* m_pVideoTexture; QOpenGLBuffer m_VBO; }; } #endif // QGLSLSHADER_H