Ion
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ion::gfx::Texture Class Reference

A Texture object represents the image data and mipmaps associated with a single texture. More...

#include "texture.h"

Inheritance diagram for ion::gfx::Texture:
Collaboration diagram for ion::gfx::Texture:

Public Types

enum  Changes {
  kSubImageChanged = TextureBase::kNumChanges,
  kMipmapChanged,
  kNumChanges = kMipmapChanged + kMipmapSlotCount
}
 Changes that affect this resource. More...
 
enum  Swizzle {
  kRed,
  kGreen,
  kBlue,
  kAlpha
}
 
enum  TextureType {
  kCubeMapTexture,
  kTexture
}
 
enum  BaseChanges {
  kLabelChanged,
  kResourceChanged,
  kNumBaseChanges
}
 All ResourceHolders derived from this should start their own change enums from kNumBaseChanges. More...
 

Public Member Functions

 Texture ()
 Texture. More...
 
void SetImage (size_t level, const ImagePtr &image)
 See comments in TextureBase::Face. More...
 
bool HasImage (size_t level) const
 
const ImagePtr GetImage (size_t level) const
 
size_t GetImageCount () const
 
void SetSubImage (size_t level, const math::Point2ui offset, const ImagePtr &image)
 
void SetSubImage (size_t level, const math::Point3ui offset, const ImagePtr &image)
 
const base::AllocVector
< SubImage > & 
GetSubImages () const
 
void ClearSubImages () const
 
void SetSampler (const SamplerPtr &sampler)
 Sets/returns the Sampler to use for this. This is NULL by default. More...
 
const SamplerPtrGetSampler () const
 
void SetImmutableImage (const ImagePtr &image, size_t levels)
 Sets this texture to be fully allocated and made immutable by OpenGL, in the sense that it cannot change size or its number of mipmap levels. More...
 
const ImagePtrGetImmutableImage () const
 
size_t GetImmutableLevels () const
 Returns the number of immutable mipmap levels used by this texture. More...
 
void SetBaseLevel (int level)
 Sets/returns the index of the lowest mipmap level to use when rendering. More...
 
int GetBaseLevel () const
 
void SetMaxLevel (int level)
 Sets/returns the index of the highest mipmap level to use when rendering. More...
 
int GetMaxLevel () const
 
void SetSwizzleRed (Swizzle r)
 Sets/returns the color component to use when the color channels of a texture are used in a shader. More...
 
Swizzle GetSwizzleRed () const
 
void SetSwizzleGreen (Swizzle g)
 
Swizzle GetSwizzleGreen () const
 
void SetSwizzleBlue (Swizzle b)
 
Swizzle GetSwizzleBlue () const
 
void SetSwizzleAlpha (Swizzle a)
 
Swizzle GetSwizzleAlpha () const
 
void SetSwizzles (Swizzle r, Swizzle g, Swizzle b, Swizzle a)
 Sets all swizzles at once. More...
 
TextureType GetTextureType () const
 Returns what type of texture that this is. More...
 
void SetMultisampling (int samples, bool fixed_sample_locations)
 Enables/disables and sets parameters for texture multisampling. More...
 
int GetMultisampleSamples () const
 
bool IsMultisampleFixedSampleLocations () const
 
void SetResource (size_t index, ResourceKey key, ResourceBase *resource) const
 Sets the resource at the passed index and key. More...
 
ResourceBaseGetResource (size_t index, ResourceKey key) const
 Returns the Resource at the given index and key, or NULL if no resource was previously set at that location. More...
 
int GetResourceCount () const
 Returns the number of resources that this holder holds. More...
 
size_t GetGpuMemoryUsed () const
 Returns the total amount of GPU memory used by this Holder's resource. More...
 
const std::string & GetLabel () const
 Returns/sets the label of this. More...
 
void SetLabel (const std::string &label)
 
void AddReceiver (Notifier *receiver)
 Adds a Notifier to be notified. More...
 
void RemoveReceiver (Notifier *receiver)
 Removes a Notifier to be notified. More...
 
size_t GetReceiverCount () const
 Returns the number of Notifiers that will be notified. More...
 
