MIPBase.h
Go to the documentation of this file.
//----------------------------------------------------------------------------//
/*
* Copyright (c) 2009 Sony Pictures Imageworks Inc
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the
* distribution. Neither the name of Sony Pictures Imageworks nor the
* names of its contributors may be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*/
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
#ifndef _INCLUDED_Field3D_MIPBase_H_
#define _INCLUDED_Field3D_MIPBase_H_
#include "Field.h"
#include "MIPUtil.h"
#include "RefCount.h"
#include "Types.h"
//----------------------------------------------------------------------------//
#include "ns.h"
FIELD3D_NAMESPACE_OPEN
//----------------------------------------------------------------------------//
// LazyLoadAction
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
template <class Field_T>
class LazyLoadAction
{
public:
// Typedefs ------------------------------------------------------------------
typedef boost::shared_ptr<LazyLoadAction<Field_T> > Ptr;
typedef std::vector<Ptr> Vec;
virtual ~LazyLoadAction()
{ }
// To be implemented by subclasses -------------------------------------------
virtual typename Field_T::Ptr load() const = 0;
};
//----------------------------------------------------------------------------//
// MIPBase
//----------------------------------------------------------------------------//
//----------------------------------------------------------------------------//
template <class Data_T>
class MIPBase : public Field<Data_T>
{
public:
// Typedefs ------------------------------------------------------------------
typedef boost::intrusive_ptr<MIPBase> Ptr;
// RTTI replacement ----------------------------------------------------------
typedef MIPBase<Data_T> class_type;
DEFINE_FIELD_RTTI_ABSTRACT_CLASS;
static const char *staticClassName()
{
return "MIPBase";
}
static const char* staticClassType()
{
return MIPBase<Data_T>::ms_classType.name();
}
// Constructors --------------------------------------------------------------
MIPBase();
// To be implemented by subclasses -------------------------------------------
virtual Data_T mipValue(size_t level, int i, int j, int k) const = 0;
virtual V3i mipResolution(size_t level) const = 0;
virtual bool levelLoaded(const size_t level) const = 0;
virtual void getVsMIPCoord(const V3f &vsP, const size_t level,
V3f &outVsP) const = 0;
virtual typename Field<Data_T>::Ptr mipLevel(const size_t level) const = 0;
// Main methods --------------------------------------------------------------
void setLowestLevel(size_t level);
size_t lowestLevel() const
{ return m_lowestLevel; }
size_t numLevels() const
{ return m_numLevels; }
void setMIPOffset(const V3i &offset);
const V3i& mipOffset() const
{ return m_mipOffset; }
protected:
// Static data members -------------------------------------------------------
static TemplatedFieldType<MIPBase<Data_T> > ms_classType;
// Typedefs ------------------------------------------------------------------
typedef Field<Data_T> base;
// Data members --------------------------------------------------------------
size_t m_numLevels;
size_t m_lowestLevel;
V3i m_mipOffset;
};
//----------------------------------------------------------------------------//
// MIPBase implementations
//----------------------------------------------------------------------------//
template <typename Data_T>
MIPBase<Data_T>::MIPBase()
: m_numLevels(1), m_lowestLevel(0), m_mipOffset(0)
{
}
//----------------------------------------------------------------------------//
template <typename Data_T>
void MIPBase<Data_T>::setLowestLevel(size_t level)
{
m_lowestLevel = level;
}
//----------------------------------------------------------------------------//
template <typename Data_T>
void MIPBase<Data_T>::setMIPOffset(const V3i &offset)
{
this->metadata().setVecIntMetadata(detail::k_mipOffsetStr, offset);
m_mipOffset = offset;
}
//----------------------------------------------------------------------------//
// Static member initialization
//----------------------------------------------------------------------------//
FIELD3D_CLASSTYPE_TEMPL_INSTANTIATION(MIPBase);
//----------------------------------------------------------------------------//
FIELD3D_NAMESPACE_HEADER_CLOSE
//----------------------------------------------------------------------------//
#endif // Include guard
Field.h
Contains Field, WritableField and ResizableField classes.
FIELD3D_CLASSTYPE_TEMPL_INSTANTIATION
#define FIELD3D_CLASSTYPE_TEMPL_INSTANTIATION(field)
Definition Field.h:479
MIPUtil.h
Contains MIP-related utility functions.
RefCount.h
Contains base class for reference counting with Mutex.
V3i
Imath::V3i V3i
Definition SpiMathLib.h:71
V3f
Imath::V3f V3f
Definition SpiMathLib.h:73
Types.h
Contains typedefs for the commonly used types in Field3D.
FieldBase::metadata
FieldMetadata & metadata()
accessor to the m_metadata class
Definition Field.h:155
Field
Definition Field.h:390
Field::Ptr
boost::intrusive_ptr< Field > Ptr
Definition Field.h:395
LazyLoadAction
Definition MIPBase.h:72
LazyLoadAction::Ptr
boost::shared_ptr< LazyLoadAction< Field_T > > Ptr
Definition MIPBase.h:77
LazyLoadAction::Vec
std::vector< Ptr > Vec
Definition MIPBase.h:78
LazyLoadAction::~LazyLoadAction
virtual ~LazyLoadAction()
Definition MIPBase.h:80
LazyLoadAction::load
virtual Field_T::Ptr load() const =0
Performs the loading of the pre-determined field and returns a pointer to it.
MIPBase
Definition MIPBase.h:117
MIPBase::staticClassType
static const char * staticClassType()
Definition MIPBase.h:135
MIPBase::DEFINE_FIELD_RTTI_ABSTRACT_CLASS
DEFINE_FIELD_RTTI_ABSTRACT_CLASS
Definition MIPBase.h:128
MIPBase::mipOffset
const V3i & mipOffset() const
Returns the base MIP offset.
Definition MIPBase.h:180
MIPBase::m_mipOffset
V3i m_mipOffset
Base coordinate offset. This is used to indicate where voxel space coordinate (0, 0,...
Definition MIPBase.h:204
MIPBase::m_lowestLevel
size_t m_lowestLevel
The lowest MIP level to use. Defaults to 0, but can be set higher to prevent high resolution levels f...
Definition MIPBase.h:199
MIPBase::setLowestLevel
void setLowestLevel(size_t level)
Sets the lowest MIP level to use. Defaults to zero, but can be set higher to prevent high resolution ...
Definition MIPBase.h:222
MIPBase::ms_classType
static TemplatedFieldType< MIPBase< Data_T > > ms_classType
Definition MIPBase.h:187
MIPBase::staticClassName
static const char * staticClassName()
Definition MIPBase.h:130
MIPBase::m_numLevels
size_t m_numLevels
Number of MIP levels. The default is 1.
Definition MIPBase.h:196
MIPBase::levelLoaded
virtual bool levelLoaded(const size_t level) const =0
Whether a given MIP level is loaded.
MIPBase::lowestLevel
size_t lowestLevel() const
Lowest MIP level to use.
Definition MIPBase.h:171
MIPBase::mipLevel
virtual Field< Data_T >::Ptr mipLevel(const size_t level) const =0
Returns a MIP level field.
MIPBase::numLevels
size_t numLevels() const
Number of MIP levels.
Definition MIPBase.h:174
MIPBase::class_type
MIPBase< Data_T > class_type
Definition MIPBase.h:127
MIPBase::mipResolution
virtual V3i mipResolution(size_t level) const =0
Returns the resolution of a given MIP level.
MIPBase::setMIPOffset
void setMIPOffset(const V3i &offset)
Sets the base MIP offset. This is used to indicate where voxel space coordinate (0,...
Definition MIPBase.h:230
MIPBase::Ptr
boost::intrusive_ptr< MIPBase > Ptr
Definition MIPBase.h:123
MIPBase::base
Field< Data_T > base
Definition MIPBase.h:191
MIPBase::MIPBase
MIPBase()
Definition MIPBase.h:213
MIPBase::getVsMIPCoord
virtual void getVsMIPCoord(const V3f &vsP, const size_t level, V3f &outVsP) const =0
Given a voxel space coordinate in the 0-level field, computes the coordinate in another level.
MIPBase::mipValue
virtual Data_T mipValue(size_t level, int i, int j, int k) const =0
Read access to a voxel in a given MIP level.
FIELD3D_NAMESPACE_OPEN
Definition FieldMapping.cpp:74
detail::k_mipOffsetStr
const std::string k_mipOffsetStr
Definition MIPUtil.cpp:66
ns.h
FIELD3D_NAMESPACE_HEADER_CLOSE
#define FIELD3D_NAMESPACE_HEADER_CLOSE
Definition ns.h:58
TemplatedFieldType
Used to return a string for the name of a templated field.
Definition Traits.h:283