Subversion

gpucv

[/] [trunk/] [gpucv/] [src/] [lib/] [GPUCVHardware/] [GlobalSettings.cpp] - Rev 586

Compare with Previous - Blame


//CVG_LicenseBegin==============================================================
//
//	Copyright@ Institut TELECOM 2005
//		http://www.institut-telecom.fr/en_accueil.html
//
//	This software is a GPU accelerated library for computer-vision. It
//	supports an OPENCV-like extensible interface for easily porting OPENCV
//	applications.
//
//	Contacts :
//		patrick.horain@it-sudparis.eu
//		gpucv-developers@picoforge.int-evry.fr
//
//	Project's Home Page :
//		https://picoforge.int-evry.fr/cgi-bin/twiki/view/Gpucv/Web/WebHome
//
//	This software is governed by the CeCILL-B license under French law and
//	abiding by the rules of distribution of free software.  You can  use,
//	modify and/ or redistribute the software under the terms of the CeCILL-B
//	license as circulated by CEA, CNRS and INRIA at the following URL
//	"http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html".
//
//================================================================CVG_LicenseEnd
#include "StdAfx.h"
#include <GPUCVHardware/GlobalSettings.h>
#include <GPUCVHardware/revision.h>
#include <GPUCVHardware/ToolsGL.h>
namespace GCV{

//=================================================
GpuCVSettings::GpuCVSettings()
:CL_Options()
,m_initDone(false)
#if _GPUCV_GL_USE_GLUT
,m_glutDebug(false)
#endif
,m_defaultOptionManager(NULL)
{
        //start logger
        SetLoggingOutput(LoggingToConsole);

        //Default winfows size
        m_windowSize[0] = 512;
        m_windowSize[1] = 512;

        //set default parameters
#if _GPUCV_DEBUG_MODE
        CL_Options::SetOption(GPUCV_SETTINGS_GL_ERROR_CHECK
                | GPUCV_SETTINGS_GLOBAL_DEBUG
                | GPUCV_SETTINGS_GLOBAL_ERROR
                | GPUCV_SETTINGS_GLOBAL_WARNING
                | GPUCV_SETTINGS_GLOBAL_NOTICE
                | GPUCV_SETTINGS_CHECK_SHADER_UPDATE
                , true);
#elif defined(_DEBUG)
        CL_Options::SetOption(GPUCV_SETTINGS_GL_ERROR_CHECK
                | GPUCV_SETTINGS_GLOBAL_DEBUG
                | GPUCV_SETTINGS_GLOBAL_ERROR
                | GPUCV_SETTINGS_GLOBAL_WARNING
                | GPUCV_SETTINGS_GLOBAL_NOTICE
                | GPUCV_SETTINGS_CHECK_SHADER_UPDATE
                |GPUCV_SETTINGS_DEBUG_DATA_TRANSFER
                , true);
#else
        CL_Options::SetOption(
                GPUCV_SETTINGS_GLOBAL_NOTICE
                |GPUCV_SETTINGS_CHECK_IMAGE_ATTRIBS
                , true);
#endif





        //see http://tortoisesvn.net/docs/release/TortoiseSVN_fr/tsvn-subwcrev-example.html for details
        //fields filled by tortoiseSVN and SubWCRev program


        m_Version  = _GPUCV_VERSION_MAJOR;
        m_Revision = SGE::ToCharStr(_GPUCV_REVISION_VAL);
        m_RevisionDate     = _GPUCV_REVISION_DATE;
        m_URLSvn	= _GPUCV_REVISION_URL;
        m_URLHome   = _GPUCV_WEB_URL;
        //generate errors if the
#if _GPUCV_REVISION_MODIFIED
#error Source code has been modified, please commit before updating revision!
#endif
        //char *Modifiee = "$WCMODS?Modifi�e:Pas modifi�e$";
        //char *PlageRev = "$WCRANGE$";
        //char *Melangee  = "$WCMIXED?CdT avec R�visions m�lang�es:Pas m�lang�e$";

        /*if(m_revision.find("WCREV"))
        {
        GPUCV_NOTICE("Current version of GpuCV need to be recompiled with SubWCRev before the release");
        }
        */
}
//=================================================
GpuCVSettings::~GpuCVSettings()
{
#if _GPUCV_GL_USE_GLUT
        //destroy all OpenGL windows
        for(unsigned int i = 0; i < m_GLutWindowsList.size(); i++)
        {
                glutDestroyWindow(m_GLutWindowsList[i]);
        }
#endif
}
//=================================================
void GpuCVSettings::SetShaderPath(const std::string _path)
{
        m_ShaderPath = _path;

        //check that last character is '/' or '\'
#if _WINDOWS
        if(_path.find_last_of("\\") != _path.size() -1)
                m_ShaderPath = _path + "\\";
#else //for LINUX based OS
        if(_path.find_last_of("/") != _path.size() -1)
                m_ShaderPath =  _path + "/";
#endif
        SGE::ReformatFilePath(GetShaderPath());
}
//=================================================
#define GPUCV_SETTINGS_OUTPUT_OPTIONS(OPTION)\
        TempString+= lineStart;\
        TempString+= (GetOption(OPTION))?"1":"0";\
        TempString+= lineMiddle;\
        TempString+= #OPTION;\
        TempString+= "(";\
        TempString+= SGE::ToCharStr(OPTION);\
        TempString+= ")";\
        TempString+= lineEnd;

std::string  GpuCVSettings::GetOptionsDescription(std::string lineStart/*=""*/, std::string lineMiddle/*=""*/,std::string lineEnd/*=""*/)
{
        std::string TempString = lineStart;
        TempString+= "GpuCVSettings values:";
        TempString+= lineEnd;

        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_GL_ERROR_CHECK);
        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_GL_ERROR_RISE_EXCEPTION);
        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_LOAD_ALL_SHADERS);
        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_USE_OPENCV);
        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_GLOBAL_DEBUG);
        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_GLOBAL_ERROR);
        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_GLOBAL_WARNING);
        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_GLOBAL_NOTICE);
        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_CHECK_SHADER_UPDATE);
        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_CHECK_IMAGE_ATTRIBS);
        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_FILTER_DEBUG);
        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_FILTER_SIMULATE);
        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_DEBUG_DATA_TRANSFER);
        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_SYNCHRONIZE_ON_ERROR);
        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_PROFILING);
        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_PROFILING_TRANSFER);
        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_PROFILING_OPER);
        GPUCV_SETTINGS_OUTPUT_OPTIONS(GPUCV_SETTINGS_PROFILING_CLASS);
        return TempString;
}
//=================================================
void GpuCVSettings::SetOption(OPTION_TYPE _opt, bool val)
{
        CL_Options::SetOption(_opt, val);
        //GPUCV_NOTICE(GetGpuCVSettings()->GetOptionsDescription());
}
//=================================================
std::string GpuCVSettings::GetVersionDescription()
{
        std::string TempDesc = "Major version: \t";
        TempDesc+= GetVersion();
        TempDesc+= "\nMinor revision: \t";
        TempDesc+= GetRevision();
        TempDesc+= "\nRelease date: \t";
        TempDesc+=  GetRevisionDate();
        TempDesc+= "\nWeb URL: \t";
        TempDesc+= GetURLHome();

        return TempDesc;
}
//=================================================
std::string GpuCVSettings::ExportToHTMLTable()
{
        std::string TempStr = "<H2>GpuCV description:</H2>";
        TempStr += HTML_OPEN_TABLE;
        TempStr += HTML_OPEN_ROW + std::string("<td width='20%'>Version</td>") + HTML_CELL(GetVersion())+ HTML_CLOSE_ROW;
        TempStr += HTML_OPEN_ROW + HTML_CELL("Revision") + HTML_CELL(GetRevision())+ HTML_CLOSE_ROW;
        TempStr += HTML_OPEN_ROW + HTML_CELL("Date") + HTML_CELL( GetRevisionDate())+ HTML_CLOSE_ROW;
        TempStr += HTML_OPEN_ROW + HTML_CELL("Build mode");
#if _GPUCV_DEBUG_MODE
        TempStr += HTML_CELL("<b>DEBUG, this might affect benchmarks results.</b>")+ HTML_CLOSE_ROW;
#else
        TempStr += HTML_CELL("RELEASE")+ HTML_CLOSE_ROW;
#endif
        std::string BDate = __DATE__;
        BDate+= " - ";
        BDate+= __TIME__;
        TempStr += HTML_OPEN_ROW + HTML_CELL("Build date") + HTML_CELL(BDate)+ HTML_CLOSE_ROW;
        //	TempStr += HTML_OPEN_ROW + HTML_CELL("Revision") + HTML_CELL(GetRevision())+ HTML_CLOSE_ROW;
        TempStr += HTML_OPEN_ROW + HTML_CELL("Options") + HTML_CELL(GetOptionsDescription("", " - ", "<br>"))+ HTML_CLOSE_ROW;
        TempStr += HTML_OPEN_ROW + HTML_CELL("Operating system");
#if defined(_WINDOWS)
        TempStr += HTML_CELL("Ms Windows XP");
#elif defined(_LINUX)
        TempStr += HTML_CELL("LINUX based OS");
#elif defined(_MACOS)
        TempStr += HTML_CELL("Mac OS ?");
#endif
        TempStr += HTML_CLOSE_ROW;
        TempStr += HTML_CLOSE_TABLE;
        return TempStr;
}
//=================================================
const unsigned int * GpuCVSettings::GetWindowSize()const
{
        return m_windowSize;
}
//=================================================
void GpuCVSettings::SetWindowSize(unsigned int _width, unsigned int _height)
{
        m_windowSize[0] = _width;
        m_windowSize[1] = _height;
}
//=================================================
const CL_Profiler	* GpuCVSettings::GetLastExceptionObj()const
{
        if(m_vExceptionParentObjects.size()>0)
                return m_vExceptionParentObjects[m_vExceptionParentObjects.size()-1];
        else
                return NULL;
}
//=================================================
const CL_Profiler	* GpuCVSettings::PushExceptionObj(const CL_Profiler	* _obj)
{
        m_vExceptionParentObjects.push_back(_obj);
        return _obj;
        //m_exceptionParentObject = _obj;
}
//=================================================
const CL_Profiler	* GpuCVSettings::PopExceptionObj()
{
        const CL_Profiler	* lastObj = GetLastExceptionObj();
        if(m_vExceptionParentObjects.size())
                m_vExceptionParentObjects.pop_back();
        return lastObj;
        //m_exceptionParentObject = _obj;
}
//=================================================
#ifdef _WINDOWS
std::ostringstream::_Mystr GpuCVSettings::GetExceptionObjectTree(/*, int nbr = -1*/)const
{
        std::ostringstream _stream;
        for (int i = (int)m_vExceptionParentObjects.size()-1; i >=0; i--)
        {
                GPUCV_NOTICE("========Object[" << i << "]" );
                LogIndentIncrease();
                LogIndentIncrease();
                GPUCV_NOTICE("Object debugging disabled..., GpuCVSettings::GetExceptionObjectTree @ GlobalSettings.cpp:l.254" );
                //m_vExceptionParentObjects[i]->operator << (_stream);
                LogIndentDecrease();
                LogIndentDecrease();
        }
        return _stream.str();
}
#else
std::string GpuCVSettings::GetExceptionObjectTree(/*, int nbr = -1*/)const
{
        return "Warning: GpuCVSettings::GetExceptionObjectTree() is not working yet for Linux!";
}
#endif
#if _GPUCV_GL_USE_GLUT