const AllocatorPtr & GetAllocator () const
 Returns the Allocator that was used for the instance. More...
 
const AllocatorPtr & GetNonNullAllocator () const
 Return our allocator, or the default allocator if the instance was declared on the stack. More...
 
const AllocatorPtr & GetAllocatorForLifetime (AllocationLifetime lifetime) const
 Convenience function that returns the Allocator to use to allocate an object with a specific lifetime. More...
 
void * operator new (size_t size)
 The standard no-parameter new operator uses the default Allocator. More...
 
void * operator new (size_t size, AllocationLifetime lifetime)
 This overloaded version of the new operator uses the AllocationManager's default Allocator for the specified lifetime. More...
 
void * operator new (size_t size, const AllocatorPtr &allocator)
 This overloaded version of the new operator takes the Allocator to use directly as a parameter. More...
 
void * operator new (size_t size, const AllocatorPtr &allocator, void *ptr)
 Special operator new for using placement new with Allocatables. More...
 
void * operator new (size_t size, void *ptr)
 The placement new operator is defined conventionally. More...
 
void operator delete (void *ptr)
 Define the delete operator to use specialized functions dealing with an Allocator. More...
 
void operator delete (void *ptr, AllocationLifetime lifetime)
 Windows requires these (or it issues C4291 warnings). More...
 
void operator delete (void *ptr, const AllocatorPtr &allocator)
 
void operator delete (void *ptr, void *ptr2)
 The placement delete operator does nothing, as usual. More...
 
int GetRefCount () const
 GetRefCount() is part of the interface necessary for SharedPtr. More...
 

Static Public Member Functions

static bool ExpectedDimensionsForMipmap (const uint32 mipmap_width, const uint32 mipmap_height, const uint32 mipmap_level, const uint32 base_width, const uint32 base_height, uint32 *expected_width, uint32 *expected_height)
 Tests mipmap dimensions to see that they are proportional and in range with respect to base_width and base_height. More...
 

Protected Types

typedef WeakReferentPtr< NotifierNotifierPtr
 
typedef AllocVector< NotifierPtrNotifierPtrVector
 

Protected Member Functions

 ~Texture () override
 The destructor is protected because all base::Referent classes must have protected or private destructors. More...
 
void OnChanged (int bit) const
 Forwards OnChanged to all resources. More...
 
const NotifierPtrVectorGetReceivers () const
 Returns the set of Notifiers that will be notified. More...
 
void Notify () const
 Notifies all contained Notifiers by calling their OnNotify(). More...
 

Detailed Description

A Texture object represents the image data and mipmaps associated with a single texture.

Definition at line 264 of file texture.h.

Member Typedef Documentation

Definition at line 49 of file notifier.h.

typedef AllocVector<NotifierPtr> ion::base::Notifier::NotifierPtrVector
protectedinherited

Definition at line 50 of file notifier.h.

Member Enumeration Documentation

All ResourceHolders derived from this should start their own change enums from kNumBaseChanges.

Enumerator
kLabelChanged 
kResourceChanged 
kNumBaseChanges 

Definition at line 56 of file resourceholder.h.

Changes that affect this resource.

Enumerator
kSubImageChanged 
kMipmapChanged 

kMipmapChanged must be last since it is a range of slots.

kNumChanges 

Definition at line 267 of file texture.h.

Enumerator
kRed 
kGreen 
kBlue 
kAlpha 

Definition at line 78 of file texture.h.

Enumerator
kCubeMapTexture 
kTexture 

Definition at line 85 of file texture.h.

Constructor & Destructor Documentation

ion::gfx::Texture::Texture ( )

Texture.

Definition at line 135 of file texture.cc.

ion::gfx::Texture::~Texture ( )
overrideprotected

The destructor is protected because all base::Referent classes must have protected or private destructors.

Definition at line 208 of file texture.cc.

References ion::base::SharedPtr< T >::Get(), ion::gfx::TextureBase::Face::GetImage(), and image.

Member Function Documentation

void ion::base::Notifier::AddReceiver ( Notifier receiver)
inherited

Adds a Notifier to be notified.

