Subversion

gpucv

[/] [experimental/] [trunk/] [gpucv/] [src/] [lib/] [GPUCVTexture/] [TextureRenderBuffer.cpp] - Rev 271 Go to most recent revision

Compare with Previous - Blame


#include <GPUCVTexture/TextureRenderBuffer.h>
#include <GPUCVTexture/DataDsc_GLTex.h>


#if _GPUCV_DEBUG_MEMORY_LEAK
        #include "SugoiTools/debug_new.h"
#endif 

#define BUFFER_OFFSET(i) ((char *)NULL + (i)) //for PBO
//#define _RENDER_BUFFER_DEBUG_VERBOSE

#ifdef _RENDER_BUFFER_DEBUG_VERBOSE
        #define __Fct_RB_START(FctName){\
        printf("->%s Start\n", FctName);\
        }

        #define __Fct_RB_STOP(FctName){\
        printf("->%s Stop\n", FctName);\
        }
#else
         #define __Fct_RB_START(FctName)
         #define __Fct_RB_STOP(FctName)
#endif


TextureRenderBuffer * TextureRenderBuffer::MainRenderer = NULL;
//=================================================
TextureRenderBuffer::TextureRenderBuffer(bool verbose/*=false*/)
        :m_textID(NULL)
        ,m_textureGrp(NULL)
{
}
//=================================================
TextureRenderBuffer::~TextureRenderBuffer()
{
}
//=================================================
/*virtual*/
TextureRenderBuffer::RENDER_OBJ_TYPE 
TextureRenderBuffer::GetType()
        {return m_type;}
//=================================================
void TextureRenderBuffer::SetValues(DataDsc_GLTex * _tex)
{
        if(_tex)
                SetValues(_tex, _tex->_GetWidth(), _tex->_GetHeight());
        else
                SetValues(NULL, 0, 0);

}
//=================================================
void TextureRenderBuffer::SetValues(DataDsc_GLTex * _tex,int _width, int _height)
{
        m_textID =_tex;
        if(_tex)
        {
                m_width		= _width;
                m_height	= _height;
                
                //DataDsc_GLTex * GLtex = _tex->GetDataDsc<DataDsc_GLTex>();
                SG_Assert(MainGPU()->m_glExtension.CheckAttachmentFormat(_tex->_GetInternalPixelFormat(),  _tex->_GetColorAttachment()),
                        "Color attachment mismatch with texture internal format");			
        }
        else
        {
                m_width		= 0;
                m_height	= 0;
        }
}	
//=================================================
/*virtual*/
void TextureRenderBuffer::GetResult(DataDsc_GLTex * _tex)
{
          SetValues(_tex);
         GetResult();
}
//=================================================
/*virtual*/
bool TextureRenderBuffer::InitRenderBuff()
{//nothing to to...
        return true;
}
//=================================================
/*virtual */
void TextureRenderBuffer::SetContext		(DataDsc_GLTex * _tex)
{
        SG_Assert(_tex, "No DataContainer");
        SetContext(_tex, _tex->_GetWidth(), _tex->_GetHeight());
}
//=================================================
void TextureRenderBuffer::SetContext		(DataDsc_GLTex * _tex, int _width, int _height)
{
        SG_Assert(_tex, "No DataContainer");
        SetValues(_tex, _width, _height);
}
//=================================================
/*virtual*/
int  TextureRenderBuffer::SetContext(TextureGrp * _grp, int _width, int _height)
{
        SG_Assert(0,"TextureRenderBuffer::SetContext() not supported yet by default TextureRenderBuffer.");
        return 0;
}
//=================================================
/*virtual*/
void TextureRenderBuffer::UnSetContext	()
{
        m_textID=NULL;
        m_textureGrp=NULL;
        SetValues(NULL);
}	
//=================================================
/*virtual*/
void TextureRenderBuffer::Force(DataDsc_GLTex * _tex)
{
        SG_Assert(_tex, "No DataContainer");
        Force(_tex, _tex->_GetWidth(), _tex->_GetHeight());
}
//=================================================
void TextureRenderBuffer::Force(DataDsc_GLTex * _tex, int _width, int _height)
{
        SG_Assert(_tex, "No DataContainer");
        SetValues(_tex, _width, _height);
}
//=================================================
int  TextureRenderBuffer::Force(TextureGrp * _grp)
{
        SG_Assert(_grp, "No texture group");
        DataDsc_GLTex * DDGLTex= _grp->operator [](0)->GetDataDsc<DataDsc_GLTex>();
        Force(_grp, DDGLTex->_GetWidth(),DDGLTex->_GetHeight());
        SG_Assert(0,"TextureRenderBuffer::Force() not supported yet by default TextureRenderBuffer.");
        return 0;
}
//=================================================
int  TextureRenderBuffer::Force(TextureGrp * _grp, int _width, int _height)
{
        SG_Assert(0,"TextureRenderBuffer::Force() not supported yet by default TextureRenderBuffer.");
        return 0;
}
//=================================================
/*virtual*/
void TextureRenderBuffer::UnForce(void)
{
        m_textID=NULL;
        m_textureGrp=NULL;
        SetValues(0);
}
//=================================================
/*virtual*/
int  TextureRenderBuffer::IsForced(void)
{
        if (m_textID)
                return true;
        else
                return false;
}
//=================================================
/*virtual*/
void TextureRenderBuffer::GetResult(void)
{
                _GPUCV_GL_ERROR_TEST();
        //DataDsc_GLTex * GLtex = m_textID->GetDataDsc<DataDsc_GLTex>();
        glCopyTexImage2D(m_textID->_GetTexType(),
                        0, 
                        m_textID->GetPixelFormat(),
                        0, 0,
                        m_textID->_GetWidth(),
                        m_textID->_GetHeight(),
                        0);
                _GPUCV_GL_ERROR_TEST();

}
//=================================================
/*virtual*/
GPUCV_TEXT_TYPE TextureRenderBuffer::SelectInternalTexture(RENDER_INTERNAL_OBJ _InternTextID)
{
        GPUCV_WARNING("TextureRenderBuffer::SelectInternalTexture()=> Fct not supported");
        return NULL;
}
//=================================================
/*static*/
TextureRenderBuffer * 
        TextureRenderBuffer::GetMainRenderer()
        {return MainRenderer;}
//=================================================
/*static*/
TextureRenderBuffer * 
        TextureRenderBuffer::SetMainRenderer(TextureRenderBuffer * _Renderer)
        {return MainRenderer = _Renderer;}	
//=================================================
void TextureRenderBuffer::PushAttribs()
{
        getGLContext()->PushAttribs();
}
//=================================================
void TextureRenderBuffer::PopAttribs()
{
        getGLContext()->PopAttribs();

}
//=================================================
bool TextureRenderBuffer::IsTextureBinded(DataDsc_GLTex* _tex)
{
        if(m_textID)
                if(_tex == m_textID)
                        return true;
        if(m_textureGrp)
                if(m_textureGrp->IsTextureInGroup(_tex->GetParent()))
                        return true;
        return false;	
}
//=================================================
#if _GPUCV_DEBUG_MEMORY_LEAK
        #include "SugoiTools/debug_new_off.h"
#endif


Powered by WebSVN v1.61