//=================================================
void GpuCVSettings::EnableGlutDebug()
{
        m_glutDebug = true;
}
//=================================================
bool GpuCVSettings::GetGlutDebug()const
{
        return 	m_glutDebug;
}
//=================================================
void GpuCVSettings :: AddGlutWindowsID(int _ID)
{
        m_GLutWindowsList.push_back(_ID);
}
#endif
//=================================================
bool GpuCVSettings::GetDefaultOption(std::string _objName, CL_Options::OPTION_TYPE & _opt)
{
        CL_OptionStorage * CurObj = m_defaultOptionManager.Find(_objName);
        if(CurObj)
        {
                _opt = CurObj->GetAllOptions();
                return true;
        }
        else
        {
                _opt = 0;
                return false;
        }
}
//=================================================
void GpuCVSettings::SetDefaultOption(std::string _objName, CL_Options::OPTION_TYPE &_opt,  bool _val)
{
        CL_OptionStorage * CurObj = m_defaultOptionManager.Add(_objName);
        if(CurObj)
        {
                CurObj->SetOption(_opt, _val);
        }
}
//=================================================
void GpuCVSettings::ForceAllOptions(std::string _objName, CL_Options::OPTION_TYPE &_opt)
{
        CL_OptionStorage * CurObj = m_defaultOptionManager.Add(_objName);
        if(CurObj)
        {
                CurObj->ForceAllOptions(_opt);
        }
}
//=================================================
const ImplementationDescriptor* GpuCVSettings::RegisterNewImplementation(LibraryDescriptor* _pDllInfos)
{
        SG_Assert(_pDllInfos, "No input DLL informations");

        std::vector<ImplementationDescriptor*>::iterator iterImpl;
        ImplementationDescriptor* pNewImpl = NULL;
        //try to find if current DLL has already been registered
        for(iterImpl = m_vImplementations.begin(); iterImpl != m_vImplementations.end(); iterImpl++)
        {
                if((*iterImpl)->m_baseImplID == _pDllInfos->GetBaseImplementationID()) 
                        if((*iterImpl)->m_strImplName == _pDllInfos->GetImplementationName())
                        {
                                //already done
                                break;
                        }
        }
        if(pNewImpl==NULL)
        {
                //no done yet...
                pNewImpl = new ImplementationDescriptor();
                pNewImpl->m_baseImplID	= _pDllInfos->GetBaseImplementationID();//
                pNewImpl->m_strImplName = _pDllInfos->GetImplementationName();//
                pNewImpl->m_dynImplID	=  m_vImplementations.size();
                m_vImplementations.push_back(pNewImpl);
        }

        //affect implementation to library
        _pDllInfos->SetImplementationDescriptor(pNewImpl);

        return pNewImpl;
}
//=================================================
const ImplementationDescriptor* GpuCVSettings::GetImplementation(const std::string _name)
{
        SG_Assert(_name!="", "Empty implementation name");

        std::vector<ImplementationDescriptor*>::iterator iterImpl;
        ImplementationDescriptor* pNewImpl = NULL;
        //try to find if current DLL has already been registered
        for(iterImpl = m_vImplementations.begin(); iterImpl != m_vImplementations.end(); iterImpl++)
        {
                if((*iterImpl)->m_strImplName == _name) 
                        //already done
                        return (*iterImpl);
        }
        return NULL;//not found
}
//=================================================	
GpuCVSettings * GetGpuCVSettings()
{
        static GpuCVSettings * settings = new GpuCVSettings();
        return settings;
}
//=================================================
}//namespace GCV

Powered by WebSVN v1.61