Does nothing if the receiver is NULL or is already in the receiver vector.

Definition at line 25 of file notifier.cc.

void ion::gfx::Texture::ClearSubImages ( ) const
inline

Definition at line 305 of file texture.h.

bool ion::gfx::Texture::ExpectedDimensionsForMipmap ( const uint32  mipmap_width,
const uint32  mipmap_height,
const uint32  mipmap_level,
const uint32  base_width,
const uint32  base_height,
uint32 *  expected_width,
uint32 *  expected_height 
)
static

Tests mipmap dimensions to see that they are proportional and in range with respect to base_width and base_height.

Definition at line 140 of file texture.cc.

References ion::port::ERROR, LOG, and ion::math::Log2().

const AllocatorPtr& ion::base::Allocatable::GetAllocator ( ) const
inlineinherited

Returns the Allocator that was used for the instance.

This will be NULL if the instance was declared on the stack or created with normal placement new.

Definition at line 68 of file allocatable.h.

References allocator_.

Referenced by ion::base::DataContainer::CreateAndCopy(), ion::text::DynamicFontImage::FindContainingImageDataIndex(), and ion::text::DynamicFontImage::FindImageDataIndex().

const AllocatorPtr& ion::base::Allocatable::GetAllocatorForLifetime ( AllocationLifetime  lifetime) const
inlineinherited
int ion::gfx::TextureBase::GetBaseLevel ( ) const
inlineinherited

Definition at line 115 of file texture.h.

size_t ion::gfx::ResourceHolder::GetGpuMemoryUsed ( ) const
inlineinherited

Returns the total amount of GPU memory used by this Holder's resource.

Definition at line 78 of file resourceholder.h.

const ImagePtr ion::gfx::Texture::GetImage ( size_t  level) const
inline

Definition at line 288 of file texture.h.

size_t ion::gfx::Texture::GetImageCount ( ) const
inline

Definition at line 291 of file texture.h.

const ImagePtr& ion::gfx::TextureBase::GetImmutableImage ( ) const
inlineinherited

Definition at line 107 of file texture.h.

References ion::base::SharedPtr< T >::Get().

size_t ion::gfx::TextureBase::GetImmutableLevels ( ) const
inlineinherited

Returns the number of immutable mipmap levels used by this texture.

Returns 0 if there is no immutable image.

Definition at line 110 of file texture.h.

const std::string& ion::gfx::ResourceHolder::GetLabel ( ) const
inlineinherited

Returns/sets the label of this.

Definition at line 89 of file resourceholder.h.

int ion::gfx::TextureBase::GetMaxLevel ( ) const
inlineinherited

Definition at line 120 of file texture.h.

int ion::gfx::TextureBase::GetMultisampleSamples ( ) const
inlineinherited

Definition at line 154 of file texture.h.

const AllocatorPtr& ion::base::Allocatable::GetNonNullAllocator ( ) const
inlineinherited

Return our allocator, or the default allocator if the instance was declared on the stack.

Definition at line 72 of file allocatable.h.

References allocator_, and ion::base::AllocationManager::GetNonNullAllocator().

size_t ion::base::Notifier::GetReceiverCount ( ) const
inherited

Returns the number of Notifiers that will be notified.

Definition at line 71 of file notifier.cc.

const Notifier::NotifierPtrVector & ion::base::Notifier::GetReceivers ( ) const
protectedinherited

Returns the set of Notifiers that will be notified.

Definition at line 77 of file notifier.cc.

int ion::base::Shareable::GetRefCount ( ) const
inlineinherited

GetRefCount() is part of the interface necessary for SharedPtr.

Definition at line 34 of file shareable.h.

Referenced by ion::base::Notifier::RemoveReceiver().

ResourceBase * ion::gfx::ResourceHolder::GetResource ( size_t  index,
ResourceKey  key 
) const
inherited

Returns the Resource at the given index and key, or NULL if no resource was previously set at that location.

Definition at line 122 of file resourceholder.cc.

int ion::gfx::ResourceHolder::GetResourceCount ( ) const
inlineinherited

Returns the number of resources that this holder holds.

