#include <GPUCVTexture/Texture.h>
#include <GPUCVTexture/DataDsc_base.h>
//==================================================
DataDsc_Base::DataDsc_Base()
:CL_Profiler("DataDsc_Base")
,TextSize<GLsizei>()
,m_dscType("DataDsc_Base")
,m_glPixelFormat(0)
,m_glPixelType(0)
,m_nChannels(0)
,m_nChannelsBackup(0)
,m_parent(NULL)
,m_haveData(false)
{
}
//==================================================
DataDsc_Base::DataDsc_Base(const std::string _className)
:CL_Profiler(_className)
,TextSize<GLsizei>()
,m_dscType(_className)
,m_glPixelFormat(0)
,m_glPixelType(0)
,m_nChannels(0)
,m_nChannelsBackup(0)
,m_parent(NULL)
,m_haveData(false)
{
}
//==================================================
DataDsc_Base::~DataDsc_Base(void)
{
CLASS_FCT_SET_NAME("~DataDsc_Base");
CLASS_DEBUG("");
Free();
}
//==================================================
/*virtual*/
const std::string DataDsc_Base::GetValStr()const
{
if(GetParent())
return GetParent()->GetValStr();
else
return "NOID";
}
//==================================================
const std::string & DataDsc_Base::GetDscType(void)const
{
return m_dscType;
}
//==================================================
/*virtual*/
bool DataDsc_Base::HaveData()const
{
return m_haveData;
}
//==================================================
/*virtual*/
void DataDsc_Base::SetDataFlag(bool _val)
{
CLASS_FCT_SET_NAME("SetDataFlag");
if(m_haveData != _val)
{
CLASS_DEBUG(((_val)?"obtained data":"lost data"));
}
m_haveData = _val;
}
//==================================================
/*virtual*/
DataDsc_Base * DataDsc_Base::Clone(DataDsc_Base * _src, bool _datatransfer/*=true*/)
{
TransferFormat(_src);
m_dscType = _src->m_dscType;
SetParent(_src->GetParent());
SetDataFlag(_src->HaveData());
//GetParent()->SetDataFlag<DataDsc_CvMat>(true,false);??
return this;
}
//==================================================
/*virtual*/
DataDsc_Base * DataDsc_Base::CloneToNew(bool _datatransfer/*=true*/)
{
DataDsc_Base * TempTex = new DataDsc_Base();
return TempTex->Clone(this, _datatransfer);
}
//==================================================
/*virtual*/
void DataDsc_Base::SetFormat(const GLuint _pixelFormat,const GLuint _pixelType)
{
m_glPixelFormat = _pixelFormat;
m_glPixelType = _pixelType;
m_nChannels = GetGLNbrComponent(_pixelFormat);
ConvertPixelFormat_GLToLocal(_pixelFormat);
ConvertPixelType_GLToLocal(_pixelType);
}
//==================================================
GLuint DataDsc_Base::GetPixelFormat()const
{
return m_glPixelFormat;
}
//==================================================
GLuint DataDsc_Base::GetPixelType()const
{
return m_glPixelType;
}
//==================================================
GLuint DataDsc_Base::GetnChannels()const
{
return m_nChannels;
}
//==================================================
/*virtual*/
void DataDsc_Base::TransferFormat(DataDsc_Base * _src)
{
SetFormat(_src->GetPixelFormat(), _src->GetPixelType());
m_width = _src->m_width;
m_height = _src->m_height;
}
//==================================================
void DataDsc_Base::SetParent(DataContainer* _parent)
{
m_parent = _parent;
}
//==================================================
DataContainer * DataDsc_Base::GetParent()const
{
return m_parent;
}
//==================================================
/*virtual*/
void * DataDsc_Base::GetNewParentID()const
{
return NULL;
}
//==================================================
DataDsc_Base::operator DataContainer*()
{
return GetParent();
}
//==================================================
DataDsc_Base::operator DataContainer&()
{
return *GetParent();
}
//==================================================
/*virtual*/
void DataDsc_Base::ConvertPixelFormat_GLToLocal(const GLuint _pixelFormat)
{
//m_glPixelFormat = _pixelFormat;
}
//==================================================
/*virtual*/
GLuint DataDsc_Base::ConvertPixelFormat_LocalToGL(void)
{
return m_glPixelFormat;
}
//==================================================
/*virtual*/
void DataDsc_Base::ConvertPixelType_GLToLocal(const GLuint _pixelType)
{
//m_glPixelType = _pixelType;
}
//==================================================
/*virtual*/
GLuint DataDsc_Base::ConvertPixelType_LocalToGL()
{
return m_glPixelType;
}
//==================================================
/*GLuint DataDsc_Base::_GetWidth()
{
return _GetWidth();
}
//==================================================
GLuint DataDsc_Base::_GetHeight()
{
return _GetHeight();
}*/
void DataDsc_Base::_SetSize(const unsigned int width, const unsigned int heigh)
{
if (m_width != int(width) || m_height != int(heigh))
{
// _SetReloadFlag(true);//must be reloaded.
}
else
return;
SG_Assert(width <= _GPUCV_TEXTURE_MAX_SIZE_X, "DataContainer::SetSize()=> Texture width exceed Max size of " << _GPUCV_TEXTURE_MAX_SIZE_X);
SG_Assert(heigh <= _GPUCV_TEXTURE_MAX_SIZE_Y, "DataContainer::SetSize()=> Texture heigh exceed Max size of " << _GPUCV_TEXTURE_MAX_SIZE_Y);
TextSize<GLsizei>::_SetSize(width,heigh);
#if !USE_DATA_DSC
_UpdateTexCoord();
#endif
}
//==================================================
void DataDsc_Base::SetReshape(int new_cn, int new_rows/*=0*/)
{
CLASS_FCT_SET_NAME("SetReshape");
m_nChannelsBackup = m_nChannels;
m_nChannels = new_cn;
if(new_rows==0)
{
if(IS_MULTIPLE_OF(m_width * m_nChannelsBackup, new_cn))
m_width = m_width * m_nChannelsBackup / new_cn;
else
{
CLASS_WARNING("Reshape don't fit => doing nothing!");
}
}
}
//==================================================
void DataDsc_Base::UnsetReshape()
{
if(m_nChannelsBackup!=0)
{
m_width = m_width / m_nChannelsBackup * m_nChannels;
m_nChannels = m_nChannelsBackup;
m_nChannelsBackup = 0;
}
}
//==================================================
GLuint DataDsc_Base::_GetNChannels()
{
return m_nChannels;
}
//==================================================
void DataDsc_Base::_SetNChannels(GLuint _channels)
{
m_nChannels = _channels;
}
//==================================================
GLuint DataDsc_Base::GetDataSize(void)const
{
return _GetWidth()*_GetHeight()*GetGLPixelSize(GetPixelFormat(), GetPixelType());
}
//==================================================
/*virtual*/
std::ostringstream & DataDsc_Base::operator << (std::ostringstream & _stream)const
{
_stream << _GPUCV_INDENT_ <<"======================================" << std::endl;
_stream << _GPUCV_INDENT_ <<"DataDsc_Base==============" << std::endl;
if(m_parent)
_stream << _GPUCV_INDENT_ <<"m_parent => " << m_parent->GetValStr() << std::endl; _stream << "Parent ID:" << GetValStr() << std::endl;
//_stream << "DataDsc_Base::m_dscType => " << m_dscType << std::endl;
_stream << _GPUCV_INDENT_ <<"m_glPixelFormat: \t" << GetStrGLTextureFormat(m_glPixelFormat) << std::endl;
_stream << _GPUCV_INDENT_ <<"m_glPixelType: \t" << GetStrGLTexturePixelType(m_glPixelType) << std::endl;
_stream << _GPUCV_INDENT_ <<"m_nChannels: \t" << m_nChannels << std::endl;
_stream << _GPUCV_INDENT_ <<"m_nChannelsBackup: \t" << m_nChannelsBackup << std::endl;
_stream << _GPUCV_INDENT_ <<"size: \t" << m_width << "/" << m_height << std::endl;
_stream << _GPUCV_INDENT_ <<"Data Size: \t" << GetDataSize() << std::endl;
_stream << _GPUCV_INDENT_ <<"m_haveData: \t" << m_haveData << std::endl;
_stream << _GPUCV_INDENT_ <<"DataDsc_Base==============" << std::endl;
return _stream;
}
//==================================================
std::ostringstream & operator << (std::ostringstream & _stream, const DataDsc_Base & TexDsc)
{
return TexDsc.operator << (_stream);
}
//==================================================
/*
virtual std::string DataDsc_Base::LogException(void)
{
std::string Msg = CL_Profiler::LogException();
std::ostringstream stream;
this->operator << (stream);
Msg += stream.str
}
*/
//==================================================
|