тд

Object * ResourceManager :: getobject ( const String& theName ) {
Object * object = objects.getObjectWithName ( theName );
if ( object != NULL )
return object -> retain (),-
// the texture has not been loaded yet Data * data = getResource ( theName );
if ( data == NULL ) return NULL;
for ( Array :: Iterator it = decoders.getlterator (); lit.end (); ++it )
{
ResourceDecoder * decoder = (ResourceDecoder *) it.value ();
if ( decoder -> checkExtension ( theName ) )
if ( ( object = decoder -> decode ( data ) ) != NULL )
{
objects.insert ( object );
object -> setName ( theName ); data -> release ();
return object; }
}
for ( it = decoders.getlterator (); lit.end (); ++it ) {
ResourceDecoder * decoder = (ResourceDecoder *) it.value ();
if ( ( object = decoder -> decode ( data ) ) != NULL ) {
object -> setName ( theName ); data -> release ();

Основные классы для рендерера. Работа с ресурсами

| objects.insert ( object );
return object;
}
i }
; if ( data != NULL ) I data -> release ();
[ (*sysLog) << "Cannot load " << theName << logEndl; return NULL;

; Для точного определения типа возвращенного ресурса удобно восполь\ зоваться конструкцией dynamic_cast языка С++ (для этого в большинстве

компиляторов необходимо включить поддержку RTTI), хотя этого можно

также добиться используя метод isKindOfClass класса Object.

Е На компакт-диске содержится исходный текст декодеров для ряда гра[ фических форматов, таких, как bmp,pcx, gif, tga, wal,png иjpeg.

I Ниже приводится UML-диаграмма классов, используемых для доступа

I к ресурсам.

С помощью введенных классов легко осуществляется работа с различными типами ресурсов, находящихся в разных местах. При этом весь механизм для работы с ресурсами собран в одном месте и работает совершенно прозрачно для всех частей системы.

Переход от хранения ресурсов в одном месте (например, файловой системе на компьютере разработчика) к другому мету и способу (например, внутри гф-архива у пользователя) происходит практически безболезненно. Более того, система может осуществлять поиск ресурсов сразу в нескольких


⇐ Предыдущая| |Следующая ⇒