//-----------------------------------------------------------------------
	bool UnifiedHighLevelGpuProgram::isLoading() const
	{
		if (!_getDelegate().isNull())
			return _getDelegate()->isLoading();
		else
			return false;
	}
	//---------------------------------------------------------------------
	bool UnifiedHighLevelGpuProgram::getPassFogStates(void) const
	{
		if (!_getDelegate().isNull())
			return _getDelegate()->getPassFogStates();
		else
			return HighLevelGpuProgram::getPassFogStates();
	}
	//-----------------------------------------------------------------------
	Resource::LoadingState UnifiedHighLevelGpuProgram::getLoadingState() const
	{
		if (!_getDelegate().isNull())
			return _getDelegate()->getLoadingState();
		else
			return Resource::LOADSTATE_UNLOADED;
	}
	//-----------------------------------------------------------------------
	GpuProgramParametersSharedPtr UnifiedHighLevelGpuProgram::getDefaultParameters(void)
	{
		if (!_getDelegate().isNull())
			return _getDelegate()->getDefaultParameters();
		else
			return GpuProgramParametersSharedPtr();
	}
	//-----------------------------------------------------------------------
	bool UnifiedHighLevelGpuProgram::hasDefaultParameters(void) const
	{
		if (!_getDelegate().isNull())
			return _getDelegate()->hasDefaultParameters();
		else
			return false;
	}
	//-----------------------------------------------------------------------
	bool UnifiedHighLevelGpuProgram::isPoseAnimationIncluded(void) const
	{
		if (!_getDelegate().isNull())
			return _getDelegate()->isPoseAnimationIncluded();
		else
			return false;
	}
	//-----------------------------------------------------------------------
	bool UnifiedHighLevelGpuProgram::isVertexTextureFetchRequired(void) const
	{
		if (!_getDelegate().isNull())
			return _getDelegate()->isVertexTextureFetchRequired();
		else
			return false;
	}
	//-----------------------------------------------------------------------
	size_t UnifiedHighLevelGpuProgram::getSize(void) const
	{
		if (!_getDelegate().isNull())
			return _getDelegate()->getSize();
		else
			return 0;
	}
	//-----------------------------------------------------------------------
	GpuProgram* UnifiedHighLevelGpuProgram::_getBindingDelegate(void)
	{
		if (!_getDelegate().isNull())
			return _getDelegate()->_getBindingDelegate();
		else
			return 0;
	}
	//-----------------------------------------------------------------------
	bool UnifiedHighLevelGpuProgram::isBackgroundLoaded(void) const
	{
		if (!_getDelegate().isNull())
			return _getDelegate()->isBackgroundLoaded();
		else
			return false;
	}
	//-----------------------------------------------------------------------
	bool UnifiedHighLevelGpuProgram::isReloadable(void) const
	{
		if (!_getDelegate().isNull())
			return _getDelegate()->isReloadable();
		else
			return true;
	}
 //-----------------------------------------------------------------------
 ushort UnifiedHighLevelGpuProgram::getNumberOfPosesIncluded(void) const
 {
     if (!_getDelegate().isNull())
         return _getDelegate()->getNumberOfPosesIncluded();
     else
         return 0;
 }
	//-----------------------------------------------------------------------
	bool UnifiedHighLevelGpuProgram::hasCompileError(void) const
	{
		if (_getDelegate().isNull())
		{
			return false;
		}
		else
		{
			return _getDelegate()->hasCompileError();
		}
	}
	//-----------------------------------------------------------------------
	GpuProgramParametersSharedPtr UnifiedHighLevelGpuProgram::createParameters(void)
	{
		if (isSupported())
		{
			return _getDelegate()->createParameters();
		}
		else
		{
			// return a default set
			GpuProgramParametersSharedPtr params = GpuProgramManager::getSingleton().createParameters();
			// avoid any errors on parameter names that don't exist
			params->setIgnoreMissingParams(true);
			return params;
		}
	}
	//-----------------------------------------------------------------------
	void UnifiedHighLevelGpuProgram::setBackgroundLoaded(bool bl)
	{
		if (!_getDelegate().isNull())
			_getDelegate()->setBackgroundLoaded(bl);
	}
	//-----------------------------------------------------------------------
	void UnifiedHighLevelGpuProgram::touch(void)
	{
		if (!_getDelegate().isNull())
			_getDelegate()->touch();
	}
	//-----------------------------------------------------------------------
	bool UnifiedHighLevelGpuProgram::isSupported(void) const
	{
		// Supported if one of the delegates is
		return !(_getDelegate().isNull());
	}
	//-----------------------------------------------------------------------
	void UnifiedHighLevelGpuProgram::escalateLoading()
	{
		if (!_getDelegate().isNull())
			_getDelegate()->escalateLoading();
	}
 //-----------------------------------------------------------------------
 void UnifiedHighLevelGpuProgram::reload(LoadingFlags flags)
 {
     if (!_getDelegate().isNull())
         _getDelegate()->reload(flags);
 }
	//-----------------------------------------------------------------------
	void UnifiedHighLevelGpuProgram::unload(void)
	{
		if (!_getDelegate().isNull())
			_getDelegate()->unload();
	}
	//-----------------------------------------------------------------------
	void UnifiedHighLevelGpuProgram::load(bool backgroundThread)
	{
		if (!_getDelegate().isNull())
			_getDelegate()->load(backgroundThread);
	}
	//-----------------------------------------------------------------------
	void UnifiedHighLevelGpuProgram::removeListener(Resource::Listener* lis)
	{
		if (!_getDelegate().isNull())
			_getDelegate()->removeListener(lis);
	}
	//-----------------------------------------------------------------------
	void UnifiedHighLevelGpuProgram::resetCompileError(void)
	{
		if (!_getDelegate().isNull())
			_getDelegate()->resetCompileError();
	}