Note that this is not necessarily the number of indices that have non-NULL resources. This can be used as a fast trivial check to see if the holder has any resources.

Definition at line 73 of file resourceholder.h.

const SamplerPtr& ion::gfx::TextureBase::GetSampler ( ) const
inlineinherited

Definition at line 92 of file texture.h.

References ion::base::SharedPtr< T >::Get().

const base::AllocVector<SubImage>& ion::gfx::Texture::GetSubImages ( ) const
inline

Definition at line 302 of file texture.h.

Swizzle ion::gfx::TextureBase::GetSwizzleAlpha ( ) const
inlineinherited

Definition at line 132 of file texture.h.

Swizzle ion::gfx::TextureBase::GetSwizzleBlue ( ) const
inlineinherited

Definition at line 130 of file texture.h.

Swizzle ion::gfx::TextureBase::GetSwizzleGreen ( ) const
inlineinherited

Definition at line 128 of file texture.h.

Swizzle ion::gfx::TextureBase::GetSwizzleRed ( ) const
inlineinherited

Definition at line 126 of file texture.h.

TextureType ion::gfx::TextureBase::GetTextureType ( ) const
inlineinherited

Returns what type of texture that this is.

Definition at line 142 of file texture.h.

bool ion::gfx::Texture::HasImage ( size_t  level) const
inline

Definition at line 285 of file texture.h.

bool ion::gfx::TextureBase::IsMultisampleFixedSampleLocations ( ) const
inlineinherited

Definition at line 157 of file texture.h.

void ion::base::Notifier::Notify ( ) const
protectedinherited

Notifies all contained Notifiers by calling their OnNotify().

Any receivers that have been destroyed will be removed from the vector of receivers.

Definition at line 81 of file notifier.cc.

References ion::base::SharedPtr< T >::Get().

void ion::gfx::ResourceHolder::OnChanged ( int  bit) const
inlineprotectedinherited

Forwards OnChanged to all resources.

Definition at line 326 of file resourceholder.h.

void ion::base::Allocatable::operator delete ( void *  ptr)
inlineinherited

Define the delete operator to use specialized functions dealing with an Allocator.

Definition at line 109 of file allocatable.h.

void ion::base::Allocatable::operator delete ( void *  ptr,
AllocationLifetime  lifetime 
)
inlineinherited

Windows requires these (or it issues C4291 warnings).

Definition at line 112 of file allocatable.h.

void ion::base::Allocatable::operator delete ( void *  ptr,
const AllocatorPtr allocator 
)
inlineinherited

Definition at line 113 of file allocatable.h.

void ion::base::Allocatable::operator delete ( void *  ptr,
void *  ptr2 
)
inlineinherited

The placement delete operator does nothing, as usual.

Definition at line 118 of file allocatable.h.

void* ion::base::Allocatable::operator new ( size_t  size)
inlineinherited

The standard no-parameter new operator uses the default Allocator.

Definition at line 84 of file allocatable.h.

void* ion::base::Allocatable::operator new ( size_t  size,
AllocationLifetime  lifetime 
)
inlineinherited

This overloaded version of the new operator uses the AllocationManager's default Allocator for the specified lifetime.

Definition at line 88 of file allocatable.h.

void* ion::base::Allocatable::operator new ( size_t  size,
const AllocatorPtr allocator 
)
inlineinherited

This overloaded version of the new operator takes the Allocator to use directly as a parameter.

If the Allocator pointer is NULL, this uses the default Allocator.

Definition at line 95 of file allocatable.h.

void* ion::base::Allocatable::operator new ( size_t  size,
const AllocatorPtr allocator,
void *  ptr 
)
inlineinherited

Special operator new for using placement new with Allocatables.

Definition at line 100 of file allocatable.h.

void* ion::base::Allocatable::operator new ( size_t  size,
void *  ptr 
)
inlineinherited

The placement new operator is defined conventionally.

Definition at line 105 of file allocatable.h.

void ion::base::Notifier::RemoveReceiver ( Notifier receiver)
inherited

Removes a Notifier to be notified.

Does nothing if the receiver is NULL or not in the set of receivers.

