#include "qvideoshader.h"
using namespace SOPENGL;

#include "common.h"

QVideoShader::QVideoShader()
{

}

QVideoShader::~QVideoShader()
{
    SAFE_DELETE(m_pVideoTexture);
}

void QVideoShader::CreateShader(const char *pSrcVShader, const char *pSrcFShader)
{
    QGLSLShader::CreateShader(pSrcVShader, pSrcFShader);

    m_ImageWidth = m_pProgram->uniformLocation("nImageWidth");
    m_ImageHeight = m_pProgram->uniformLocation("nImageHeight");
    m_nDisplayType = m_pProgram->uniformLocation("nDisplayType");
}

void QVideoShader::CreateTexture(int nWidth, int nHeight, QOpenGLTexture::Target target, QOpenGLTexture::TextureFormat format)
{
    m_nTextureWidth = nWidth;
    m_nTextureHeight = nHeight;
    m_pVideoTexture = new QOpenGLTexture(target);
    //m_pVideoTexture->setMinificationFilter(QOpenGLTexture::LinearMipMapLinear);
    //m_pVideoTexture->setMagnificationFilter(QOpenGLTexture::Linear);
    m_pVideoTexture->create();
    m_pVideoTexture->setFormat(format);
    m_pVideoTexture->setSize(nWidth, nHeight);
    m_pVideoTexture->allocateStorage();

}

void QVideoShader::SetUniformValue()
{
    QGLSLShader::SetUniformValue();

    m_pProgram->setUniformValue(m_ImageWidth, m_nTextureWidth);
    m_pProgram->setUniformValue(m_ImageHeight, m_nTextureHeight);
    m_pProgram->setUniformValue(m_nDisplayType, 0);

    m_pVideoTexture->setMinMagFilters(QOpenGLTexture::LinearMipMapLinear, QOpenGLTexture::LinearMipMapLinear);
}