Definition at line 38 of file notifier.cc.

References ion::base::Shareable::GetRefCount().

Referenced by ion::gfx::AttributeArray::~AttributeArray().

void ion::gfx::TextureBase::SetBaseLevel ( int  level)
inlineinherited

Sets/returns the index of the lowest mipmap level to use when rendering.

The default value is 0.

Definition at line 114 of file texture.h.

void ion::gfx::Texture::SetImage ( size_t  level,
const ImagePtr image 
)
inline

See comments in TextureBase::Face.

Definition at line 277 of file texture.h.

References ion::port::ERROR, and LOG.

void ion::gfx::TextureBase::SetImmutableImage ( const ImagePtr image,
size_t  levels 
)
inherited

Sets this texture to be fully allocated and made immutable by OpenGL, in the sense that it cannot change size or its number of mipmap levels.

The actual image data of the texture is not immutable, and may be changed with SetSubImage() (see below). This is equivalent to using a GL TexStorage() function. The passed image specifies the dimensions of the base texture face and the format to use (any image data stored in image is ignored), while levels indicates the number of mipmap levels to allocate.

Note
after calling this function, calling SetImage() on any of this texture's faces is an error. All face updates must be through SetSubImage(). Calling SetImmutable() repeatedly is also an error; it may only be called once.

Definition at line 112 of file texture.cc.

References ion::port::ERROR, ion::base::SharedPtr< T >::Get(), and LOG.

void ion::gfx::ResourceHolder::SetLabel ( const std::string &  label)
inlineinherited

Definition at line 90 of file resourceholder.h.

void ion::gfx::TextureBase::SetMaxLevel ( int  level)
inlineinherited

Sets/returns the index of the highest mipmap level to use when rendering.

The default value is 1000.

Definition at line 119 of file texture.h.

void ion::gfx::TextureBase::SetMultisampling ( int  samples,
bool  fixed_sample_locations 
)
inlineinherited

Enables/disables and sets parameters for texture multisampling.

If multisampling is enabled, then both mipmapping and sub images are disabled.

Definition at line 146 of file texture.h.

References LOG, and ion::port::WARNING.

void ion::gfx::ResourceHolder::SetResource ( size_t  index,
ResourceKey  key,
ResourceBase resource 
) const
inherited

Sets the resource at the passed index and key.

The size of the internal vector is automatically managed so that it has the smallest possible size.

Definition at line 51 of file resourceholder.cc.

References DCHECK, DCHECK_EQ, ion::gfx::ResourceBase::GetKey(), and ion::gfx::ResourceBase::OnChanged().

void ion::gfx::TextureBase::SetSampler ( const SamplerPtr sampler)
inherited

Sets/returns the Sampler to use for this. This is NULL by default.

Definition at line 104 of file texture.cc.

void ion::gfx::Texture::SetSubImage ( size_t  level,
const math::Point2ui  offset,
const ImagePtr image 
)
inline

Definition at line 294 of file texture.h.

void ion::gfx::Texture::SetSubImage ( size_t  level,
const math::Point3ui  offset,
const ImagePtr image 
)
inline

Definition at line 298 of file texture.h.

void ion::gfx::TextureBase::SetSwizzleAlpha ( Swizzle  a)
inlineinherited

Definition at line 131 of file texture.h.

void ion::gfx::TextureBase::SetSwizzleBlue ( Swizzle  b)
inlineinherited

Definition at line 129 of file texture.h.

void ion::gfx::TextureBase::SetSwizzleGreen ( Swizzle  g)
inlineinherited

Definition at line 127 of file texture.h.

void ion::gfx::TextureBase::SetSwizzleRed ( Swizzle  r)
inlineinherited

Sets/returns the color component to use when the color channels of a texture are used in a shader.

These all default to themselves (e.g., red swizzle is red).

Definition at line 125 of file texture.h.

void ion::gfx::TextureBase::SetSwizzles ( Swizzle  r,
Swizzle  g,
Swizzle  b,
Swizzle  a 
)
inlineinherited

Sets all swizzles at once.

Definition at line 134 of file texture.h.


The documentation for this class was generated from the following files: