From d5b2897d8bd80343a72077e8e3271b277a9b6266 Mon Sep 17 00:00:00 2001 From: Matej Jan Date: Tue, 30 Nov 2010 23:26:03 +0000 Subject: [PATCH] Added 3D Model support. git-svn-id: http://xni.googlecode.com/svn/XNI@42 ac433895-eea3-a490-d80a-17149a75e588 --- .../Xni/Framework/Content/BasicEffectReader.h | 17 + .../Xni/Framework/Content/BasicEffectReader.m | 33 + .../Content/ContentManager+Internal.h | 17 + .../Xni/Framework/Content/ContentManager.m | 33 +- .../Xni/Framework/Content/ContentReader.h | 7 +- .../Xni/Framework/Content/ContentReader.m | 63 +- .../Content/ContentTypeReaderManager.h | 10 +- .../Content/ContentTypeReaderManager.m | 32 +- .../Xni/Framework/Content/IndexBufferReader.h | 17 + .../Xni/Framework/Content/IndexBufferReader.m | 40 ++ .../Xni/Framework/Content/ModelBoneReader.h | 17 + .../Xni/Framework/Content/ModelBoneReader.m | 45 ++ .../Framework/Content/ModelMeshPartReader.h | 17 + .../Framework/Content/ModelMeshPartReader.m | 35 ++ .../Xni/Framework/Content/ModelMeshReader.h | 17 + .../Xni/Framework/Content/ModelMeshReader.m | 33 + .../Xni/Framework/Content/ModelReader.h | 17 + .../Xni/Framework/Content/ModelReader.m | 39 ++ .../Content/Pipeline/ChildCollection.h | 33 + .../Content/Pipeline/ChildCollection.m | 75 +++ .../Content/Pipeline/ContentImporter.h | 5 +- .../Framework/Content/Pipeline/ContentItem.h | 5 +- .../Framework/Content/Pipeline/ContentItem.m | 22 +- .../Content/Pipeline/ContentProcessor.h | 17 + .../Content/Pipeline/ContentProcessor.m | 21 + .../Content/Pipeline/ExternalReference.h | 24 + .../Content/Pipeline/ExternalReference.m | 39 ++ .../Pipeline/Graphics/BasicMaterialContent.h | 35 ++ .../Pipeline/Graphics/BasicMaterialContent.m | 101 ++++ .../Pipeline/Graphics/GeometryContent.h | 28 + .../Pipeline/Graphics/GeometryContent.m | 37 ++ .../Graphics/GeometryContentCollection.h | 17 + .../Graphics/GeometryContentCollection.m | 23 + .../Pipeline/Graphics/IndexCollection.h | 17 + .../Pipeline/Graphics/IndexCollection.m | 18 + .../Graphics/IndirectPositionCollection.h | 24 + .../Graphics/IndirectPositionCollection.m | 43 ++ .../Pipeline/Graphics/MaterialContent.h | 21 + .../Pipeline/Graphics/MaterialContent.m | 33 + .../Content/Pipeline/Graphics/MeshContent.h | 22 + .../Content/Pipeline/Graphics/MeshContent.m | 35 ++ .../Content/Pipeline/Graphics/MipmapChain.h | 1 + .../Pipeline/Graphics/MipmapChainCollection.h | 15 +- .../Pipeline/Graphics/MipmapChainCollection.m | 37 +- .../Content/Pipeline/Graphics/NodeContent.h | 27 + .../Content/Pipeline/Graphics/NodeContent.m | 49 ++ .../Pipeline/Graphics/NodeContentCollection.h | 17 + .../Pipeline/Graphics/NodeContentCollection.m | 23 + .../Pipeline/Graphics/PositionCollection.h | 17 + .../Pipeline/Graphics/PositionCollection.m | 19 + ...mework.Content.Pipeline.Graphics.classes.h | 12 +- ....Xni.Framework.Content.Pipeline.Graphics.h | 23 +- .../Pipeline/Graphics/Texture2DContent.m | 4 +- .../Pipeline/Graphics/TextureContent.h | 4 +- .../Graphics/TextureReferenceDictionary.h | 19 + .../Graphics/TextureReferenceDictionary.m | 18 + .../Content/Pipeline/Graphics/VertexChannel.h | 35 ++ .../Content/Pipeline/Graphics/VertexChannel.m | 69 +++ .../Graphics/VertexChannelCollection.h | 36 ++ .../Graphics/VertexChannelCollection.m | 93 +++ .../Pipeline/Graphics/VertexChannelNames.h | 33 + .../Pipeline/Graphics/VertexChannelNames.m | 153 +++++ .../Content/Pipeline/Graphics/VertexContent.h | 39 ++ .../Content/Pipeline/Graphics/VertexContent.m | 140 +++++ .../Content/Pipeline/IContentImporter.h | 16 + .../Content/Pipeline/IContentProcessor.h | 19 + .../Content/Pipeline/NamedValueDictionary.h | 33 + .../Content/Pipeline/NamedValueDictionary.m.h | 64 ++ .../Content/Pipeline/OpaqueDataDictionary.h | 17 + .../Content/Pipeline/OpaqueDataDictionary.m | 17 + ...r.Xni.Framework.Content.Pipeline.classes.h | 15 +- ...etronator.Xni.Framework.Content.Pipeline.h | 14 +- .../Content/Pipeline/TextureImporter.m | 10 +- .../Framework/Content/Pipeline/XImporter.h | 17 + .../Framework/Content/Pipeline/XImporter.m | 457 ++++++++++++++ .../Content/Pipeline/XImporterReader.h | 51 ++ .../Content/Pipeline/XImporterReader.m | 170 ++++++ ...Retronator.Xni.Framework.Content.classes.h | 7 +- .../Retronator.Xni.Framework.Content.h | 15 +- ...DContentTypeReader.h => Texture2DReader.h} | 2 +- ...DContentTypeReader.m => Texture2DReader.m} | 8 +- .../Framework/Content/VertexBufferReader.h | 17 + .../Framework/Content/VertexBufferReader.m | 36 ++ .../Content/VertexDeclarationReader.h | 17 + .../Content/VertexDeclarationReader.m | 25 + Classes/Retronator/Xni/Framework/Game.m | 4 +- .../Xni/Framework/Graphics/BasicEffect.m | 7 +- .../Graphics/GraphicsDevice+Internal.h | 26 + .../Xni/Framework/Graphics/GraphicsDevice.h | 54 +- .../Xni/Framework/Graphics/GraphicsDevice.m | 97 ++- .../Xni/Framework/Graphics/GraphicsEnums.h | 36 +- .../Framework/Graphics/HiDefGraphicsDevice.m | 2 +- .../Xni/Framework/Graphics/IndexArray.h | 29 + .../Xni/Framework/Graphics/IndexArray.m | 50 ++ .../Framework/Graphics/IndexBuffer+Internal.h | 16 + .../Xni/Framework/Graphics/IndexBuffer.h | 16 +- .../Xni/Framework/Graphics/IndexBuffer.m | 29 +- .../Xni/Framework/Graphics/Model+Internal.h | 18 + .../Retronator/Xni/Framework/Graphics/Model.h | 31 + .../Retronator/Xni/Framework/Graphics/Model.m | 91 +++ .../Framework/Graphics/ModelBone+Internal.h | 21 + .../Framework/Graphics/ModelBone+Internal.m | 14 + .../Xni/Framework/Graphics/ModelBone.h | 28 + .../Xni/Framework/Graphics/ModelBone.m | 47 ++ .../Framework/Graphics/ModelBoneCollection.h | 28 + .../Framework/Graphics/ModelBoneCollection.m | 30 + .../Graphics/ModelEffectCollection.h | 19 + .../Graphics/ModelEffectCollection.m | 18 + .../Framework/Graphics/ModelMesh+Internal.h | 16 + .../Xni/Framework/Graphics/ModelMesh.h | 29 + .../Xni/Framework/Graphics/ModelMesh.m | 68 +++ .../Framework/Graphics/ModelMeshCollection.h | 28 + .../Framework/Graphics/ModelMeshCollection.m | 30 + .../Graphics/ModelMeshPart+Internal.h | 18 + .../Xni/Framework/Graphics/ModelMeshPart.h | 33 + .../Xni/Framework/Graphics/ModelMeshPart.m | 43 ++ .../Graphics/ModelMeshPartCollection.h | 19 + .../Graphics/ModelMeshPartCollection.m | 18 + .../Xni/Framework/Graphics/RasterizerState.m | 3 +- .../Framework/Graphics/ReachGraphicsDevice.m | 151 ++++- ...etronator.Xni.Framework.Graphics.classes.h | 7 +- .../Retronator.Xni.Framework.Graphics.h | 15 + .../Xni/Framework/Graphics/ShortIndexArray.h | 21 + .../Xni/Framework/Graphics/ShortIndexArray.m | 30 + .../Xni/Framework/Graphics/SpriteBatch.m | 20 +- .../Xni/Framework/Graphics/Texture2D.m | 4 +- .../Xni/Framework/Graphics/Vector4.h | 1 + .../Xni/Framework/Graphics/Vector4.m | 6 + .../Xni/Framework/Graphics/VertexArray.h | 5 +- .../Xni/Framework/Graphics/VertexArray.m | 5 +- .../Graphics/VertexBuffer+Internal.h | 16 + .../Xni/Framework/Graphics/VertexBuffer.h | 14 +- .../Xni/Framework/Graphics/VertexBuffer.m | 36 +- .../Xni/Framework/Graphics/VertexElement.h | 2 + .../Xni/Framework/Graphics/VertexElement.m | 16 + .../Framework/Graphics/VertexPositionColor.m | 2 +- .../Graphics/VertexPositionColorTexture.m | 2 +- .../Graphics/VertexPositionNormalTexture.h | 19 + .../Graphics/VertexPositionNormalTexture.m | 39 ++ .../VertexPositionNormalTextureArray.h | 21 + .../VertexPositionNormalTextureArray.m | 29 + .../Graphics/VertexPositionTexture.m | 2 +- Classes/Retronator/Xni/Framework/Matrix.h | 1 + Classes/Retronator/Xni/Framework/Matrix.m | 5 + Classes/Retronator/Xni/Framework/Quaternion.h | 1 + Classes/Retronator/Xni/Framework/Quaternion.m | 7 +- Classes/Retronator/Xni/Framework/Vector3.h | 1 + Classes/Retronator/Xni/Framework/Vector3.m | 6 + Classes/System/Collection.h | 38 ++ Classes/System/Collection.m.h | 72 +++ Classes/System/ReadOnlyCollection.h | 30 + Classes/System/ReadOnlyCollection.m.h | 47 ++ Classes/System/System.classes.h | 3 +- Classes/System/System.h | 3 +- .../{AdaptiveArray.h => XniAdaptiveArray.h} | 4 +- .../{AdaptiveArray.m => XniAdaptiveArray.m} | 6 +- XNI.xcodeproj/project.pbxproj | 565 +++++++++++++++++- 157 files changed, 5145 insertions(+), 217 deletions(-) create mode 100644 Classes/Retronator/Xni/Framework/Content/BasicEffectReader.h create mode 100644 Classes/Retronator/Xni/Framework/Content/BasicEffectReader.m create mode 100644 Classes/Retronator/Xni/Framework/Content/ContentManager+Internal.h create mode 100644 Classes/Retronator/Xni/Framework/Content/IndexBufferReader.h create mode 100644 Classes/Retronator/Xni/Framework/Content/IndexBufferReader.m create mode 100644 Classes/Retronator/Xni/Framework/Content/ModelBoneReader.h create mode 100644 Classes/Retronator/Xni/Framework/Content/ModelBoneReader.m create mode 100644 Classes/Retronator/Xni/Framework/Content/ModelMeshPartReader.h create mode 100644 Classes/Retronator/Xni/Framework/Content/ModelMeshPartReader.m create mode 100644 Classes/Retronator/Xni/Framework/Content/ModelMeshReader.h create mode 100644 Classes/Retronator/Xni/Framework/Content/ModelMeshReader.m create mode 100644 Classes/Retronator/Xni/Framework/Content/ModelReader.h create mode 100644 Classes/Retronator/Xni/Framework/Content/ModelReader.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/ChildCollection.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/ChildCollection.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/ContentProcessor.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/ContentProcessor.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/ExternalReference.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/ExternalReference.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BasicMaterialContent.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BasicMaterialContent.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/GeometryContent.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/GeometryContent.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/GeometryContentCollection.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/GeometryContentCollection.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/IndexCollection.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/IndexCollection.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/IndirectPositionCollection.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/IndirectPositionCollection.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MaterialContent.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MaterialContent.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MeshContent.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MeshContent.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/NodeContent.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/NodeContent.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/NodeContentCollection.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/NodeContentCollection.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PositionCollection.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PositionCollection.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/TextureReferenceDictionary.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/TextureReferenceDictionary.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannel.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannel.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannelCollection.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannelCollection.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannelNames.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannelNames.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexContent.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexContent.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/IContentImporter.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/IContentProcessor.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/NamedValueDictionary.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/NamedValueDictionary.m.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/OpaqueDataDictionary.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/OpaqueDataDictionary.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/XImporter.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/XImporter.m create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/XImporterReader.h create mode 100644 Classes/Retronator/Xni/Framework/Content/Pipeline/XImporterReader.m rename Classes/Retronator/Xni/Framework/Content/{Texture2DContentTypeReader.h => Texture2DReader.h} (78%) rename Classes/Retronator/Xni/Framework/Content/{Texture2DContentTypeReader.m => Texture2DReader.m} (84%) create mode 100644 Classes/Retronator/Xni/Framework/Content/VertexBufferReader.h create mode 100644 Classes/Retronator/Xni/Framework/Content/VertexBufferReader.m create mode 100644 Classes/Retronator/Xni/Framework/Content/VertexDeclarationReader.h create mode 100644 Classes/Retronator/Xni/Framework/Content/VertexDeclarationReader.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice+Internal.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/IndexArray.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/IndexArray.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/IndexBuffer+Internal.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/Model+Internal.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/Model.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/Model.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelBone+Internal.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelBone+Internal.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelBone.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelBone.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelBoneCollection.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelBoneCollection.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelEffectCollection.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelEffectCollection.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelMesh+Internal.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelMesh.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelMesh.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelMeshCollection.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelMeshCollection.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelMeshPart+Internal.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelMeshPart.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelMeshPart.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelMeshPartCollection.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ModelMeshPartCollection.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ShortIndexArray.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/ShortIndexArray.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexBuffer+Internal.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexPositionNormalTexture.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexPositionNormalTexture.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexPositionNormalTextureArray.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexPositionNormalTextureArray.m create mode 100644 Classes/System/Collection.h create mode 100644 Classes/System/Collection.m.h create mode 100644 Classes/System/ReadOnlyCollection.h create mode 100644 Classes/System/ReadOnlyCollection.m.h rename Classes/System/{AdaptiveArray.h => XniAdaptiveArray.h} (88%) rename Classes/System/{AdaptiveArray.m => XniAdaptiveArray.m} (90%) diff --git a/Classes/Retronator/Xni/Framework/Content/BasicEffectReader.h b/Classes/Retronator/Xni/Framework/Content/BasicEffectReader.h new file mode 100644 index 0000000..c0113a7 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/BasicEffectReader.h @@ -0,0 +1,17 @@ +// +// BasicEffectReader.h +// XNI +// +// Created by Matej Jan on 23.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "ContentTypeReader.h" + +@interface BasicEffectReader : ContentTypeReader { + +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/BasicEffectReader.m b/Classes/Retronator/Xni/Framework/Content/BasicEffectReader.m new file mode 100644 index 0000000..edbdccb --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/BasicEffectReader.m @@ -0,0 +1,33 @@ +// +// BasicEffectReader.m +// XNI +// +// Created by Matej Jan on 23.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "BasicEffectReader.h" + +#import "Retronator.Xni.Framework.Content.h" +#import "Retronator.Xni.Framework.Graphics.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" + +@implementation BasicEffectReader + +- (id) readFromInput:(ContentReader *)input into:(id)existingInstance { + BasicMaterialContent *content = input.content; + GraphicsDevice *graphicsDevice = [[input.contentManager.serviceProvider getServiceOfType:@protocol(IGraphicsDeviceService)] graphicsDevice]; + + BasicEffect *effect = [[[BasicEffect alloc] initWithGraphicsDevice:graphicsDevice] autorelease]; + effect.alpha = [content.alpha floatValue]; + effect.diffuseColor = content.diffuseColor; + effect.specularPower = [content.specularPower floatValue]; + effect.specularColor = content.specularColor; + effect.emissiveColor = content.emissiveColor; + effect.texture = [input readSharedResourceFrom:content.texture]; + effect.textureEnabled = effect.texture != nil; + + return effect; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/ContentManager+Internal.h b/Classes/Retronator/Xni/Framework/Content/ContentManager+Internal.h new file mode 100644 index 0000000..37a324c --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/ContentManager+Internal.h @@ -0,0 +1,17 @@ +// +// ContentManager+Internal.h +// XNI +// +// Created by Matej Jan on 23.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "ContentManager.h" + +@interface ContentManager (Internal) + +@property (nonatomic, readonly) ContentTypeReaderManager *readerManager; + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/ContentManager.m b/Classes/Retronator/Xni/Framework/Content/ContentManager.m index 2794cda..9bab9d3 100644 --- a/Classes/Retronator/Xni/Framework/Content/ContentManager.m +++ b/Classes/Retronator/Xni/Framework/Content/ContentManager.m @@ -7,9 +7,11 @@ // #import "ContentManager.h" +#import "ContentManager+Internal.h" -#import "Retronator.Xni.Framework.Content.Pipeline.h" #import "Retronator.Xni.Framework.Content.h" +#import "Retronator.Xni.Framework.Content.Pipeline.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Processors.h" @implementation ContentManager @@ -28,10 +30,13 @@ return self; } - @synthesize rootDirectory; @synthesize serviceProvider; +- (ContentTypeReaderManager *) readerManager { + return readerManager; +} + - (id) load:(NSString *)assetName{ // Check if we have already loaded this asset. @@ -66,11 +71,18 @@ // Find extension and absolute path. NSString *fileName = [filePath stringByDeletingPathExtension]; - NSString *extension = [[filePath pathExtension] lowercaseString]; + NSString *extension = [filePath pathExtension]; NSString *absolutePath = [[NSBundle mainBundle] pathForResource:fileName ofType:extension inDirectory:rootDirectory]; + if (!absolutePath) { + [NSException raise:@"InvalidArgumentException" format:@"Could not locate file '%@' in directory '%@'", filePath, rootDirectory]; + } + ContentReader *input; + // Compare lowercase extension. + extension = [extension lowercaseString]; + if ([extension isEqual:@"png"] || [extension isEqual:@"jpg"] || [extension isEqual:@"jpeg"] || [extension isEqual:@"gif"] || [extension isEqual:@"tif"] || [extension isEqual:@"tiff"] || [extension isEqual:@"ico"] || [extension isEqual:@"bmp"]) { @@ -78,6 +90,14 @@ TextureImporter *textureImporter = [[[TextureImporter alloc] init] autorelease]; TextureContent *textureContent = [textureImporter importFile:absolutePath]; input = [[ContentReader alloc] initWithContentManager:self Content:textureContent]; + + } else if ([extension isEqual:@"x"]) { + // We have direct x model content + XImporter *xImporter = [[[XImporter alloc] init] autorelease]; + NodeContent *root = [xImporter importFile:absolutePath]; + ModelProcessor *modelProcessor = [[[ModelProcessor alloc] init] autorelease]; + ModelContent *modelContent = [modelProcessor process:root]; + input = [[ContentReader alloc] initWithContentManager:self Content:modelContent]; } else { [NSException raise:@"InvalidArgumentException" format:@"Files with extension %@ are not supported", extension]; } @@ -86,11 +106,14 @@ id result = [reader readFromInput:input into:nil]; // Save the loaded asset for quick retreival. - [loadedAssets setObject:result forKey:assetName]; + if (assetName) { + [loadedAssets setObject:result forKey:assetName]; + } [input release]; - return result; + // We are returning a retained object since the loaded asset is always used for a longer time. + return [result retain]; } - (void) unload { diff --git a/Classes/Retronator/Xni/Framework/Content/ContentReader.h b/Classes/Retronator/Xni/Framework/Content/ContentReader.h index 0349485..f2ed2f8 100644 --- a/Classes/Retronator/Xni/Framework/Content/ContentReader.h +++ b/Classes/Retronator/Xni/Framework/Content/ContentReader.h @@ -12,7 +12,9 @@ @interface ContentReader : NSObject { ContentManager *contentManager; - id content; + NSMutableArray *contentStack; + + CFMutableDictionaryRef sharedResources; } - (id) initWithContentManager:(ContentManager*)theContentManager Content:(id)theContent; @@ -20,4 +22,7 @@ @property (nonatomic, readonly) ContentManager *contentManager; @property (nonatomic, readonly) id content; +- (id) readObjectFrom:(id)source; +- (id) readSharedResourceFrom:(id)source; + @end diff --git a/Classes/Retronator/Xni/Framework/Content/ContentReader.m b/Classes/Retronator/Xni/Framework/Content/ContentReader.m index a8a1c8b..c36962d 100644 --- a/Classes/Retronator/Xni/Framework/Content/ContentReader.m +++ b/Classes/Retronator/Xni/Framework/Content/ContentReader.m @@ -8,18 +8,77 @@ #import "ContentReader.h" +#import "Retronator.Xni.Framework.Content.h" +#import "Retronator.Xni.Framework.Content.Pipeline.h" +#import "ContentManager+Internal.h" @implementation ContentReader - (id) initWithContentManager:(ContentManager *)theContentManager Content:(id)theContent { if (self = [super init]) { contentManager = theContentManager; - content = theContent; + + contentStack = [[NSMutableArray alloc] init]; + [contentStack addObject:theContent]; + + sharedResources = CFDictionaryCreateMutable(NULL, 0, NULL, &kCFTypeDictionaryValueCallBacks); } return self; } @synthesize contentManager; -@synthesize content; + +- (id) content { + return [contentStack lastObject]; +} + +- (id) readObjectFrom:(id)source { + // Push the source onto the content stack. + [contentStack addObject:source]; + + id result = nil; + + if ([source isKindOfClass:[ExternalReference class]]) { + ExternalReference *externalReference = (ExternalReference*)source; + + // We should load the item with content manager. + result = [contentManager load:externalReference.name fromFile:externalReference.filename]; + } else { + // Get the correct reader for item. + ContentTypeReader *typeReader = [contentManager.readerManager getTypeReaderFor:[source class]]; + + // Read the object. + result = [typeReader readFromInput:self into:nil]; + } + + // Return to previous content on the stack. + [contentStack removeLastObject]; + + return result; +} + +- (id) readSharedResourceFrom:(id)source { + if (!source) { + return nil; + } + + // See if the resource has already been loaded. + id resource; + void *resourcePointer = nil; + CFDictionaryGetValueIfPresent(sharedResources, source, resourcePointer); + resource = (id)resourcePointer; + if (!resource) { + resource = [self readObjectFrom:source]; + CFDictionarySetValue(sharedResources, source, resource); + } + return resource; +} + +- (void) dealloc +{ + [contentStack release]; + [super dealloc]; +} + @end diff --git a/Classes/Retronator/Xni/Framework/Content/ContentTypeReaderManager.h b/Classes/Retronator/Xni/Framework/Content/ContentTypeReaderManager.h index 2d6268e..9a07ae1 100644 --- a/Classes/Retronator/Xni/Framework/Content/ContentTypeReaderManager.h +++ b/Classes/Retronator/Xni/Framework/Content/ContentTypeReaderManager.h @@ -11,7 +11,15 @@ #import "Retronator.Xni.Framework.Content.classes.h" @interface ContentTypeReaderManager : NSObject { - Texture2DContentTypeReader *texture2DContentTypeReader; + Texture2DReader *texture2DReader; + ModelReader *modelReader; + ModelMeshReader *modelMeshReader; + ModelMeshPartReader *modelMeshPartReader; + BasicEffectReader *basicEffectReader; + IndexBufferReader *indexBufferReader; + VertexBufferReader *vertexBufferReader; + ModelBoneReader *modelBoneReader; + VertexDeclarationReader *vertexDeclarationReader; } - (ContentTypeReader*) getTypeReaderFor:(Class)targetType; diff --git a/Classes/Retronator/Xni/Framework/Content/ContentTypeReaderManager.m b/Classes/Retronator/Xni/Framework/Content/ContentTypeReaderManager.m index 9961fd3..731f466 100644 --- a/Classes/Retronator/Xni/Framework/Content/ContentTypeReaderManager.m +++ b/Classes/Retronator/Xni/Framework/Content/ContentTypeReaderManager.m @@ -10,6 +10,7 @@ #import "Retronator.Xni.Framework.Content.h" #import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Processors.h" @implementation ContentTypeReaderManager @@ -17,7 +18,15 @@ { self = [super init]; if (self != nil) { - texture2DContentTypeReader = [[Texture2DContentTypeReader alloc] init]; + texture2DReader = [[Texture2DReader alloc] init]; + modelReader = [[ModelReader alloc] init]; + modelMeshReader = [[ModelMeshReader alloc] init]; + modelMeshPartReader = [[ModelMeshPartReader alloc] init]; + basicEffectReader = [[BasicEffectReader alloc] init]; + indexBufferReader = [[IndexBufferReader alloc] init]; + vertexBufferReader = [[VertexBufferReader alloc] init]; + modelBoneReader = [[ModelBoneReader alloc] init]; + vertexDeclarationReader = [[VertexDeclarationReader alloc] init]; } return self; } @@ -25,7 +34,23 @@ - (ContentTypeReader *) getTypeReaderFor:(Class)targetType { if (targetType == [Texture2DContent class]) { - return texture2DContentTypeReader; + return texture2DReader; + } else if (targetType == [ModelContent class]) { + return modelReader; + } else if (targetType == [ModelMeshContent class]) { + return modelMeshReader; + } else if (targetType == [ModelMeshPartContent class]) { + return modelMeshPartReader; + } else if (targetType == [BasicMaterialContent class]) { + return basicEffectReader; + } else if (targetType == [IndexCollection class]) { + return indexBufferReader; + } else if (targetType == [VertexBufferContent class]) { + return vertexBufferReader; + } else if (targetType == [ModelBoneContent class]) { + return modelBoneReader; + } else if (targetType == [VertexDeclarationContent class]) { + return vertexDeclarationReader; } else { return nil; } @@ -33,7 +58,8 @@ - (void) dealloc { - [texture2DContentTypeReader dealloc]; + [texture2DReader release]; + [modelReader release]; [super dealloc]; } diff --git a/Classes/Retronator/Xni/Framework/Content/IndexBufferReader.h b/Classes/Retronator/Xni/Framework/Content/IndexBufferReader.h new file mode 100644 index 0000000..a5e6205 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/IndexBufferReader.h @@ -0,0 +1,17 @@ +// +// IndexBufferReader.h +// XNI +// +// Created by Matej Jan on 23.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "ContentTypeReader.h" + +@interface IndexBufferReader : ContentTypeReader { + +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/IndexBufferReader.m b/Classes/Retronator/Xni/Framework/Content/IndexBufferReader.m new file mode 100644 index 0000000..4be5b6a --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/IndexBufferReader.m @@ -0,0 +1,40 @@ +// +// IndexBufferReader.m +// XNI +// +// Created by Matej Jan on 23.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "IndexBufferReader.h" + +#import "Retronator.Xni.Framework.Content.h" +#import "Retronator.Xni.Framework.Graphics.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" + +@implementation IndexBufferReader + +- (id) readFromInput:(ContentReader *)input into:(id)existingInstance { + IndexCollection *content = input.content; + GraphicsDevice *graphicsDevice = [[input.contentManager.serviceProvider getServiceOfType:@protocol(IGraphicsDeviceService)] graphicsDevice]; + + // Create an index array. + ShortIndexArray *indexArray = [[[ShortIndexArray alloc] initWithInitialCapacity:content.count] autorelease]; + for (NSNumber *index in content) { + short shortIndex = (short)[index intValue]; + [indexArray addIndex:shortIndex]; + } + + // Create the buffer. + IndexBuffer *buffer = [[[IndexBuffer alloc] initWithGraphicsDevice:graphicsDevice + indexElementSize:IndexElementSizeSixteenBits + indexCount:content.count + usage:BufferUsageWriteOnly] autorelease]; + + // Load data from array to buffer. + [buffer setData:indexArray]; + + return buffer; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/ModelBoneReader.h b/Classes/Retronator/Xni/Framework/Content/ModelBoneReader.h new file mode 100644 index 0000000..ebf2908 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/ModelBoneReader.h @@ -0,0 +1,17 @@ +// +// ModelBoneReader.h +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "ContentTypeReader.h" + +@interface ModelBoneReader : ContentTypeReader { + +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/ModelBoneReader.m b/Classes/Retronator/Xni/Framework/Content/ModelBoneReader.m new file mode 100644 index 0000000..36a1484 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/ModelBoneReader.m @@ -0,0 +1,45 @@ +// +// ModelBoneReader.m +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "ModelBoneReader.h" + +#import "Retronator.Xni.Framework.Content.h" +#import "Retronator.Xni.Framework.Graphics.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Processors.h" + +#import "ModelBone+Internal.h" + +@implementation ModelBoneReader + +- (id) readFromInput:(ContentReader *)input into:(id)existingInstance { + ModelBoneContent *content = input.content; + + NSMutableArray *children = [NSMutableArray array]; + + // Create all children bones. + for (ModelBoneContent *child in content.children) { + ModelBone *childBone = [input readSharedResourceFrom:child]; + [children addObject:childBone]; + } + + // Create this bone. + ModelBone *modelBone = [[[ModelBone alloc] initWithChildren:children + index:content.index + name:content.name + transform:content.transform] autorelease]; + + // Update children with new parent. + for (ModelBone *child in children) { + [child setParent:modelBone]; + } + + // Return created bone. + return modelBone; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/ModelMeshPartReader.h b/Classes/Retronator/Xni/Framework/Content/ModelMeshPartReader.h new file mode 100644 index 0000000..808d656 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/ModelMeshPartReader.h @@ -0,0 +1,17 @@ +// +// ModelMeshPartReader.h +// XNI +// +// Created by Matej Jan on 23.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "ContentTypeReader.h" + +@interface ModelMeshPartReader : ContentTypeReader { + +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/ModelMeshPartReader.m b/Classes/Retronator/Xni/Framework/Content/ModelMeshPartReader.m new file mode 100644 index 0000000..83242b3 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/ModelMeshPartReader.m @@ -0,0 +1,35 @@ +// +// ModelMeshPartReader.m +// XNI +// +// Created by Matej Jan on 23.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "ModelMeshPartReader.h" + +#import "Retronator.Xni.Framework.Content.h" +#import "Retronator.Xni.Framework.Graphics.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Processors.h" +#import "ModelMeshPart+Internal.h" + +@implementation ModelMeshPartReader + +- (id) readFromInput:(ContentReader *)input into:(id)existingInstance { + ModelMeshPartContent *content = input.content; + + // Create the model mesh part. + + BasicEffect *effect = [input readSharedResourceFrom:content.material]; + VertexBuffer *vertexBuffer = [input readSharedResourceFrom:content.vertexBuffer]; + IndexBuffer *indexBuffer = [input readSharedResourceFrom:content.indexBuffer]; + + ModelMeshPart *meshPart = + [[ModelMeshPart alloc] initWithVertexOffset:content.vertexOffset numVertices:content.numVertices startIndex:content.startIndex + primitiveCount:content.primitiveCount tag:content.tag indexBuffer:indexBuffer + vertexBuffer:vertexBuffer effect:effect]; + + return [meshPart autorelease]; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/ModelMeshReader.h b/Classes/Retronator/Xni/Framework/Content/ModelMeshReader.h new file mode 100644 index 0000000..e8965cd --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/ModelMeshReader.h @@ -0,0 +1,17 @@ +// +// ModelMeshReader.h +// XNI +// +// Created by Matej Jan on 23.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "ContentTypeReader.h" + +@interface ModelMeshReader : ContentTypeReader { + +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/ModelMeshReader.m b/Classes/Retronator/Xni/Framework/Content/ModelMeshReader.m new file mode 100644 index 0000000..8007728 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/ModelMeshReader.m @@ -0,0 +1,33 @@ +// +// ModelMeshReader.m +// XNI +// +// Created by Matej Jan on 23.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "ModelMeshReader.h" + +#import "Retronator.Xni.Framework.Content.h" +#import "Retronator.Xni.Framework.Graphics.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Processors.h" +#import "ModelMesh+Internal.h" + +@implementation ModelMeshReader + +- (id) readFromInput:(ContentReader *)input into:(id)existingInstance { + ModelMeshContent *content = input.content; + + // Create all model mesh parts. + NSMutableArray *meshParts = [NSMutableArray array]; + for (ModelMeshPartContent *meshPartContent in content.meshParts) { + [meshParts addObject:[input readObjectFrom:meshPartContent]]; + } + + ModelBone *parentBone = [input readSharedResourceFrom:content.parentBone]; + + ModelMesh *mesh = [[[ModelMesh alloc] initWithName:content.name parentBone:parentBone modelMeshParts:meshParts tag:content.tag] autorelease]; + return mesh; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/ModelReader.h b/Classes/Retronator/Xni/Framework/Content/ModelReader.h new file mode 100644 index 0000000..bc8422a --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/ModelReader.h @@ -0,0 +1,17 @@ +// +// ModelReader.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "ContentTypeReader.h" + +@interface ModelReader : ContentTypeReader { + +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/ModelReader.m b/Classes/Retronator/Xni/Framework/Content/ModelReader.m new file mode 100644 index 0000000..20e55dc --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/ModelReader.m @@ -0,0 +1,39 @@ +// +// ModelReader.m +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "ModelReader.h" + +#import "Retronator.Xni.Framework.Content.h" +#import "Retronator.Xni.Framework.Graphics.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Processors.h" +#import "Model+Internal.h" + +@implementation ModelReader + +- (id) readFromInput:(ContentReader *)input into:(id)existingInstance { + ModelContent *content = input.content; + + // Create all model bones. + NSMutableArray *bones = [NSMutableArray array]; + for (ModelBoneContent *boneContent in content.bones) { + [bones addObject:[input readSharedResourceFrom:boneContent]]; + } + + // Create all model meshes. + NSMutableArray *meshes = [NSMutableArray array]; + for (ModelMeshContent *meshContent in content.meshes) { + [meshes addObject:[input readObjectFrom:meshContent]]; + } + + ModelBone *root = [input readSharedResourceFrom:content.root]; + + Model *model = [[Model alloc] initWithBones:bones meshes:meshes root:root tag:nil]; + return [model autorelease]; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/ChildCollection.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/ChildCollection.h new file mode 100644 index 0000000..a29d65c --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/ChildCollection.h @@ -0,0 +1,33 @@ +// +// ChildCollection.h +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + + +@interface ChildCollection : NSObject { + NSMutableArray *children; + id parent; +} + +- (id) initWithParent:(id)theParent; + +@property (nonatomic, readonly) int count; + +- (id)itemAt:(int)index; +- (void)setItem:(id)item at:(int)index; + +- (void)add:(id)item; +- (void)insert:(id)item at:(int)index; + +- (void)remove:(id)item; +- (void)removeAt:(int)index; + +- (id)getParentOf:(id)child; +- (void)setParentOf:(id)child to:(id)theParent; + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/ChildCollection.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/ChildCollection.m new file mode 100644 index 0000000..5d266a7 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/ChildCollection.m @@ -0,0 +1,75 @@ +// +// ChildCollection.m +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "ChildCollection.h" + + +@implementation ChildCollection + +- (id) initWithParent:(id)theParent +{ + self = [super init]; + if (self != nil) { + children = [[NSMutableArray alloc] init]; + parent = theParent; + } + return self; +} + +- (int) count { + return [children count]; +} + +- (id)itemAt:(int)index { + return [children objectAtIndex:index]; +} + +- (void)setItem:(id)item at:(int)index{ + [self setParentOf:[self itemAt:index] to:nil]; + [self setParentOf:item to:parent]; + [children replaceObjectAtIndex:index withObject:item]; +} + +- (void)add:(id)item{ + [self setParentOf:item to:parent]; + [children addObject:item]; +} + +- (void)insert:(id)item at:(int)index{ + [self setParentOf:item to:parent]; + [children insertObject:item atIndex:index]; +} + +- (void)remove:(id)item{ + [self setParentOf:item to:nil]; + [children removeObject:item]; +} + +- (void)removeAt:(int)index{ + [self setParentOf:[self itemAt:index] to:nil]; + [children removeObjectAtIndex:index]; +} + +- (NSUInteger) countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len { + return [children countByEnumeratingWithState:state objects:stackbuf count:len]; +} + + +// Override this methods in the child implementation. +- (id)getParentOf:(id)child {return nil;} + +- (void)setParentOf:(id)child to:(id)theParent {} + +- (void) dealloc +{ + [children release]; + [super dealloc]; +} + + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentImporter.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentImporter.h index 51d0b42..efb85af 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentImporter.h +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentImporter.h @@ -8,11 +8,10 @@ #import +#import "IContentImporter.h" -@interface ContentImporter : NSObject { +@interface ContentImporter : NSObject { } -- (id) importFile:(NSString*)filename; - @end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentItem.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentItem.h index f0d7749..8710882 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentItem.h +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentItem.h @@ -13,10 +13,11 @@ @interface ContentItem : NSObject { ContentIdentity *identity; NSString *name; + OpaqueDataDictionary *opaqueData; } @property (nonatomic, retain) ContentIdentity *identity; @property (nonatomic, retain) NSString *name; +@property (nonatomic, readonly) OpaqueDataDictionary *opaqueData; - -@end +@end \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentItem.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentItem.m index 5292450..6fa697f 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentItem.m +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentItem.m @@ -8,10 +8,28 @@ #import "ContentItem.h" +#import "Retronator.Xni.Framework.Content.Pipeline.h" @implementation ContentItem -@synthesize identity; -@synthesize name; +- (id) init +{ + self = [super init]; + if (self != nil) { + identity = [[ContentIdentity alloc] init]; + opaqueData = [[OpaqueDataDictionary alloc] init]; + } + return self; +} + +@synthesize identity, name, opaqueData; + +- (void) dealloc +{ + [ContentIdentity release]; + [opaqueData release]; + [super dealloc]; +} + @end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentProcessor.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentProcessor.h new file mode 100644 index 0000000..d6e75d7 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentProcessor.h @@ -0,0 +1,17 @@ +// +// ContentProcessor.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "IContentProcessor.h" + +@interface ContentProcessor : NSObject { + +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentProcessor.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentProcessor.m new file mode 100644 index 0000000..5c89d4e --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/ContentProcessor.m @@ -0,0 +1,21 @@ +// +// ContentProcessor.m +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "ContentProcessor.h" + + +@implementation ContentProcessor + +- (Class) inputType { return nil;} +- (Class) outputType { return nil;} + +- (id) process:(id)input { + return input; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/ExternalReference.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/ExternalReference.h new file mode 100644 index 0000000..cb25783 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/ExternalReference.h @@ -0,0 +1,24 @@ +// +// ExternalReference.h +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.Content.Pipeline.classes.h" + +#import "ContentItem.h" + +@interface ExternalReference : ContentItem { + NSString *filename; +} + +- (id) initWithFilename:(NSString*)theFilename; +- (id) initWithFilename:(NSString *)theFilename relativeToContent:(ContentIdentity*)relativeToContent; + +@property (nonatomic, retain) NSString *filename; + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/ExternalReference.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/ExternalReference.m new file mode 100644 index 0000000..4c8e6f2 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/ExternalReference.m @@ -0,0 +1,39 @@ +// +// ExternalReference.m +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "ExternalReference.h" + +#import "Retronator.Xni.Framework.Content.Pipeline.h" + +@implementation ExternalReference + +- (id) initWithFilename:(NSString *)theFilename +{ + self = [super init]; + if (self != nil) { + filename = [theFilename retain]; + } + return self; +} + +- (id) initWithFilename:(NSString *)theFilename relativeToContent:(ContentIdentity *)relativeToContent { + /*NSString *absoluteFilename = [NSString pathWithComponents:[NSArray arrayWithObjects:@"/", relativeToContent.sourceFilename, theFilename, nil]]; + return [self initWithFilename:[absoluteFilename stringByStandardizingPath]];*/ + return [self initWithFilename:theFilename]; +} + +@synthesize filename; + +- (void) dealloc +{ + [filename release]; + [super dealloc]; +} + + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BasicMaterialContent.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BasicMaterialContent.h new file mode 100644 index 0000000..2cd7df9 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BasicMaterialContent.h @@ -0,0 +1,35 @@ +// +// BasicMaterialContent.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.classes.h" + +#import "MaterialContent.h" + +@interface BasicMaterialContent : MaterialContent { + +} + +@property (nonatomic, readonly) NSString *alphaKey; +@property (nonatomic, readonly) NSString *diffuseColorKey; +@property (nonatomic, readonly) NSString *emissiveColorKey; +@property (nonatomic, readonly) NSString *specularColorKey; +@property (nonatomic, readonly) NSString *specularPowerKey; +@property (nonatomic, readonly) NSString *textureKey; +@property (nonatomic, readonly) NSString *vertexColorEnabledKey; + +@property (nonatomic, retain) NSNumber *alpha; +@property (nonatomic, retain) Vector3 *diffuseColor; +@property (nonatomic, retain) Vector3 *emissiveColor; +@property (nonatomic, retain) Vector3 *specularColor; +@property (nonatomic, retain) NSNumber *specularPower; +@property (nonatomic, retain) ExternalReference *texture; +@property (nonatomic, retain) NSNumber *vertexColorEnabled; + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BasicMaterialContent.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BasicMaterialContent.m new file mode 100644 index 0000000..0183ae5 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BasicMaterialContent.m @@ -0,0 +1,101 @@ +// +// BasicMaterialContent.m +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "BasicMaterialContent.h" + +#import "Retronator.Xni.Framework.h" +#import "Retronator.Xni.Framework.Content.Pipeline.h" + +@implementation BasicMaterialContent + +- (NSString *) alphaKey { + return @"BasicMaterialAlpha"; +} + +- (NSString *) diffuseColorKey { + return @"BasicMaterialDiffuseColor"; +} + +- (NSString *) emissiveColorKey { + return @"BasicMaterialEmissiveColor"; +} + +- (NSString *) specularColorKey { + return @"BasicMaterialSpecularColor"; +} + +- (NSString *) specularPowerKey { + return @"BasicMaterialSpecularPower"; +} + +- (NSString *) textureKey { + return @"BasicMaterialTexture"; +} + +- (NSString *) vertexColorEnabledKey { + return @"BasicMaterialVertexColorEnabled"; +} + + +- (NSNumber *) alpha { + return [opaqueData itemForKey:self.alphaKey]; +} + +- (void) setAlpha:(NSNumber *)value { + [opaqueData set:value forKey:self.alphaKey]; +} + +- (Vector3 *) diffuseColor { + return [opaqueData itemForKey:self.diffuseColorKey]; +} + +- (void) setDiffuseColor:(Vector3 *)value { + [opaqueData set:value forKey:self.diffuseColorKey]; +} + +- (Vector3 *) emissiveColor { + return [opaqueData itemForKey:self.emissiveColorKey]; +} + +- (void) setEmissiveColor:(Vector3 *)value { + [opaqueData set:value forKey:self.emissiveColorKey]; +} + +- (Vector3 *) specularColor { + return [opaqueData itemForKey:self.specularColorKey]; +} + +- (void) setSpecularColor:(Vector3 *)value { + [opaqueData set:value forKey:self.specularColorKey]; +} + +- (NSNumber *) specularPower { + return [opaqueData itemForKey:self.specularPowerKey]; +} + +- (void) setSpecularPower:(NSNumber *)value { + [opaqueData set:value forKey:self.specularPowerKey]; +} + +- (ExternalReference *) texture { + return [opaqueData itemForKey:self.textureKey]; +} + +- (void) setTexture:(ExternalReference *)value { + [opaqueData set:value forKey:self.textureKey]; +} + +- (NSNumber *) vertexColorEnabled { + return [opaqueData itemForKey:self.vertexColorEnabledKey]; +} + +- (void) setVertexColorEnabled:(NSNumber *)value { + [opaqueData set:value forKey:self.vertexColorEnabledKey]; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/GeometryContent.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/GeometryContent.h new file mode 100644 index 0000000..b331f16 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/GeometryContent.h @@ -0,0 +1,28 @@ +// +// GeometryContent.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "ContentItem.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.classes.h" + +@interface GeometryContent : ContentItem { + IndexCollection *indices; + MaterialContent *material; + MeshContent *parent; + VertexContent *vertices; +} + +- (id) initWithPositions:(PositionCollection*)thePositions; + +@property (nonatomic, readonly) IndexCollection *indices; +@property (nonatomic, retain) MaterialContent *material; +@property (nonatomic, retain) MeshContent *parent; +@property (nonatomic, readonly) VertexContent *vertices; + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/GeometryContent.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/GeometryContent.m new file mode 100644 index 0000000..93c146e --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/GeometryContent.m @@ -0,0 +1,37 @@ +// +// GeometryContent.m +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "GeometryContent.h" + +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" + +@implementation GeometryContent + +- (id) initWithPositions:(PositionCollection*)thePositions; +{ + self = [super init]; + if (self != nil) { + indices = [[IndexCollection alloc] init]; + vertices = [[VertexContent alloc] initWithPositions:thePositions]; + } + return self; +} + +@synthesize indices, material, parent, vertices; + +- (void) dealloc +{ + [material release]; + [parent release]; + [indices release]; + [vertices release]; + [super dealloc]; +} + + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/GeometryContentCollection.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/GeometryContentCollection.h new file mode 100644 index 0000000..428a4e2 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/GeometryContentCollection.h @@ -0,0 +1,17 @@ +// +// GeometryContentCollection.h +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "ChildCollection.h" + +@interface GeometryContentCollection : ChildCollection { + +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/GeometryContentCollection.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/GeometryContentCollection.m new file mode 100644 index 0000000..e0f49d0 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/GeometryContentCollection.m @@ -0,0 +1,23 @@ +// +// GeometryContentCollection.m +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "GeometryContentCollection.h" + +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" + +@implementation GeometryContentCollection + +- (MeshContent*) getParentOf:(GeometryContent*)child { + return child.parent; +} + +- (void) setParentOf:(GeometryContent*)child to:(MeshContent*)theParent { + child.parent = theParent; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/IndexCollection.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/IndexCollection.h new file mode 100644 index 0000000..46915d4 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/IndexCollection.h @@ -0,0 +1,17 @@ +// +// IndexCollection.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#define Collection IndexCollection +#define T NSNumber* + +#include "Collection.h" + +#undef Collection +#undef T \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/IndexCollection.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/IndexCollection.m new file mode 100644 index 0000000..8cf364d --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/IndexCollection.m @@ -0,0 +1,18 @@ +// +// IndexCollection.m +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "IndexCollection.h" + + +#define Collection IndexCollection +#define T NSNumber* + +#include "Collection.m.h" + +#undef Collection +#undef T \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/IndirectPositionCollection.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/IndirectPositionCollection.h new file mode 100644 index 0000000..6bd9de6 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/IndirectPositionCollection.h @@ -0,0 +1,24 @@ +// +// IndirectPositionCollection.h +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.classes.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.classes.h" + +@interface IndirectPositionCollection : NSObject { + VertexChannel *positionIndices; + PositionCollection *positions; +} + +- (id) initWithPositionIndices:(VertexChannel*)thePositionIndices positions:(PositionCollection*)thePositions; + +- (Vector3*)itemAt:(int)index; +- (void)setItem:(Vector3*)item at:(int)index; + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/IndirectPositionCollection.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/IndirectPositionCollection.m new file mode 100644 index 0000000..a9c7514 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/IndirectPositionCollection.m @@ -0,0 +1,43 @@ +// +// IndirectPositionCollection.m +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "IndirectPositionCollection.h" + +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" + +@implementation IndirectPositionCollection + +- (id) initWithPositionIndices:(VertexChannel*)thePositionIndices positions:(PositionCollection*)thePositions +{ + self = [super init]; + if (self != nil) { + positionIndices = [thePositionIndices retain]; + positions = [thePositions retain]; + } + return self; +} + +- (Vector3*)itemAt:(int)index { + NSNumber *positionIndex = [positionIndices itemAt:index]; + return [positions itemAt:[positionIndex intValue]]; +} + +- (void)setItem:(Vector3*)item at:(int)index { + NSNumber *positionIndex = [positionIndices itemAt:index]; + [positions setItem:item at:[positionIndex intValue]]; +} + +- (void) dealloc +{ + [positionIndices release]; + [positions release]; + [super dealloc]; +} + + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MaterialContent.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MaterialContent.h new file mode 100644 index 0000000..9cf38da --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MaterialContent.h @@ -0,0 +1,21 @@ +// +// MaterialContent.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.classes.h" + +#import "ContentItem.h" + +@interface MaterialContent : ContentItem { + TextureReferenceDictionary *textures; +} + +@property (nonatomic, readonly) TextureReferenceDictionary *textures; + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MaterialContent.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MaterialContent.m new file mode 100644 index 0000000..b33b66c --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MaterialContent.m @@ -0,0 +1,33 @@ +// +// MaterialContent.m +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "MaterialContent.h" + +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" + +@implementation MaterialContent + +- (id) init +{ + self = [super init]; + if (self != nil) { + textures = [[TextureReferenceDictionary alloc] init]; + } + return self; +} + +@synthesize textures; + +- (void) dealloc +{ + [textures release]; + [super dealloc]; +} + + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MeshContent.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MeshContent.h new file mode 100644 index 0000000..3a054e9 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MeshContent.h @@ -0,0 +1,22 @@ +// +// MeshContent.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "NodeContent.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.classes.h" + +@interface MeshContent : NodeContent { + GeometryContentCollection *geometry; + PositionCollection *positions; +} + +@property (nonatomic, readonly) GeometryContentCollection *geometry; +@property (nonatomic, readonly) PositionCollection *positions; + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MeshContent.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MeshContent.m new file mode 100644 index 0000000..4218b25 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MeshContent.m @@ -0,0 +1,35 @@ +// +// MeshContent.m +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "MeshContent.h" + +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" + +@implementation MeshContent + +- (id) init +{ + self = [super init]; + if (self != nil) { + geometry = [[GeometryContentCollection alloc] initWithParent:self]; + positions = [[PositionCollection alloc] init]; + } + return self; +} + +@synthesize geometry, positions; + +- (void) dealloc +{ + [geometry release]; + [positions release]; + [super dealloc]; +} + + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MipmapChain.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MipmapChain.h index d3cfba0..46149fb 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MipmapChain.h +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MipmapChain.h @@ -20,3 +20,4 @@ - (void)insertObject:(BitmapContent*)anObject atIndex:(NSUInteger)index; @end + diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MipmapChainCollection.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MipmapChainCollection.h index 02dc24e..26ed291 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MipmapChainCollection.h +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MipmapChainCollection.h @@ -6,17 +6,12 @@ // Copyright 2010 Retronator. All rights reserved. // -#import - #import "Retronator.Xni.Framework.Content.Pipeline.Graphics.classes.h" -@interface MipmapChainCollection : NSObject { - NSMutableArray *collection; -} +#define Collection MipmapChainCollection +#define T MipmapChain* -- (int) count; -- (MipmapChain*)objectAtIndex:(NSUInteger)index; -- (void)addObject:(MipmapChain*)anObject; -- (void)insertObject:(MipmapChain*)anObject atIndex:(NSUInteger)index; +#include "Collection.h" -@end +#undef Collection +#undef T \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MipmapChainCollection.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MipmapChainCollection.m index 8e66431..494d7d7 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MipmapChainCollection.m +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/MipmapChainCollection.m @@ -10,37 +10,10 @@ #import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" -@implementation MipmapChainCollection +#define Collection MipmapChainCollection +#define T MipmapChain* -- (id) init -{ - self = [super init]; - if (self != nil) { - collection = [[NSMutableArray alloc] init]; - } - return self; -} +#include "Collection.m.h" -- (int) count { - return [collection count]; -} - -- (MipmapChain*)objectAtIndex:(NSUInteger)index { - return (MipmapChain*)[collection objectAtIndex:index]; -} - -- (void)addObject:(MipmapChain*)anObject { - [collection addObject:anObject]; -} - -- (void)insertObject:(MipmapChain*)anObject atIndex:(NSUInteger)index { - [collection insertObject:anObject atIndex:index]; -} - -- (void) dealloc -{ - [collection dealloc]; - [super dealloc]; -} - -@end +#undef Collection +#undef T \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/NodeContent.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/NodeContent.h new file mode 100644 index 0000000..3e3fefa --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/NodeContent.h @@ -0,0 +1,27 @@ +// +// NodeContent.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.classes.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.classes.h" + +#import "ContentItem.h" + +@interface NodeContent : ContentItem { + NodeContentCollection *children; + NodeContent *parent; + Matrix *transform; +} + +@property (nonatomic, readonly) NodeContentCollection *children; +@property (nonatomic, retain) NodeContent *parent; +@property (nonatomic, retain) Matrix *transform; +@property (nonatomic, readonly) Matrix *absoluteTransform; + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/NodeContent.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/NodeContent.m new file mode 100644 index 0000000..f2d73d9 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/NodeContent.m @@ -0,0 +1,49 @@ +// +// NodeContent.m +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "NodeContent.h" + +#import "Retronator.Xni.Framework.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" + +@implementation NodeContent + +- (id) init +{ + self = [super init]; + if (self != nil) { + children = [[NodeContentCollection alloc] initWithParent:self]; + transform = [[Matrix identity] retain]; + } + return self; +} + +@synthesize children, parent, transform; + +- (Matrix *) absoluteTransform { + if (!parent) { + // Create a new matrix in the root node. + return [Matrix matrixWithMatrix:transform]; + } else { + // Multiply the passed down matrix with itself. + return [parent.absoluteTransform multiplyBy:transform]; + } +} + +- (void) dealloc +{ + [transform release]; + [children release]; + [parent release]; + [super dealloc]; +} + + + + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/NodeContentCollection.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/NodeContentCollection.h new file mode 100644 index 0000000..86717d8 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/NodeContentCollection.h @@ -0,0 +1,17 @@ +// +// NodeContentCollection.h +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "ChildCollection.h" + +@interface NodeContentCollection : ChildCollection { + +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/NodeContentCollection.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/NodeContentCollection.m new file mode 100644 index 0000000..a9f2351 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/NodeContentCollection.m @@ -0,0 +1,23 @@ +// +// NodeContentCollection.m +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "NodeContentCollection.h" + +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" + +@implementation NodeContentCollection + +- (NodeContent*) getParentOf:(NodeContent*)child { + return child.parent; +} + +- (void) setParentOf:(NodeContent*)child to:(NodeContent*)theParent { + child.parent = theParent; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PositionCollection.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PositionCollection.h new file mode 100644 index 0000000..67bf6ea --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PositionCollection.h @@ -0,0 +1,17 @@ +// +// PositionCollection.h +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "Retronator.Xni.Framework.classes.h" + +#define Collection PositionCollection +#define T Vector3* + +#include "Collection.h" + +#undef Collection +#undef T \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PositionCollection.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PositionCollection.m new file mode 100644 index 0000000..3c0416f --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PositionCollection.m @@ -0,0 +1,19 @@ +// +// PositionCollection.m +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "PositionCollection.h" + +#import "Retronator.Xni.Framework.h" + +#define Collection PositionCollection +#define T Vector3* + +#include "Collection.m.h" + +#undef Collection +#undef T \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/Retronator.Xni.Framework.Content.Pipeline.Graphics.classes.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/Retronator.Xni.Framework.Content.Pipeline.Graphics.classes.h index 18c9372..85a4c50 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/Retronator.Xni.Framework.Content.Pipeline.Graphics.classes.h +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/Retronator.Xni.Framework.Content.Pipeline.Graphics.classes.h @@ -1,8 +1,12 @@ - @class BitmapContent, PixelBitmapContent; - @class MipmapChain, MipmapChainCollection; - @class TextureContent, Texture2DContent; -@class VectorConverter; \ No newline at end of file +@class VectorConverter; + +@class NodeContent, NodeContentCollection; +@class MeshContent, GeometryContentCollection, PositionCollection; +@class GeometryContent, VertexContent, VertexChannelCollection, VertexChannel, IndirectPositionCollection; +@class VertexChannelNames, IndexCollection; +@class MaterialContent, BasicMaterialContent; +@class TextureReferenceDictionary; \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/Retronator.Xni.Framework.Content.Pipeline.Graphics.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/Retronator.Xni.Framework.Content.Pipeline.Graphics.h index feff718..2b6d65a 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/Retronator.Xni.Framework.Content.Pipeline.Graphics.h +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/Retronator.Xni.Framework.Content.Pipeline.Graphics.h @@ -8,4 +8,25 @@ #import "TextureContent.h" #import "Texture2DContent.h" -#import "VectorConverter.h" \ No newline at end of file +#import "VectorConverter.h" + +#import "NodeContent.h" +#import "NodeContentCollection.h" + +#import "MeshContent.h" +#import "GeometryContentCollection.h" +#import "PositionCollection.h" + +#import "GeometryContent.h" +#import "VertexContent.h" +#import "VertexChannelCollection.h" +#import "VertexChannel.h" +#import "IndirectPositionCollection.h" + +#import "VertexChannelNames.h" +#import "IndexCollection.h" + +#import "MaterialContent.h" +#import "BasicMaterialContent.h" + +#import "TextureReferenceDictionary.h" \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/Texture2DContent.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/Texture2DContent.m index 78edc50..e6ec432 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/Texture2DContent.m +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/Texture2DContent.m @@ -21,11 +21,11 @@ } - (MipmapChain*) mipmaps { - return [[self faces] objectAtIndex:0]; + return [[self faces] itemAt:0]; } - (void) setMipmaps:(MipmapChain *)value { - [[self faces] insertObject:value atIndex:0]; + [[self faces] insert:value at:0]; } - (void) validateWithGraphicsProfile:(GraphicsProfile)targetProfile { diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/TextureContent.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/TextureContent.h index 5cbade5..b119e8f 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/TextureContent.h +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/TextureContent.h @@ -10,7 +10,9 @@ #import "Retronator.Xni.Framework.Content.Pipeline.Graphics.classes.h" -@interface TextureContent : NSObject { +#import "ContentItem.h" + +@interface TextureContent : ContentItem { MipmapChainCollection *faces; } diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/TextureReferenceDictionary.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/TextureReferenceDictionary.h new file mode 100644 index 0000000..081a654 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/TextureReferenceDictionary.h @@ -0,0 +1,19 @@ +// +// TextureReferenceDictionary.h +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.Content.Pipeline.classes.h" + +#define NamedValueDictionary TextureReferenceDictionary +#define T ExternalReference* + +#include "NamedValueDictionary.h" + +#undef NamedValueDictionary +#undef T \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/TextureReferenceDictionary.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/TextureReferenceDictionary.m new file mode 100644 index 0000000..7030bdf --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/TextureReferenceDictionary.m @@ -0,0 +1,18 @@ +// +// TextureReferenceDictionary.m +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "TextureReferenceDictionary.h" + + +#define NamedValueDictionary TextureReferenceDictionary +#define T ExternalReference* + +#include "NamedValueDictionary.m.h" + +#undef NamedValueDictionary +#undef T \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannel.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannel.h new file mode 100644 index 0000000..61b284e --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannel.h @@ -0,0 +1,35 @@ +// +// VertexChannel.h +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +@interface VertexChannel : NSObject { + NSMutableArray *collection; + Class elementType; + NSString *name; +} + +- (id) initWithElementType:(Class)theElementType name:(NSString*)theName channelData:(NSArray*)channelData; + +@property (nonatomic, readonly) int count; +@property (nonatomic, readonly) Class elementType; +@property (nonatomic, readonly) NSString *name; + +- (id)itemAt:(int)index; +- (void)setItem:(id)item at:(int)index; + +- (void)add:(id)item; +- (void)insert:(id)item at:(int)index; + +- (void)remove:(id)item; +- (void)removeAt:(int)index; + +- (void) clear; + +@end + diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannel.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannel.m new file mode 100644 index 0000000..647de8b --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannel.m @@ -0,0 +1,69 @@ +// +// VertexChannel.m +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "VertexChannel.h" + + +@implementation VertexChannel + +- (id) initWithElementType:(Class)theElementType name:(NSString*)theName channelData:(NSArray*)channelData +{ + self = [super init]; + if (self != nil) { + collection = [[NSMutableArray alloc] initWithArray:channelData]; + elementType = theElementType; + name = theName; + } + return self; +} + +@synthesize elementType, name; + +- (int) count { + return [collection count]; +} + +- (id)itemAt:(int)index { + return [collection objectAtIndex:index]; +} + +- (void)setItem:(id)item at:(int)index { + return [collection replaceObjectAtIndex:index withObject:item]; +} + +- (void)add:(id)item { + [collection addObject:item]; +} + +- (void)insert:(id)item at:(int)index { + [collection insertObject:item atIndex:index]; +} + +- (void)remove:(id)item { + [collection removeObject:item]; +} + +- (void)removeAt:(int)index { + [collection removeObjectAtIndex:index]; +} + +- (void) clear { + [collection removeAllObjects]; +} + +- (NSUInteger) countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len { + return [collection countByEnumeratingWithState:state objects:stackbuf count:len]; +} + +- (void) dealloc +{ + [collection dealloc]; + [super dealloc]; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannelCollection.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannelCollection.h new file mode 100644 index 0000000..af436f3 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannelCollection.h @@ -0,0 +1,36 @@ +// +// VertexChannelCollection.h +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.classes.h" + +@interface VertexChannelCollection : NSObject { + NSMutableArray *channels; + NSMutableDictionary *channelsByNames; + VertexContent *parent; +} + +- (id) initWithParent:(VertexContent*)theParent; + +@property (nonatomic, readonly) int count; + +- (VertexChannel*)itemAt:(int)index; +- (void)setItem:(VertexChannel*)item at:(int)index; + +- (VertexChannel*)itemWithName:(NSString*)name; + +- (void)addChannelWithName:(NSString*)name elementType:(Class)elementType channelData:(NSArray*)channelData; +- (void)insertChannelWithName:(NSString*)name elementType:(Class)elementType channelData:(NSArray*)channelData at:(int)index; + +- (void)remove:(VertexChannel*)item; +- (void)removeAt:(int)index; +- (void)removeChannelWithName:(NSString*)name; + +- (void) clear; + +@end + diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannelCollection.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannelCollection.m new file mode 100644 index 0000000..3632cb8 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannelCollection.m @@ -0,0 +1,93 @@ +// +// VertexChannelCollection.m +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "VertexChannelCollection.h" + +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" + +@implementation VertexChannelCollection + +- (id) initWithParent:(VertexContent*)theParent +{ + self = [super init]; + if (self != nil) { + channels = [[NSMutableArray alloc] init]; + channelsByNames = [[NSMutableDictionary alloc] init]; + parent = theParent; + } + return self; +} + +- (int) count { + return [channels count]; +} + +- (VertexChannel*)itemAt:(int)index { + return [channels objectAtIndex:index]; +} + +- (void)setItem:(VertexChannel*)item at:(int)index { + VertexChannel* existing = [channels objectAtIndex:index]; + [channelsByNames removeObjectForKey:existing.name]; + return [channels replaceObjectAtIndex:index withObject:item]; +} + +- (VertexChannel*)itemWithName:(NSString*)name { + return [channelsByNames objectForKey:name]; +} + +- (void)addChannelWithName:(NSString*)name elementType:(Class)elementType channelData:(NSArray*)channelData { + [self insertChannelWithName:name elementType:elementType channelData:channelData at:[channels count]]; +} + +- (void)insertChannelWithName:(NSString*)name elementType:(Class)elementType channelData:(NSArray*)channelData at:(int)index { + if (!channelData) { + // Fill the channel with default values. + NSMutableArray *data = [NSMutableArray arrayWithCapacity:parent.vertexCount]; + for (int i = 0; i < parent.vertexCount; i++) { + [data addObject:[[[elementType alloc] init] autorelease]]; + } + channelData = data; + } + VertexChannel *channel = [[[VertexChannel alloc] initWithElementType:elementType name:name channelData:channelData] autorelease]; + [channels insertObject:channel atIndex:index]; + [channelsByNames setObject:channel forKey:name]; +} + +- (void)remove:(VertexChannel*)item { + [channels removeObject:item]; + [channelsByNames removeObjectForKey:item.name]; +} + +- (void)removeAt:(int)index { + VertexChannel *channel = [channels objectAtIndex:index]; + [self remove:channel]; +} + +- (void) removeChannelWithName:(NSString *)name { + VertexChannel *channel = [self itemWithName:name]; + [self remove:channel]; +} + +- (void) clear { + [channels removeAllObjects]; + [channelsByNames removeAllObjects]; +} + +- (NSUInteger) countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len { + return [channels countByEnumeratingWithState:state objects:stackbuf count:len]; +} + +- (void) dealloc +{ + [channels dealloc]; + [channelsByNames dealloc]; + [super dealloc]; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannelNames.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannelNames.h new file mode 100644 index 0000000..b917191 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannelNames.h @@ -0,0 +1,33 @@ +// +// VertexChannelNames.h +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.Graphics.classes.h" + +@interface VertexChannelNames : NSObject { + +} + ++ (NSString*) encodeName:(NSString*)baseName usageIndex:(int)usageIndex; ++ (NSString*) encodeUsage:(VertexElementUsage)vertexElementUsage usageIndex:(int)usageIndex; + ++ (NSString*) decodeBaseName:(NSString*)encodedName; ++ (int) decodeUsageIndex:(NSString*)encodedName; ++ (BOOL) tryDecodeUsage:(NSString*)encodedName usage:(VertexElementUsage*)usage; + ++ (NSString*) binormalWithUsageIndex:(int)usageIndex; ++ (NSString*) colorWithUsageIndex:(int)usageIndex; ++ (NSString*) normal; ++ (NSString*) normalWithUsageIndex:(int)usageIndex; ++ (NSString*) tangentWithUsageIndex:(int)usageIndex; ++ (NSString*) textureCoordinateWithUsageIndex:(int)usageIndex; ++ (NSString*) weights; ++ (NSString*) weightsWithUsageIndex:(int)usageIndex; + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannelNames.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannelNames.m new file mode 100644 index 0000000..5af1cc6 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexChannelNames.m @@ -0,0 +1,153 @@ +// +// VertexChannelNames.m +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "VertexChannelNames.h" + +@interface VertexChannelNames () + ++ (NSString*) getNameForUsage:(VertexElementUsage)vertexElementUsage; ++ (BOOL) tryGetUsageForName:(NSString *)name usage:(VertexElementUsage*)usage; + +@end + + +@implementation VertexChannelNames + ++ (NSString*) getNameForUsage:(VertexElementUsage)vertexElementUsage { + switch (vertexElementUsage) { + case VertexElementUsageColor: + return @"Color"; + case VertexElementUsageNormal: + return @"Normal"; + case VertexElementUsagePointSize: + return @"PointSize"; + case VertexElementUsagePosition: + return @"Position"; + case VertexElementUsageTextureCoordinate: + return @"TextureCoordinate"; + case VertexElementUsageBinormal: + return @"Binormal"; + case VertexElementUsageBlendIndices: + return @"BlendIndices"; + case VertexElementUsageBlendWeight: + return @"BlendWeight"; + case VertexElementUsageDepth: + return @"Depth"; + case VertexElementUsageFog: + return @"Fog"; + case VertexElementUsageSample: + return @"Sample"; + case VertexElementUsageTangent: + return @"Tangent"; + case VertexElementUsageTessellateFactor: + return @"TessellateFactor"; + default: + [NSException raise:@"InvalidArgumentException" format:@"VertexElementUsage %i is not supported", vertexElementUsage]; + return @""; + } +} + ++ (BOOL) tryGetUsageForName:(NSString *)name usage:(VertexElementUsage*)usage { + if ([name isEqualToString:@"Color"]) { + *usage = VertexElementUsageColor; + return YES; + } else if ([name isEqualToString:@"Normal"]) { + *usage = VertexElementUsageNormal; + return YES; + } else if ([name isEqualToString:@"PointSize"]) { + *usage = VertexElementUsagePointSize; + return YES; + } else if ([name isEqualToString:@"Position"]) { + *usage = VertexElementUsagePosition; + return YES; + } else if ([name isEqualToString:@"TextureCoordinate"]) { + *usage = VertexElementUsageTextureCoordinate; + return YES; + } else if ([name isEqualToString:@"Binormal"]) { + *usage = VertexElementUsageBinormal; + return YES; + } else if ([name isEqualToString:@"BlendIndices"]) { + *usage = VertexElementUsageBlendIndices; + return YES; + } else if ([name isEqualToString:@"BlendWeight"]) { + *usage = VertexElementUsageBlendWeight; + return YES; + } else if ([name isEqualToString:@"Depth"]) { + *usage = VertexElementUsageDepth; + return YES; + } else if ([name isEqualToString:@"Fog"]) { + *usage = VertexElementUsageFog; + return YES; + } else if ([name isEqualToString:@"Sample"]) { + *usage = VertexElementUsageSample; + return YES; + } else if ([name isEqualToString:@"Tangent"]) { + *usage = VertexElementUsageTangent; + return YES; + } else if ([name isEqualToString:@"TessellateFactor"]) { + *usage = VertexElementUsageTessellateFactor; + return YES; + } else { + return NO; + } +} + ++ (NSString*) encodeName:(NSString*)baseName usageIndex:(int)usageIndex { + return [NSString stringWithFormat:@"%@-%i", baseName, usageIndex]; +} + ++ (NSString*) encodeUsage:(VertexElementUsage)vertexElementUsage usageIndex:(int)usageIndex { + return [VertexChannelNames encodeName:[VertexChannelNames getNameForUsage:vertexElementUsage] usageIndex:usageIndex]; +} + ++ (NSString*) decodeBaseName:(NSString*)encodedName { + return [[encodedName componentsSeparatedByString:@"-"] objectAtIndex:0]; +} + ++ (int) decodeUsageIndex:(NSString*)encodedName { + NSString *index = [[encodedName componentsSeparatedByString:@"-"] objectAtIndex:1]; + return [index intValue]; +} + ++ (BOOL) tryDecodeUsage:(NSString*)encodedName usage:(VertexElementUsage*)usage { + return [VertexChannelNames tryGetUsageForName:[VertexChannelNames decodeBaseName:encodedName] usage:usage]; +} + ++ (NSString*) binormalWithUsageIndex:(int)usageIndex { + return [VertexChannelNames encodeUsage:VertexElementUsageBinormal usageIndex:usageIndex]; +} + ++ (NSString*) colorWithUsageIndex:(int)usageIndex { + return [VertexChannelNames encodeUsage:VertexElementUsageColor usageIndex:usageIndex]; +} + ++ (NSString*) normal { + return [VertexChannelNames encodeUsage:VertexElementUsageNormal usageIndex:0]; +} + ++ (NSString*) normalWithUsageIndex:(int)usageIndex { + return [VertexChannelNames encodeUsage:VertexElementUsageNormal usageIndex:usageIndex]; +} + ++ (NSString*) tangentWithUsageIndex:(int)usageIndex { + return [VertexChannelNames encodeUsage:VertexElementUsageTangent usageIndex:usageIndex]; +} + ++ (NSString*) textureCoordinateWithUsageIndex:(int)usageIndex { + return [VertexChannelNames encodeUsage:VertexElementUsageTextureCoordinate usageIndex:usageIndex]; +} + ++ (NSString*) weights { + return [VertexChannelNames encodeUsage:VertexElementUsageBlendWeight usageIndex:0]; +} + ++ (NSString*) weightsWithUsageIndex:(int)usageIndex { + return [VertexChannelNames encodeUsage:VertexElementUsageBlendWeight usageIndex:usageIndex]; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexContent.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexContent.h new file mode 100644 index 0000000..187ca8a --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexContent.h @@ -0,0 +1,39 @@ +// +// VertexContent.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.classes.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Processors.classes.h" + +@interface VertexContent : NSObject { + VertexChannelCollection *channels; + VertexChannel *positionIndices; + IndirectPositionCollection *positions; + int vertexCount; +} + +- (id) initWithPositions:(PositionCollection*)thePositions; + +@property (nonatomic, readonly) VertexChannelCollection *channels; +@property (nonatomic, readonly) VertexChannel *positionIndices; +@property (nonatomic, readonly) IndirectPositionCollection *positions; +@property (nonatomic, readonly) int vertexCount; + +- (int) add:(int)positionIndex; +- (void) addRange:(NSArray*)positionIndexCollection; + +- (void) insert:(int)positionIndex at:(int)index; +- (void) insertRange:(NSArray*)positionIndexCollection at:(int)index; + +- (void) removeAt:(int)index; +- (void) removeRangeAt:(int)index count:(int)count; + +- (VertexBufferContent*) createVertexBuffer; + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexContent.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexContent.m new file mode 100644 index 0000000..024afbe --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VertexContent.m @@ -0,0 +1,140 @@ +// +// VertexContent.m +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "VertexContent.h" + +#import "Retronator.Xni.Framework.h" +#import "Retronator.Xni.Framework.Graphics.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Processors.h" + +@implementation VertexContent + +- (id) initWithPositions:(PositionCollection*)thePositions +{ + self = [super init]; + if (self != nil) { + channels = [[VertexChannelCollection alloc] initWithParent:self]; + positionIndices = [[IndexCollection alloc] init]; + positions = [[IndirectPositionCollection alloc] initWithPositionIndices:positionIndices positions:thePositions]; + } + return self; +} + +@synthesize channels, positionIndices, positions, vertexCount; + +- (int) add:(int)positionIndex { + for (VertexChannel *channel in channels) { + [channel add:[[[channel.elementType alloc] init] autorelease]]; + } + [positionIndices add:[NSNumber numberWithInt:positionIndex]]; + vertexCount++; + return vertexCount-1; +} + +- (void) addRange:(NSArray*)positionIndexCollection { + for (NSNumber *positionIndex in positionIndexCollection) { + [self add:[positionIndex intValue]]; + } +} + +- (void) insert:(int)positionIndex at:(int)index { + for (VertexChannel *channel in channels) { + [channel insert:[[[channel.elementType alloc] init] autorelease] at:index]; + } + [positionIndices insert:[NSNumber numberWithInt:positionIndex] at:index]; + vertexCount++; +} + +- (void) insertRange:(NSArray*)positionIndexCollection at:(int)index { + for (NSNumber *positionIndex in positionIndexCollection) { + [self insert:[positionIndex intValue] at:index]; + index++; + } +} + +- (void) removeAt:(int)index { + for (VertexChannel *channel in channels) { + [channel removeAt:index]; + } + [positionIndices removeAt:index]; + vertexCount--; +} + +- (void) removeRangeAt:(int)index count:(int)count { + for (int i = 0; i < count; i++) { + [self removeAt:index]; + } +} + +- (VertexBufferContent*) createVertexBuffer { + VertexBufferContent *vertexBuffer = [[[VertexBufferContent alloc] init] autorelease]; + + // Construct vertex declaration. + VertexDeclarationContent *vertexDeclaration = [[[VertexDeclarationContent alloc] init] autorelease]; + + // Add position element. + VertexElement *vertexElement = [VertexElement vertexElementWithOffset:0 + format:VertexElementFormatVector3 + usage:VertexElementUsagePosition + usageIndex:0]; + [vertexDeclaration.vertexElements addObject:vertexElement]; + + // Add all channel elements. + int offset = [vertexElement getSize]; + for (VertexChannel *channel in channels) { + VertexElementFormat elementFormat = [VertexElement getElementFormatForType:channel.elementType]; + + VertexElementUsage elementUsage; + if (![VertexChannelNames tryDecodeUsage:channel.name usage:&elementUsage]) { + [NSException raise:@"NotSupportedException" format:@"The channel name %@ is not supported.", channel.name]; + } + + Byte usageIndex = [VertexChannelNames decodeUsageIndex:channel.name]; + + vertexElement = [VertexElement vertexElementWithOffset:offset format:elementFormat usage:elementUsage usageIndex:usageIndex]; + [vertexDeclaration.vertexElements addObject:vertexElement]; + + offset += [vertexElement getSize]; + } + + vertexDeclaration.vertexStride = [NSNumber numberWithInt:offset]; + + vertexBuffer.vertexDeclaration = vertexDeclaration; + + // Fill the vertex data. + for (int i = 0; i < vertexCount; i++) { + // Add position. + NSNumber *index = [positionIndices itemAt:i]; + Vector3 *position = [positions itemAt:[index intValue]]; + [vertexBuffer.vertexData appendBytes:position.data length:sizeof(Vector3Struct)]; + + // Add all channel data. + for (int j = 0; j < channels.count; j++) { + VertexChannel *channel = [channels itemAt:j]; + if (channel.elementType == [Vector2 class]) { + [vertexBuffer.vertexData appendBytes:((Vector2*)[channel itemAt:i]).data length:sizeof(Vector2Struct)]; + } else if (channel.elementType == [Vector3 class]) { + [vertexBuffer.vertexData appendBytes:((Vector3*)[channel itemAt:i]).data length:sizeof(Vector3Struct)]; + } + } + } + + return vertexBuffer; +} + +- (void) dealloc +{ + [channels release]; + [positionIndices release]; + [positions release]; + [super dealloc]; +} + + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/IContentImporter.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/IContentImporter.h new file mode 100644 index 0000000..d71ac56 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/IContentImporter.h @@ -0,0 +1,16 @@ +// +// IContentImporter.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + + +@protocol IContentImporter + +- (id) importFile:(NSString*)filename; + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/IContentProcessor.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/IContentProcessor.h new file mode 100644 index 0000000..7c21136 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/IContentProcessor.h @@ -0,0 +1,19 @@ +// +// IContentProcessor.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + + +@protocol IContentProcessor + +@property (nonatomic, readonly) Class inputType; +@property (nonatomic, readonly) Class outputType; + +- (id) process:(id)input; + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/NamedValueDictionary.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/NamedValueDictionary.h new file mode 100644 index 0000000..b770175 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/NamedValueDictionary.h @@ -0,0 +1,33 @@ +// +// NamedValueDictionary.h +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +// #define NamedValueDictionary NamedValueDictionaryName +// #define T DataType + +@interface NamedValueDictionary : NSObject { + NSMutableDictionary *dictionary; +} + +@property (nonatomic, readonly) int count; + +- (T) itemForKey:(NSString*)key; +- (void) set:(T)value forKey:(NSString*)key; + +- (void) add:(T)value forKey:(NSString*)key; +- (void) remove:(NSString*)key; + +- (void) clear; + +- (BOOL) containsKey:(NSString*)key; + +@end + +// #undef NamedValueDictionary +// #undef T \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/NamedValueDictionary.m.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/NamedValueDictionary.m.h new file mode 100644 index 0000000..8ce0bb6 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/NamedValueDictionary.m.h @@ -0,0 +1,64 @@ +// +// NamedValueDictionary.m.h +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +// #define NamedValueDictionary NamedValueDictionaryName +// #define T DataType + +@implementation NamedValueDictionary + +- (id) init +{ + self = [super init]; + if (self != nil) { + dictionary = [[NSMutableDictionary alloc] init]; + } + return self; +} + +- (int) count { + return [dictionary count]; +} + +- (T) itemForKey:(NSString*)key { + return [dictionary objectForKey:key]; +} + +- (void) set:(T)value forKey:(NSString*)key { + if (value) { + [dictionary setObject:value forKey:key]; + } else { + [dictionary removeObjectForKey:key]; + } +} + +- (void) add:(T)value forKey:(NSString*)key { + [dictionary setObject:value forKey:key]; +} + +- (void) remove:(NSString*)key { + [dictionary removeObjectForKey:key]; +} + +- (void) clear { + [dictionary removeAllObjects]; +} + +- (BOOL) containsKey:(NSString*)key { + return [dictionary objectForKey:key] != nil; +} + +- (void) dealloc +{ + [dictionary release]; + [super dealloc]; +} + +@end + +// #undef NamedValueDictionary +// #undef T \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/OpaqueDataDictionary.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/OpaqueDataDictionary.h new file mode 100644 index 0000000..b86e3a3 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/OpaqueDataDictionary.h @@ -0,0 +1,17 @@ +// +// OpaqueDataDictionary.h +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#define NamedValueDictionary OpaqueDataDictionary +#define T id + +#include "NamedValueDictionary.h" + +#undef NamedValueDictionary +#undef T diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/OpaqueDataDictionary.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/OpaqueDataDictionary.m new file mode 100644 index 0000000..ca4cd83 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/OpaqueDataDictionary.m @@ -0,0 +1,17 @@ +// +// OpaqueDataDictionary.m +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "OpaqueDataDictionary.h" + +#define NamedValueDictionary OpaqueDataDictionary +#define T id + +#include "NamedValueDictionary.m.h" + +#undef NamedValueDictionary +#undef T \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Retronator.Xni.Framework.Content.Pipeline.classes.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Retronator.Xni.Framework.Content.Pipeline.classes.h index 3d5dacf..4767a9e 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Retronator.Xni.Framework.Content.Pipeline.classes.h +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Retronator.Xni.Framework.Content.Pipeline.classes.h @@ -1,3 +1,14 @@ -@class ContentIdentity, ContentItem; +@class ChildCollection; + +@class ContentIdentity, ContentItem; +@class OpaqueDataDictionary; +@class ExternalReference; + +@protocol IContentImporter; +@class ContentImporter; +@class TextureImporter; +@class XImporter; + +@protocol IContentProcessor; +@class ContentProcessor; -@class TextureImporter; \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Retronator.Xni.Framework.Content.Pipeline.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Retronator.Xni.Framework.Content.Pipeline.h index b582892..f637d29 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Retronator.Xni.Framework.Content.Pipeline.h +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Retronator.Xni.Framework.Content.Pipeline.h @@ -1,4 +1,16 @@ +#import "ChildCollection.h" + #import "ContentIdentity.h" #import "ContentItem.h" -#import "TextureImporter.h" \ No newline at end of file +#import "OpaqueDataDictionary.h" + +#import "ExternalReference.h" + +#import "IContentImporter.h" +#import "ContentImporter.h" +#import "TextureImporter.h" +#import "XImporter.h" + +#import "IContentProcessor.h" +#import "ContentProcessor.h" \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/TextureImporter.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/TextureImporter.m index 7ea10a8..45a959f 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/TextureImporter.m +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/TextureImporter.m @@ -10,13 +10,14 @@ #import #import "Retronator.Xni.Framework.Graphics.h" +#import "Retronator.Xni.Framework.Content.Pipeline.h" #import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" @implementation TextureImporter - (TextureContent*) importFile:(NSString*)filename { - NSData *textureData = [[NSData alloc] initWithContentsOfFile:filename]; - UIImage *image = [[UIImage alloc] initWithData:textureData]; + NSData *textureData = [NSData dataWithContentsOfFile:filename]; + UIImage *image = [UIImage imageWithData:textureData]; if (image == nil) { [NSException raise:@"InvalidArgumentException" format:@"The provided file is not a supported texture resource."]; } @@ -41,7 +42,7 @@ CGContextRelease(textureContext); // Create pixel bitmap content. - PixelBitmapContent *bitmap = [[PixelBitmapContent alloc] initWithWidth:(int)width height:(int)height format:SurfaceFormatColor]; + PixelBitmapContent *bitmap = [[[PixelBitmapContent alloc] initWithWidth:(int)width height:(int)height format:SurfaceFormatColor] autorelease]; [bitmap setPixelData:imageData]; // This bitmap is the only one in the mipmap chain. @@ -49,7 +50,8 @@ [mipmaps addObject:bitmap]; // Create the texture content. - Texture2DContent *content = [[Texture2DContent alloc] init]; + Texture2DContent *content = [[[Texture2DContent alloc] init] autorelease]; + content.identity.sourceFilename = filename; content.mipmaps = mipmaps; return content; diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/XImporter.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/XImporter.h new file mode 100644 index 0000000..aace117 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/XImporter.h @@ -0,0 +1,17 @@ +// +// XImporter.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "ContentImporter.h" + +@interface XImporter : ContentImporter { + +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/XImporter.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/XImporter.m new file mode 100644 index 0000000..b95f403 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/XImporter.m @@ -0,0 +1,457 @@ +// +// XImporter.m +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "XImporter.h" + +#import "Retronator.Xni.Framework.h" +#import "Retronator.Xni.Framework.Content.Pipeline.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" +#import "XImporterReader.h" + +@interface XImporter () + +- (void) readHeaderWithReader:(XImporterReader*)reader; +- (void) readTemplatesWithReader:(XImporterReader*)reader; +- (id) readTemplateWithReader:(XImporterReader*)reader; +- (NodeContent*) readFrameTemplateWithReader:(XImporterReader*)reader; +- (void) readFrameTransformMatrixTemplateWithReader:(XImporterReader*)reader; +- (MeshContent*) readMeshTemplateWithReader:(XImporterReader*)reader; +- (void) readMeshTextureCoordsTemplateWithReader:(XImporterReader*)reader; +- (void) readMeshMaterialListTemplateWithReader:(XImporterReader*)reader; +- (void) readMeshNormalsTemplateWithReader:(XImporterReader*)reader; +- (MaterialContent*) readMaterialTemplateWithReader:(XImporterReader*)reader; +- (void) readTextureFilenameTemplateWithReader:(XImporterReader*)reader; + +- (Matrix*) readMatrix4x4TemplateWithReader:(XImporterReader*)reader; +- (Vector3*) readVectorTemplateWithReader:(XImporterReader*)reader; +- (NSArray*) readMeshFaceTemplateWithReader:(XImporterReader*)reader; +- (Vector2*) readCoords2dTemplateWithReader:(XImporterReader*)reader; +- (Vector4*) readColorRGBATemplateWithReader:(XImporterReader*)reader; +- (Vector3*) readColorRGBTemplateWithReader:(XImporterReader*)reader; + +@end + + +@implementation XImporter + +- (NodeContent *) importFile:(NSString *)filename { + NSError *error = nil; + NSString *input = [NSString stringWithContentsOfFile:filename encoding:NSUTF8StringEncoding error:&error]; + if (error) { + NSLog(@"%@", filename); + NSLog(@"%@", [error localizedDescription]); + [NSException raise:@"InvalidArgumentException" format:@"Could not load file %@", filename]; + } + XImporterReader *reader = [[[XImporterReader alloc] initWithInput:input] autorelease]; + reader.root.identity.sourceFilename = filename; + + [self readHeaderWithReader:reader]; + [reader skipWhitespace]; + [self readTemplatesWithReader:reader]; + + return reader.root; +} + +- (void) readHeaderWithReader:(XImporterReader *)reader { + [reader skipMany:17]; +} + +- (void) readTemplatesWithReader:(XImporterReader *)reader { + while ([reader isValid] && ![reader isAtClosingParanthesis]) { + [self readTemplateWithReader:reader]; + [reader skipWhitespace]; + } +} + +- (id) readTemplateWithReader:(XImporterReader *)reader { + id result = nil; + NSString *name = nil; + + if ([reader isAtOpeningParanthesis]) { + // We are reading a named resource. + [reader skipNextNonWhitespace]; + name = [reader readWord]; + [reader skipToClosingParanthesis]; + result = [reader.namedData objectForKey:name]; + } else { + // We are reading a new template. + NSString *template = [reader readWord]; + [reader skipWhitespace]; + if (![reader isAtOpeningParanthesis]) { + name = [reader readWord]; + [reader skipToOpeningParanthesis]; + } + [reader skipNextNonWhitespace]; + + // We are now at the first character of the content. + if ([template isEqual:@"Frame"]) { + NodeContent *frame = [self readFrameTemplateWithReader:reader]; + frame.name = name; + } else if ([template isEqual:@"FrameTransformMatrix"]) { + [self readFrameTransformMatrixTemplateWithReader:reader]; + } else if ([template isEqual:@"Mesh"]) { + MeshContent *mesh = [self readMeshTemplateWithReader:reader]; + mesh.name = name; + } else if ([template isEqual:@"MeshTextureCoords"]) { + [self readMeshTextureCoordsTemplateWithReader:reader]; + } else if ([template isEqual:@"MeshMaterialList"]) { + [self readMeshMaterialListTemplateWithReader:reader]; + } else if ([template isEqual:@"MeshNormals"]) { + [self readMeshNormalsTemplateWithReader:reader]; + } else if ([template isEqual:@"Material"]) { + MaterialContent *material = [self readMaterialTemplateWithReader:reader]; + material.name = name; + result = material; + } else if ([template isEqual:@"TextureFilename"]) { + [self readTextureFilenameTemplateWithReader:reader]; + } else { + // Unknown template, skip to closing parenthesis. + [reader skipToClosingParanthesisForCurrentLevel]; + } + } + + [reader skipNextNonWhitespace]; + + if (name && result) { + [reader.namedData setObject:result forKey:name]; + } + + return result; +} + +/* + template Frame { + [...] + } + */ +- (NodeContent *) readFrameTemplateWithReader:(XImporterReader *)reader { + NodeContent *frame = [[[NodeContent alloc] init] autorelease]; + + NodeContent *parent = (NodeContent*)[reader currentContent]; + [parent.children add:frame]; + [reader pushContent:frame]; + + // Template is just a list of templates (usually FrameTransformMatrix and a Mesh) + [self readTemplatesWithReader:reader]; + + [reader popContent]; + return frame; +} + +/* + template FrameTransformMatrix { + Matrix4x4 frameMatrix; + } + */ +- (void) readFrameTransformMatrixTemplateWithReader:(XImporterReader *)reader { + NodeContent *frame = (NodeContent*)[reader currentContent]; + + frame.transform = [self readMatrix4x4TemplateWithReader:reader]; + [reader skipNextNonWhitespace]; +} + +/* + template Mesh { + DWORD nVertices; + array Vector vertices[nVertices]; + DWORD nFaces; + array MeshFace faces[nFaces]; + [...] + } + */ +- (MeshContent *) readMeshTemplateWithReader:(XImporterReader *)reader { + NodeContent *frame = (NodeContent*)[reader currentContent]; + + MeshContent *mesh = [[[MeshContent alloc] init] autorelease]; + [frame.children add:mesh]; + + [reader pushContent:mesh]; + + GeometryContent *geometry = [[[GeometryContent alloc] initWithPositions:mesh.positions] autorelease]; + [mesh.geometry add:geometry]; + + // Vertices + int vertexCount = [reader readInt]; + [reader skipNextNonWhitespace]; + for (int i = 0; i < vertexCount; i++) { + Vector3 *vertex = [self readVectorTemplateWithReader:reader]; + + // Change from left handed to right handed system. + //vertex.z = -vertex.z; + + [reader skipNextNonWhitespace]; + + [mesh.positions add:vertex]; + [geometry.vertices add:i]; + } + + // Indices + int indexCount = [reader readInt]; + [reader skipNextNonWhitespace]; + for (int i = 0; i < indexCount; i++) { + NSMutableArray *indices = (NSMutableArray*)[self readMeshFaceTemplateWithReader:reader]; + [reader skipNextNonWhitespace]; + + // Swap two indices to change orientation since it was destroyed with handedness change. + /*id tmp = [indices objectAtIndex:0]; + [indices replaceObjectAtIndex:0 withObject:[indices objectAtIndex:1]]; + [indices replaceObjectAtIndex:1 withObject:tmp]; + */ + [geometry.indices addRange:indices]; + } + + // Vertex channels + [self readTemplatesWithReader:reader]; + + [reader popContent]; + return mesh; +} + +/* + template MeshTextureCoords { + DWORD nTextureCoords; + array Coords2d textureCoords[nTextureCoords]; + } + */ +- (void) readMeshTextureCoordsTemplateWithReader:(XImporterReader *)reader { + GeometryContent *geometry = [((MeshContent*)[reader currentContent]).geometry itemAt:0]; + + NSString *channelName = [VertexChannelNames textureCoordinateWithUsageIndex:0]; + + [geometry.vertices.channels addChannelWithName:channelName elementType:[Vector2 class] channelData:nil]; + VertexChannel *textureCoords = [geometry.vertices.channels itemWithName:channelName]; + + int coordsCount = [reader readInt]; + [reader skipNextNonWhitespace]; + for (int i = 0; i < coordsCount; i++) { + Vector2 *coords = [self readCoords2dTemplateWithReader:reader]; + [reader skipNextNonWhitespace]; + + [textureCoords setItem:coords at:i]; + } +} + +/* + template MeshMaterialList { + DWORD nMaterials; + DWORD nFaceIndexes; + array DWORD faceIndexes[nFaceIndexes]; + [Material] + } + */ +- (void) readMeshMaterialListTemplateWithReader:(XImporterReader *)reader { + GeometryContent *geometry = [((MeshContent*)[reader currentContent]).geometry itemAt:0]; + + int materialCount = [reader readInt]; + [reader skipNextNonWhitespace]; + + int faceCount = [reader readInt]; + [reader skipNextNonWhitespace]; + + for (int i = 0; i < faceCount; i++) { + /*int materialIndex =*/ [reader readInt]; + [reader skipNextNonWhitespace]; + } + + for (int i = 0; i < materialCount; i++) { + MaterialContent *material = [self readTemplateWithReader:reader]; + geometry.material = material; + } +} + +/* + template MeshNormals { + DWORD nNormals; + array Vector normals[nNormals]; + DWORD nFaceNormals; + array MeshFace faceNormals[nFaceNormals]; + } + */ +- (void) readMeshNormalsTemplateWithReader:(XImporterReader *)reader { + GeometryContent *geometry = [((MeshContent*)[reader currentContent]).geometry itemAt:0]; + + PositionCollection *normals = [[[PositionCollection alloc] init] autorelease]; + + NSString *channelName = [VertexChannelNames normal]; + + [geometry.vertices.channels addChannelWithName:channelName elementType:[Vector3 class] channelData:nil]; + VertexChannel *normalChannel = [geometry.vertices.channels itemWithName:channelName]; + + int normalCount = [reader readInt]; + [reader skipNextNonWhitespace]; + for (int i = 0; i < normalCount; i++) { + Vector3 *normal = [self readVectorTemplateWithReader:reader]; + [reader skipNextNonWhitespace]; + + [normals add:normal]; + } + + int faceCount = [reader readInt]; + [reader skipNextNonWhitespace]; + for (int i = 0; i < faceCount; i++) { + NSArray *indices = [self readMeshFaceTemplateWithReader:reader]; + [reader skipNextNonWhitespace]; + + for (int j = 0; j < [indices count]; j++) { + int vertexIndex = [((NSNumber*)[geometry.indices itemAt:i*3+j]) intValue]; + int normalIndex = [((NSNumber*)[indices objectAtIndex:j]) intValue]; + + [normalChannel setItem:[normals itemAt:normalIndex] at:vertexIndex]; + } + } +} + +/* + template Material { + ColorRGBA faceColor; + FLOAT power; + ColorRGB specularColor; + ColorRGB emissiveColor; + [...] + } + */ +- (MaterialContent *) readMaterialTemplateWithReader:(XImporterReader *)reader { + BasicMaterialContent *material = [[BasicMaterialContent alloc] init]; + + [reader pushContent:material]; + + Vector4 *faceColor = [self readColorRGBATemplateWithReader:reader]; + [reader skipNextNonWhitespace]; + float power = [reader readFloat]; + [reader skipNextNonWhitespace]; + Vector3 *specularColor = [self readColorRGBTemplateWithReader:reader]; + [reader skipNextNonWhitespace]; + Vector3 *emissiveColor = [self readColorRGBTemplateWithReader:reader]; + [reader skipNextNonWhitespace]; + + material.diffuseColor = [Vector3 vectorWithX:faceColor.x y:faceColor.y z:faceColor.z]; + material.alpha = [NSNumber numberWithFloat:faceColor.w]; + material.specularPower = [NSNumber numberWithFloat:power]; + material.specularColor = specularColor; + material.emissiveColor = emissiveColor; + + [self readTemplatesWithReader:reader]; + + [reader popContent]; + return material; +} + +/* + template TextureFilename { + STRING filename; + } + */ +- (void) readTextureFilenameTemplateWithReader:(XImporterReader *)reader { + BasicMaterialContent *material = (BasicMaterialContent*)[reader currentContent]; + + NSString *filename = [reader readQuotedWord]; + ExternalReference *texture = [[[ExternalReference alloc] initWithFilename:filename relativeToContent:reader.root.identity] autorelease]; + + material.texture = texture; + + [reader skipNextNonWhitespace]; +} + +/* + template Matrix4x4 { + array FLOAT matrix[16]; + } + */ +- (Matrix *) readMatrix4x4TemplateWithReader:(XImporterReader *)reader { + MatrixStruct data; + for (int i = 0; i < 16; i++) { + ((float*)&data)[i] = [reader readFloat]; + [reader skipNextNonWhitespace]; + } + return [Matrix matrixWithStruct:&data]; +} + +/* + template Vector { + FLOAT x; + FLOAT y; + FLOAT z; + } + */ +- (Vector3 *) readVectorTemplateWithReader:(XImporterReader *)reader { + Vector3Struct data; + for (int i = 0; i < 3; i++) { + ((float*)&data)[i] = [reader readFloat]; + [reader skipNextNonWhitespace]; + } + return [Vector3 vectorWithStruct:&data]; +} + +/* + template MeshFace { + DWORD nFaceVertexIndices; + array DWORD faceVertexIndices[nFaceVertexIndices]; + } + */ +- (NSArray*) readMeshFaceTemplateWithReader:(XImporterReader*)reader { + NSMutableArray *indices = [NSMutableArray array]; + int count = [reader readInt]; + [reader skipNextNonWhitespace]; + for (int i = 0; i < count; i++) { + [indices addObject:[NSNumber numberWithInt:[reader readInt]]]; + [reader skipNextNonWhitespace]; + } + return indices; +} + +/* + template Coords2d { + FLOAT u; + FLOAT v; + } + */ +- (Vector2*) readCoords2dTemplateWithReader:(XImporterReader*)reader { + Vector2Struct data; + for (int i = 0; i < 2; i++) { + ((float*)&data)[i] = [reader readFloat]; + [reader skipNextNonWhitespace]; + } + return [Vector2 vectorWithStruct:&data]; + +} + +/* + template ColorRGBA { + FLOAT red; + FLOAT green; + FLOAT blue; + FLOAT alpha; + } + */ +- (Vector4 *) readColorRGBATemplateWithReader:(XImporterReader *)reader { + Vector4Struct data; + for (int i = 0; i < 4; i++) { + ((float*)&data)[i] = [reader readFloat]; + [reader skipNextNonWhitespace]; + } + return [Vector4 vectorWithStruct:&data]; +} + +/* + template ColorRGB { + + FLOAT red; + FLOAT green; + FLOAT blue; + } + */ +- (Vector3 *) readColorRGBTemplateWithReader:(XImporterReader *)reader { + Vector3Struct data; + for (int i = 0; i < 3; i++) { + ((float*)&data)[i] = [reader readFloat]; + [reader skipNextNonWhitespace]; + } + return [Vector3 vectorWithStruct:&data]; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/XImporterReader.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/XImporterReader.h new file mode 100644 index 0000000..05f91f1 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/XImporterReader.h @@ -0,0 +1,51 @@ +// +// XImporterReader.h +// XNI +// +// Created by Matej Jan on 28.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.classes.h" +#import "Retronator.Xni.Framework.Content.Pipeline.classes.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.classes.h" + +@interface XImporterReader : NSObject +{ + NSString *input; + int inputPosition; + NodeContent *root; + NSMutableArray *contentStack; + NSMutableDictionary *namedData; +} + +- (id) initWithInput:(NSString*)theInput; + +@property (nonatomic, readonly) NodeContent *root; +@property (nonatomic, readonly) NSMutableDictionary *namedData; +@property (nonatomic, readonly) BOOL isValid; + +- (ContentItem*) currentContent; +- (void) pushContent:(ContentItem*)content; +- (void) popContent; + +- (unichar) currentCharacter; +- (void) skip; +- (void) skipMany:(int)count; +- (void) skipToCharacter:(unichar)character; +- (void) skipWhitespace; +- (void) skipToWhitespace; +- (void) skipNextNonWhitespace; +- (BOOL) isAtOpeningParanthesis; +- (BOOL) isAtClosingParanthesis; +- (void) skipToOpeningParanthesis; +- (void) skipToClosingParanthesis; +- (void) skipToClosingParanthesisForCurrentLevel; +- (NSString*) readWord; +- (NSString*) readQuotedWord; +- (float) readFloat; +- (float) readInt; + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/XImporterReader.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/XImporterReader.m new file mode 100644 index 0000000..28b9781 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/XImporterReader.m @@ -0,0 +1,170 @@ +// +// XImporterReader.m +// XNI +// +// Created by Matej Jan on 28.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "XImporterReader.h" + +#import "Retronator.Xni.Framework.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" + +@implementation XImporterReader + +static NSCharacterSet *numberCharacterSet; + +- (id) initWithInput:(NSString *)theInput +{ + self = [super init]; + if (self != nil) { + input = [theInput retain]; + contentStack = [[NSMutableArray alloc] init]; + root = [[NodeContent alloc] init]; + [contentStack addObject:root]; + namedData = [[NSMutableDictionary alloc] init]; + } + return self; +} + ++ (void) initialize { + numberCharacterSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789.-"] retain]; +} + +@synthesize root, namedData; + +- (BOOL) isValid { + return inputPosition < [input length]; +} + + +- (ContentItem *) currentContent { + return [contentStack lastObject]; +} + +- (void) pushContent:(ContentItem *)content { + [contentStack addObject:content]; +} + +- (void) popContent { + [contentStack removeLastObject]; +} + + +- (unichar) currentCharacter { + return [input characterAtIndex:inputPosition]; +} + +- (void) skip { + inputPosition++; +} + +- (void) skipMany:(int)count { + inputPosition+=count; +} + +- (void) skipToCharacter:(unichar)character { + while ([self isValid] && [self currentCharacter] != character) { + inputPosition++; + } +} + +- (void) skipWhitespace { + while ([self isValid] && [[NSCharacterSet whitespaceAndNewlineCharacterSet] characterIsMember:[self currentCharacter]]) { + inputPosition++; + } +} + +- (void) skipToWhitespace { + while ([self isValid] && ![[NSCharacterSet whitespaceAndNewlineCharacterSet] characterIsMember:[self currentCharacter]]) { + inputPosition++; + } +} + +- (void) skipNextNonWhitespace { + [self skipWhitespace]; + [self skip]; + [self skipWhitespace]; +} + +- (BOOL) isAtOpeningParanthesis { + return [self currentCharacter] == '{'; +} + +- (BOOL) isAtClosingParanthesis { + return [self currentCharacter] == '}'; +} + +- (void) skipToOpeningParanthesis { + [self skipToCharacter:'{']; +} + + +- (void) skipToClosingParanthesis { + [self skipToCharacter:'}']; +} + +- (void) skipToClosingParanthesisForCurrentLevel { + int level = 1; + while ([self isValid]) { + if ([self isAtOpeningParanthesis]) { + level++; + } else if ([self isAtClosingParanthesis]) { + level--; + if (level == 0) { + return; + } + } + inputPosition++; + } +} + +- (NSString *) readWord { + NSRange range; + range.location = inputPosition; + [self skipToWhitespace]; + range.length = inputPosition-range.location; + return [input substringWithRange:range]; +} + +- (NSString *) readQuotedWord { + NSRange range; + [self skipToCharacter:'"']; + [self skip]; + range.location = inputPosition; + [self skipToCharacter:'"']; + range.length = inputPosition-range.location; + [self skip]; + return [input substringWithRange:range]; +} + +- (float) readFloat { + NSRange range; + range.location = inputPosition; + while ([self isValid] && [numberCharacterSet characterIsMember:[self currentCharacter]]) { + inputPosition++; + } + range.length = inputPosition-range.location; + return [[input substringWithRange:range] floatValue]; +} + +- (float) readInt { + NSRange range; + range.location = inputPosition; + while ([self isValid] && [numberCharacterSet characterIsMember:[self currentCharacter]]) { + inputPosition++; + } + range.length = inputPosition-range.location; + return [[input substringWithRange:range] intValue]; +} + +- (void) dealloc +{ + [input release]; + [contentStack release]; + [namedData release]; + [super dealloc]; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/Retronator.Xni.Framework.Content.classes.h b/Classes/Retronator/Xni/Framework/Content/Retronator.Xni.Framework.Content.classes.h index 3f2976d..7842c08 100644 --- a/Classes/Retronator/Xni/Framework/Content/Retronator.Xni.Framework.Content.classes.h +++ b/Classes/Retronator/Xni/Framework/Content/Retronator.Xni.Framework.Content.classes.h @@ -1,3 +1,6 @@ -@class ContentManager, ContentReader, ContentTypeReaderManager; +@class ContentManager, ContentReader, ContentTypeReaderManager, ContentTypeReader; -@class ContentTypeReader, Texture2DContentTypeReader; \ No newline at end of file +@class Texture2DReader; +@class ModelReader, ModelMeshReader, ModelMeshPartReader; +@class BasicEffectReader, IndexBufferReader, VertexBufferReader; +@class ModelBoneReader, VertexDeclarationReader; \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Retronator.Xni.Framework.Content.h b/Classes/Retronator/Xni/Framework/Content/Retronator.Xni.Framework.Content.h index 7003aff..923bbde 100644 --- a/Classes/Retronator/Xni/Framework/Content/Retronator.Xni.Framework.Content.h +++ b/Classes/Retronator/Xni/Framework/Content/Retronator.Xni.Framework.Content.h @@ -1,6 +1,17 @@ #import "ContentManager.h" #import "ContentReader.h" #import "ContentTypeReaderManager.h" - #import "ContentTypeReader.h" -#import "Texture2DContentTypeReader.h" \ No newline at end of file + +#import "Texture2DReader.h" + +#import "ModelReader.h" +#import "ModelMeshReader.h" +#import "ModelMeshPartReader.h" + +#import "BasicEffectReader.h" +#import "IndexBufferReader.h" +#import "VertexBufferReader.h" + +#import "ModelBoneReader.h" +#import "VertexDeclarationReader.h" \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Content/Texture2DContentTypeReader.h b/Classes/Retronator/Xni/Framework/Content/Texture2DReader.h similarity index 78% rename from Classes/Retronator/Xni/Framework/Content/Texture2DContentTypeReader.h rename to Classes/Retronator/Xni/Framework/Content/Texture2DReader.h index cef2150..7e1c715 100644 --- a/Classes/Retronator/Xni/Framework/Content/Texture2DContentTypeReader.h +++ b/Classes/Retronator/Xni/Framework/Content/Texture2DReader.h @@ -10,7 +10,7 @@ #import "ContentTypeReader.h" -@interface Texture2DContentTypeReader : ContentTypeReader { +@interface Texture2DReader : ContentTypeReader { } diff --git a/Classes/Retronator/Xni/Framework/Content/Texture2DContentTypeReader.m b/Classes/Retronator/Xni/Framework/Content/Texture2DReader.m similarity index 84% rename from Classes/Retronator/Xni/Framework/Content/Texture2DContentTypeReader.m rename to Classes/Retronator/Xni/Framework/Content/Texture2DReader.m index b994eb6..9883da6 100644 --- a/Classes/Retronator/Xni/Framework/Content/Texture2DContentTypeReader.m +++ b/Classes/Retronator/Xni/Framework/Content/Texture2DReader.m @@ -6,13 +6,13 @@ // Copyright 2010 Retronator. All rights reserved. // -#import "Texture2DContentTypeReader.h" +#import "Texture2DReader.h" #import "Retronator.Xni.Framework.Content.h" #import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" #import "Retronator.Xni.Framework.Graphics.h" -@implementation Texture2DContentTypeReader +@implementation Texture2DReader - (id) readFromInput:(ContentReader *)input into:(id)existingInstance { Texture2DContent *content = input.content; @@ -24,11 +24,11 @@ SurfaceFormat format; [bitmap tryGetFormat:&format]; - Texture2D *texture = [[Texture2D alloc] initWithGraphicsDevice:graphicsDevice + Texture2D *texture = [[[Texture2D alloc] initWithGraphicsDevice:graphicsDevice width:bitmap.width height:bitmap.height mipMaps:generateMipmaps - format:format]; + format:format] autorelease]; for (int i=0;i<[mipmaps count];i++) { bitmap = [mipmaps objectAtIndex:i]; diff --git a/Classes/Retronator/Xni/Framework/Content/VertexBufferReader.h b/Classes/Retronator/Xni/Framework/Content/VertexBufferReader.h new file mode 100644 index 0000000..ba54a53 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/VertexBufferReader.h @@ -0,0 +1,17 @@ +// +// VertexBufferReader.h +// XNI +// +// Created by Matej Jan on 23.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "ContentTypeReader.h" + +@interface VertexBufferReader : ContentTypeReader { + +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/VertexBufferReader.m b/Classes/Retronator/Xni/Framework/Content/VertexBufferReader.m new file mode 100644 index 0000000..d9b9c31 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/VertexBufferReader.m @@ -0,0 +1,36 @@ +// +// VertexBufferReader.m +// XNI +// +// Created by Matej Jan on 23.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "VertexBufferReader.h" + +#import "Retronator.Xni.Framework.Content.h" +#import "Retronator.Xni.Framework.Graphics.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Processors.h" + +#import "GraphicsDevice+Internal.h" + +@implementation VertexBufferReader + +- (id) readFromInput:(ContentReader *)input into:(id)existingInstance { + VertexBufferContent *content = input.content; + GraphicsDevice *graphicsDevice = [[input.contentManager.serviceProvider getServiceOfType:@protocol(IGraphicsDeviceService)] graphicsDevice]; + + VertexDeclaration *vertexDeclaration = [input readObjectFrom:content.vertexDeclaration]; + + int vertexCount = [content.vertexData length] / vertexDeclaration.vertexStride; + + VertexBuffer *buffer = [[[VertexBuffer alloc] initWithGraphicsDevice:graphicsDevice + vertexDeclaration:vertexDeclaration + vertexCount:vertexCount usage:BufferUsageWriteOnly] autorelease]; + + [graphicsDevice setData:(void*)[content.vertexData bytes] toVertexBuffer:buffer]; + + return buffer; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/VertexDeclarationReader.h b/Classes/Retronator/Xni/Framework/Content/VertexDeclarationReader.h new file mode 100644 index 0000000..d3a6731 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/VertexDeclarationReader.h @@ -0,0 +1,17 @@ +// +// VertexDeclarationReader.h +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "ContentTypeReader.h" + +@interface VertexDeclarationReader : ContentTypeReader { + +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Content/VertexDeclarationReader.m b/Classes/Retronator/Xni/Framework/Content/VertexDeclarationReader.m new file mode 100644 index 0000000..a354088 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Content/VertexDeclarationReader.m @@ -0,0 +1,25 @@ +// +// VertexDeclarationReader.m +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "VertexDeclarationReader.h" + +#import "Retronator.Xni.Framework.Content.h" +#import "Retronator.Xni.Framework.Graphics.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Processors.h" + +@implementation VertexDeclarationReader + +- (id) readFromInput:(ContentReader *)input into:(id)existingInstance { + VertexDeclarationContent *content = input.content; + + VertexDeclaration *vertexDeclaration = [[[VertexDeclaration alloc] initWithElements:content.vertexElements] autorelease]; + + return vertexDeclaration; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Game.m b/Classes/Retronator/Xni/Framework/Game.m index 45a87d1..be70e19 100644 --- a/Classes/Retronator/Xni/Framework/Game.m +++ b/Classes/Retronator/Xni/Framework/Game.m @@ -16,8 +16,8 @@ @implementation Game -NSArray *updateOrderSort; -NSArray *drawOrderSort; +static NSArray *updateOrderSort; +static NSArray *drawOrderSort; + (void) initialize { NSSortDescriptor *updateOrderSortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"updateOrder" ascending:YES] autorelease]; diff --git a/Classes/Retronator/Xni/Framework/Graphics/BasicEffect.m b/Classes/Retronator/Xni/Framework/Graphics/BasicEffect.m index f8c489e..2b565a7 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/BasicEffect.m +++ b/Classes/Retronator/Xni/Framework/Graphics/BasicEffect.m @@ -24,13 +24,13 @@ -(id) initWithGraphicsDevice:(GraphicsDevice *)theGraphicsDevice { if (self = [super initWithGraphicsDevice:theGraphicsDevice]) { // Create the main pass. - BasicEffectPass *mainPass = [[BasicEffectPass alloc] initWithBasicEffect:self graphicsDevice:graphicsDevice]; + BasicEffectPass *mainPass = [[[BasicEffectPass alloc] initWithBasicEffect:self graphicsDevice:graphicsDevice] autorelease]; NSArray *passes = [NSArray arrayWithObject:mainPass]; // Create the basic technique. - EffectTechnique *basicTechnique = [[EffectTechnique alloc] initWithName:@"BasicEffect" passes:passes]; + EffectTechnique *basicTechnique = [[[EffectTechnique alloc] initWithName:@"BasicEffect" passes:passes] autorelease]; - techniques = [NSDictionary dictionaryWithObject:basicTechnique forKey:basicTechnique.name]; + techniques = [[NSDictionary alloc] initWithObjectsAndKeys:basicTechnique, basicTechnique.name, nil]; currentTechnique = basicTechnique; // Set defaults. @@ -104,6 +104,7 @@ [world release]; [view release]; [projection release]; + [techniques release]; [super dealloc]; } diff --git a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice+Internal.h b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice+Internal.h new file mode 100644 index 0000000..df0bd95 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice+Internal.h @@ -0,0 +1,26 @@ +// +// GraphicsDevice+Internal.h +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "GraphicsDevice.h" + +@interface GraphicsDevice (Internal) + +- (uint) createTexture; +//- (void) getData:(void*)data fromTexture2D:(Texture2D*)texture level:(int)level; +- (void) setData:(void*)data toTexture2D:(Texture2D*)texture SourceRectangle:(Rectangle*)rect level:(int)level; + +- (uint) createBuffer; +- (void) setData:(void*)data toIndexBuffer:(IndexBuffer*)buffer; +- (void) setData:(void*)data toVertexBuffer:(VertexBuffer*)buffer; + +// Profile specific +- (EAGLContext*) createContext; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.h b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.h index de5c3e7..e27e122 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.h +++ b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.h @@ -79,32 +79,46 @@ - (void) setVertexBuffers:(VertexBufferBinding*)vertexBuffer, ... NS_REQUIRES_NIL_TERMINATION; // Drawing -- (void) drawPrimitivesOfType:(PrimitiveType)primitiveType startingAt:(int)startVertex count:(int)primitiveCount; -- (void) drawIndexedPrimitivesOfType:(PrimitiveType)primitiveType offsetVerticesBy:(int)baseVertex - startingAt:(int)startIndex count:(int)primitiveCount; +// From buffers +- (void) drawPrimitivesOfType:(PrimitiveType)primitiveType + startVertex:(int)startVertex + primitiveCount:(int)primitiveCount; -- (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType vertices:(VertexArray*)vertexData - startingAt:(int)vertexOffset count:(int)primitiveCount; +- (void) drawIndexedPrimitivesOfType:(PrimitiveType)primitiveType + baseVertex:(int)baseVertex + minVertexIndex:(int)minVertexIndex + numVertices:(int)numVertices + startIndex:(int)startIndex + primitiveCount:(int)primitiveCount; + +// From arrays +- (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType + vertexData:(VertexArray*)vertexData + vertexOffset:(int)vertexOffset + primitiveCount:(int)primitiveCount; - (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType - vertices:(void*)vertexData ofType:(VertexDeclaration*) vertexDeclaration - startingAt:(int)vertexOffset count:(int)primitiveCount; + vertexData:(void*)vertexData + vertexOffset:(int)vertexOffset + primitiveCount:(int)primitiveCount + vertexDeclaration:(VertexDeclaration*) vertexDeclaration; - (void) drawUserIndexedPrimitivesOfType:(PrimitiveType)primitiveType - vertices:(void*)vertexData ofType:(VertexDeclaration*) vertexDeclaration - offsetVerticesBy:(int)vertexOffset indices:(void*)indexData dataType:(DataType)dataType - startingAt:(int)indexOffset count:(int)primitiveCount; + vertexData:(VertexArray*)vertexData + vertexOffset:(int)vertexOffset + numVertices:(int)numVertices + indexData:(IndexArray*)indexData + indexOffset:(int)indexOffset + primitiveCount:(int)primitiveCount; - -// Low level methods -- (uint) createTexture; - -//- (void) getData:(void*)data fromTexture2D:(Texture2D*)texture level:(int)level; - -- (void) setData:(void*)data toTexture2D:(Texture2D*)texture SourceRectangle:(Rectangle*)rect level:(int)level; - -// Profile specific -- (EAGLContext*) createContext; +- (void) drawUserIndexedPrimitivesOfType:(PrimitiveType)primitiveType + vertexData:(void*)vertexData + vertexOffset:(int)vertexOffset + numVertices:(int)numVertices + shortIndexData:(void*)indexData + indexOffset:(int)indexOffset + primitiveCount:(int)primitiveCount + vertexDeclaration:(VertexDeclaration*) vertexDeclaration; @end diff --git a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m index 56eea20..5cd5b37 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m +++ b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m @@ -7,6 +7,7 @@ // #import "GraphicsDevice.h" +#import "GraphicsDevice+Internal.h" #import #import "Retronator.Xni.Framework.h" @@ -15,10 +16,13 @@ #import "XniSamplerEventArgs.h" #import "TextureCollection+Internal.h" #import "SamplerStateCollection+Internal.h" +#import "IndexBuffer+Internal.h" +#import "VertexBuffer+Internal.h" @interface GraphicsDevice() + (void) getFormat:(GLenum*)format AndType:(GLenum*)type ForSurfaceFormat:(SurfaceFormat)surfaceFormat; +- (void) setData:(void*)data size:(int)sizeInBytes toBufferId:(uint)buffer resourceType:(ResourceType)resourceType bufferUsage:(BufferUsage)bufferUsage; @end @@ -70,13 +74,15 @@ self.depthStencilState = [DepthStencilState defaultDepth]; graphicsDeviceStatus = GraphicsDeviceStatusNormal; self.indices = nil; - self.rasterizerState = [RasterizerState cullClockwise]; + self.rasterizerState = [RasterizerState cullCounterClockwise]; self.referenceStencil = 0; [samplerStates setItem:[SamplerState linearClamp] atIndex:0]; // Create events. deviceResetting = [[Event alloc] init]; deviceReset = [[Event alloc] init]; + + vertices = [[NSMutableArray alloc] init]; } return self; @@ -124,6 +130,16 @@ [value retain]; [rasterizerState release]; rasterizerState = value; + + // Apply fill mode. + + // Apply cull mode. + if (value.cullMode == CullModeNone) { + glDisable(GL_CULL_FACE); + } else { + glEnable(GL_CULL_FACE); + glFrontFace(value.cullMode); + } } } @@ -207,12 +223,16 @@ // Vertex buffers - (NSArray*) getVertexBuffers { - return [[NSArray arrayWithArray:vertices] autorelease]; + return [NSArray arrayWithArray:vertices]; } - (void) setVertexBuffer:(VertexBuffer*)vertexBuffer { VertexBufferBinding *binding = [[VertexBufferBinding alloc] initWithVertexBuffer:vertexBuffer]; - [vertices insertObject:binding atIndex:0]; + if ([vertices count]>0) { + [vertices replaceObjectAtIndex:0 withObject:binding]; + } else { + [vertices addObject:binding]; + } [binding release]; } @@ -262,28 +282,76 @@ glBindTexture(GL_TEXTURE_2D, 0); } +- (uint) createBuffer { + GLuint bufferId; + glGenBuffers(1, &bufferId); + return bufferId; +} + +- (void) setData:(void*)data toIndexBuffer:(IndexBuffer*)buffer { + int sizeInBytes = buffer.indexElementSize * buffer.indexCount; + [self setData:data size:sizeInBytes toBufferId:buffer.bufferID resourceType:ResourceTypeIndexBuffer bufferUsage:buffer.bufferUsage]; +} + +- (void) setData:(void*)data toVertexBuffer:(VertexBuffer*)buffer { + int sizeInBytes = buffer.vertexDeclaration.vertexStride * buffer.vertexCount; + [self setData:data size:sizeInBytes toBufferId:buffer.bufferID resourceType:ResourceTypeVertexBuffer bufferUsage:buffer.bufferUsage]; +} + +- (void) setData:(void *)data + size:(int)sizeInBytes + toBufferId:(uint)buffer + resourceType:(ResourceType)resourceType + bufferUsage:(BufferUsage)bufferUsage +{ + glBindBuffer(resourceType, buffer); + glBufferData(resourceType, sizeInBytes, data, bufferUsage); + glBindBuffer(resourceType, 0); +} + // Profile specific - (EAGLContext*) createContext { return nil; } -- (void) drawPrimitivesOfType:(PrimitiveType)primitiveType startingAt:(int)startVertex count:(int)primitiveCount {} +- (void) drawPrimitivesOfType:(PrimitiveType)primitiveType + startVertex:(int)startVertex + primitiveCount:(int)primitiveCount {} -- (void) drawIndexedPrimitivesOfType:(PrimitiveType)primitiveType offsetVerticesBy:(int)baseVertex - startingAt:(int)startIndex count:(int)primitiveCount {} - -- (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType vertices:(VertexArray*)vertexData - startingAt:(int)vertexOffset count:(int)primitiveCount {} +- (void) drawIndexedPrimitivesOfType:(PrimitiveType)primitiveType + baseVertex:(int)baseVertex + minVertexIndex:(int)minVertexIndex + numVertices:(int)numVertices + startIndex:(int)startIndex + primitiveCount:(int)primitiveCount {} - (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType - vertices:(void*)vertexData ofType:(VertexDeclaration*) vertexDeclaration - startingAt:(int)vertexOffset count:(int)primitiveCount {} + vertexData:(VertexArray*)vertexData + vertexOffset:(int)vertexOffset + primitiveCount:(int)primitiveCount {} + +- (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType + vertexData:(void*)vertexData + vertexOffset:(int)vertexOffset + primitiveCount:(int)primitiveCount + vertexDeclaration:(VertexDeclaration*) vertexDeclaration {} - (void) drawUserIndexedPrimitivesOfType:(PrimitiveType)primitiveType - vertices:(void*)vertexData ofType:(VertexDeclaration*) vertexDeclaration - offsetVerticesBy:(int)vertexOffset indices:(void*)indexData dataType:(DataType)dataType - startingAt:(int)indexOffset count:(int)primitiveCount {} + vertexData:(VertexArray*)vertexData + vertexOffset:(int)vertexOffset + numVertices:(int)numVertices + indexData:(IndexArray*)indexData + indexOffset:(int)indexOffset + primitiveCount:(int)primitiveCount {} +- (void) drawUserIndexedPrimitivesOfType:(PrimitiveType)primitiveType + vertexData:(void*)vertexData + vertexOffset:(int)vertexOffset + numVertices:(int)numVertices + shortIndexData:(void*)indexData + indexOffset:(int)indexOffset + primitiveCount:(int)primitiveCount + vertexDeclaration:(VertexDeclaration*) vertexDeclaration {} // Private methods + (void) getFormat:(GLenum*)format AndType:(GLenum*)type ForSurfaceFormat:(SurfaceFormat)surfaceFormat { @@ -385,6 +453,7 @@ [viewport release]; [deviceResetting release]; [deviceReset release]; + [vertices release]; [super dealloc]; } diff --git a/Classes/Retronator/Xni/Framework/Graphics/GraphicsEnums.h b/Classes/Retronator/Xni/Framework/Graphics/GraphicsEnums.h index 74da780..3ed000a 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/GraphicsEnums.h +++ b/Classes/Retronator/Xni/Framework/Graphics/GraphicsEnums.h @@ -26,8 +26,8 @@ typedef enum { } BlendFunction; typedef enum { - BufferUsageNone, - BufferUsageWriteOnly + BufferUsageNone = GL_DYNAMIC_DRAW, + BufferUsageWriteOnly = GL_STATIC_DRAW } BufferUsage; typedef enum { @@ -66,9 +66,10 @@ typedef enum { } CubeMapFace; typedef enum { - CullModeCullClockwiseFace, - CullModeCullCounterClockwiseFace, - CullModeNone + // The opengl values correspond to which face is front facing, which is opposite of culled + CullModeNone, + CullModeCullClockwiseFace = GL_CCW, + CullModeCullCounterClockwiseFace = GL_CW } CullMode; typedef enum { @@ -104,8 +105,8 @@ typedef enum { } GraphicsProfile; typedef enum { - IndexElementSizeSixteenBits = 2, - IndexElementSizeThrityTwoBits = 4, + IndexElementSizeSixteenBits = 2, + //IndexElementSizeThrityTwoBits = 4, } IndexElementSize; typedef enum { @@ -128,11 +129,6 @@ typedef enum { RenderTargetUsagePreserveContents } RenderTargetUsage; -typedef enum { - ResourceUsageStatic = GL_STATIC_DRAW, - ResourceUsageDynamic = GL_DYNAMIC_DRAW -} ResourceUsage; - typedef enum { ResourceTypeTexture2D = GL_TEXTURE_2D, ResourceTypeIndexBuffer = GL_ELEMENT_ARRAY_BUFFER, @@ -232,12 +228,12 @@ typedef enum { VertexElementUsageColor = GL_COLOR_ARRAY, VertexElementUsageTextureCoordinate = GL_TEXTURE_COORD_ARRAY, VertexElementUsagePointSize = GL_POINT_SIZE_ARRAY_OES, - //VertexElementUsageBinormal, - //VertexElementUsageBlendIndices, - //VertexElementUsageBlendWeight, - //VertexElementUsageDepth, - //VertexElementUsageFog, - //VertexElementUsageSample, - //VertexElementUsageTangent, - //VertexElementUsageTessellateFactor + VertexElementUsageBinormal, + VertexElementUsageBlendIndices, + VertexElementUsageBlendWeight, + VertexElementUsageDepth, + VertexElementUsageFog, + VertexElementUsageSample, + VertexElementUsageTangent, + VertexElementUsageTessellateFactor } VertexElementUsage; diff --git a/Classes/Retronator/Xni/Framework/Graphics/HiDefGraphicsDevice.m b/Classes/Retronator/Xni/Framework/Graphics/HiDefGraphicsDevice.m index 273643f..58e3aa7 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/HiDefGraphicsDevice.m +++ b/Classes/Retronator/Xni/Framework/Graphics/HiDefGraphicsDevice.m @@ -11,7 +11,7 @@ @implementation HiDefGraphicsDevice - (EAGLContext*) createContext { - return [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; + return [[[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2] autorelease]; } @end diff --git a/Classes/Retronator/Xni/Framework/Graphics/IndexArray.h b/Classes/Retronator/Xni/Framework/Graphics/IndexArray.h new file mode 100644 index 0000000..da6ca06 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/IndexArray.h @@ -0,0 +1,29 @@ +// +// IndexArray.h +// XNI +// +// Created by Matej Jan on 30.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.Graphics.classes.h" + +@class XniAdaptiveArray; + +@interface IndexArray : NSObject { + XniAdaptiveArray *array; +} + +- (id) initWithItemSize:(int)itemSize initialCapacity:(int)initialCapacity; + +@property (nonatomic, readonly) void *array; +@property (nonatomic, readonly) int count; +@property (nonatomic, readonly) int sizeInBytes; +@property (nonatomic, readonly) IndexElementSize indexElementSize; + +- (void) clear; +- (void) addIndex:(void*)index; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/IndexArray.m b/Classes/Retronator/Xni/Framework/Graphics/IndexArray.m new file mode 100644 index 0000000..12c595d --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/IndexArray.m @@ -0,0 +1,50 @@ +// +// IndexArray.m +// XNI +// +// Created by Matej Jan on 30.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "IndexArray.h" + +#import "XniAdaptiveArray.h" + +@implementation IndexArray + +- (id) initWithItemSize:(int)itemSize initialCapacity:(int)initialCapacity { + if (self = [super init]) { + array = [[XniAdaptiveArray alloc] initWithItemSize:itemSize initialCapacity:initialCapacity]; + } + return self; +} + +- (void *) array { + return array.array; +} + +- (int) count { + return array.count; +} + +- (int) sizeInBytes { + return array.count * array.itemSize; +} + +- (IndexElementSize) indexElementSize { return 0; } + +- (void) clear { + [array clear]; +} + +- (void) addIndex:(void *)index { + [array addItem:index]; +} + +- (void) dealloc +{ + [array release]; + [super dealloc]; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer+Internal.h b/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer+Internal.h new file mode 100644 index 0000000..b93ab52 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer+Internal.h @@ -0,0 +1,16 @@ +// +// IndexBuffer+Internal.h +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + + +@interface IndexBuffer (Internal) + +@property (nonatomic, readonly) uint bufferID; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.h b/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.h index 162d70b..3c01b17 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.h +++ b/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.h @@ -12,8 +12,20 @@ @interface IndexBuffer : GraphicsResource { uint bufferID; + BufferUsage bufferUsage; + int indexCount; + IndexElementSize indexElementSize; } -@property (nonatomic, readonly) uint bufferId; +- (id) initWithGraphicsDevice:(GraphicsDevice *)theGraphicsDevice + indexElementSize:(IndexElementSize)theIndexElementSize + indexCount:(int)theIndexCount + usage:(BufferUsage)theBufferUsage; -@end +@property (nonatomic, readonly) BufferUsage bufferUsage; +@property (nonatomic, readonly) int indexCount; +@property (nonatomic, readonly) IndexElementSize indexElementSize; + +- (void) setData:(IndexArray*)data; + +@end \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.m b/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.m index c926a76..06b71d8 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.m +++ b/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.m @@ -7,10 +7,37 @@ // #import "IndexBuffer.h" +#import "IndexBuffer+Internal.h" +#import "GraphicsDevice+Internal.h" +#import "Retronator.Xni.Framework.Graphics.h" @implementation IndexBuffer -@synthesize bufferId; +- (id) initWithGraphicsDevice:(GraphicsDevice *)theGraphicsDevice + indexElementSize:(IndexElementSize)theIndexElementSize + indexCount:(int)theIndexCount + usage:(BufferUsage)theBufferUsage +{ + self = [super initWithGraphicsDevice:theGraphicsDevice]; + if (self != nil) { + bufferID = [graphicsDevice createBuffer]; + indexElementSize = theIndexElementSize; + indexCount = theIndexCount; + bufferUsage = theBufferUsage; + } + return self; +} + +@synthesize indexElementSize, indexCount, bufferUsage; + +- (uint) bufferID { + return bufferID; +} + +- (void) setData:(IndexArray*)data { + [graphicsDevice setData:data.array toIndexBuffer:self]; +} @end + diff --git a/Classes/Retronator/Xni/Framework/Graphics/Model+Internal.h b/Classes/Retronator/Xni/Framework/Graphics/Model+Internal.h new file mode 100644 index 0000000..de71c6c --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/Model+Internal.h @@ -0,0 +1,18 @@ +// +// Model+Internal.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Model.h" +#import "Retronator.Xni.Framework.Content.classes.h" + +@interface Model (Internal) + +- (id) initWithBones:(NSArray*)theBones meshes:(NSArray*)theMeshes root:(ModelBone*)theRoot tag:(id)theTag; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/Model.h b/Classes/Retronator/Xni/Framework/Graphics/Model.h new file mode 100644 index 0000000..e205567 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/Model.h @@ -0,0 +1,31 @@ +// +// Model.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.Graphics.classes.h" + +@interface Model : NSObject { + ModelBoneCollection *bones; + ModelMeshCollection *meshes; + ModelBone *root; + id tag; + + NSMutableArray *absoluteBones; +} + +@property (nonatomic, readonly) ModelBoneCollection *bones; +@property (nonatomic, readonly) ModelMeshCollection *meshes; +@property (nonatomic, readonly) ModelBone *root; +@property (nonatomic, retain) id tag; + +- (void) copyAbsoluteBoneTransformsTo:(NSArray*)destinationBoneTransforms; + +- (void) drawWithWorld:(Matrix*)world view:(Matrix*)view projection:(Matrix*)projection; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/Model.m b/Classes/Retronator/Xni/Framework/Graphics/Model.m new file mode 100644 index 0000000..019ffcf --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/Model.m @@ -0,0 +1,91 @@ +// +// Model.m +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "Model.h" +#import "Model+Internal.h" + +#import "Retronator.Xni.Framework.h" +#import "Retronator.Xni.Framework.Graphics.h" +#import "ModelMesh+Internal.h" +#import "ModelMeshPart+Internal.h" +#import "Retronator.Xni.Framework.Content.h" +#import "Retronator.Xni.Framework.Content.Pipeline.Processors.h" + +@interface Model () + +- (void) copyAbsoluteBoneTransformsTo:(NSArray *)destinationBoneTransforms forBone:(ModelBone*)bone; + +@end + + +@implementation Model + +- (id) initWithBones:(NSArray*)theBones meshes:(NSArray*)theMeshes root:(ModelBone*)theRoot tag:(id)theTag; +{ + self = [super init]; + if (self != nil) { + bones = [[ModelBoneCollection alloc] initWithItems:theBones]; + meshes = [[ModelMeshCollection alloc] initWithItems:theMeshes]; + root = [theRoot retain]; + self.tag = theTag; + + absoluteBones = [[NSMutableArray alloc] initWithCapacity:bones.count]; + for (int i = 0; i < bones.count; i++) { + [absoluteBones addObject:[Matrix zero]]; + } + } + return self; +} + +@synthesize bones, meshes, root, tag; + +- (void) copyAbsoluteBoneTransformsTo:(NSArray *)destinationBoneTransforms { + [self copyAbsoluteBoneTransformsTo:destinationBoneTransforms forBone:root]; +} + +- (void) copyAbsoluteBoneTransformsTo:(NSArray *)destinationBoneTransforms forBone:(ModelBone*)bone { + Matrix *parent = bone.parent ? [destinationBoneTransforms objectAtIndex:bone.parent.index] : [Matrix identity]; + Matrix *target = [destinationBoneTransforms objectAtIndex:bone.index]; + [target set:[Matrix multiply:parent by:bone.transform]]; + for (ModelBone *child in bone.children) { + [self copyAbsoluteBoneTransformsTo:destinationBoneTransforms forBone:child]; + } +} + +- (void) drawWithWorld:(Matrix *)world view:(Matrix *)view projection:(Matrix *)projection { + [self copyAbsoluteBoneTransformsTo:absoluteBones]; + + for (ModelMesh *mesh in meshes) { + + // Set matrices on all mesh's effects. + for (Effect *effect in mesh.effects) { + BasicEffect *basicEffect = [effect isKindOfClass:[BasicEffect class]] ? (BasicEffect*)effect : nil; + + if (basicEffect) { + basicEffect.world = [Matrix multiply:[absoluteBones objectAtIndex:mesh.parentBone.index] by:world]; + basicEffect.view = view; + basicEffect.projection = projection; + } + } + + // Draw the mesh. + [mesh draw]; + } +} + +- (void) dealloc +{ + [bones release]; + [meshes release]; + [root release]; + [tag release]; + [super dealloc]; +} + + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelBone+Internal.h b/Classes/Retronator/Xni/Framework/Graphics/ModelBone+Internal.h new file mode 100644 index 0000000..ecc08b7 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelBone+Internal.h @@ -0,0 +1,21 @@ +// +// ModelBone+Internal.h +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + + +@interface ModelBone (Internal) + +- (id) initWithChildren:(NSArray*)theChildren + index:(int)theIndex + name:(NSString*)theName + transform:(Matrix*)theTransform; + +- (void) setParent:(ModelBone*)theParent; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelBone+Internal.m b/Classes/Retronator/Xni/Framework/Graphics/ModelBone+Internal.m new file mode 100644 index 0000000..63c60d9 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelBone+Internal.m @@ -0,0 +1,14 @@ +// +// ModelBone+Internal.m +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "ModelBone+Internal.h" + + +@implementation ModelBone_Internal + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelBone.h b/Classes/Retronator/Xni/Framework/Graphics/ModelBone.h new file mode 100644 index 0000000..327a893 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelBone.h @@ -0,0 +1,28 @@ +// +// ModelBone.h +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.classes.h" +#import "Retronator.Xni.Framework.Graphics.classes.h" + +@interface ModelBone : NSObject { + ModelBoneCollection *children; + int index; + NSString *name; + ModelBone *parent; + Matrix *transform; +} + +@property (nonatomic, readonly) ModelBoneCollection *children; +@property (nonatomic, readonly) int index; +@property (nonatomic, readonly) NSString *name; +@property (nonatomic, readonly) ModelBone *parent; +@property (nonatomic, retain) Matrix *transform; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelBone.m b/Classes/Retronator/Xni/Framework/Graphics/ModelBone.m new file mode 100644 index 0000000..3d5cd99 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelBone.m @@ -0,0 +1,47 @@ +// +// ModelBone.m +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "ModelBone.h" +#import "ModelBone+Internal.h" + +#import "Retronator.Xni.Framework.Graphics.h" + +@implementation ModelBone + +- (id) initWithChildren:(NSArray *)theChildren + index:(int)theIndex + name:(NSString *)theName + transform:(Matrix *)theTransform +{ + self = [super init]; + if (self != nil) { + children = [[ModelBoneCollection alloc] initWithItems:theChildren]; + index = theIndex; + name = [theName retain]; + transform = [theTransform retain]; + } + return self; +} + +@synthesize children, index, name, parent, transform; + +- (void) setParent:(ModelBone*)theParent { + parent = [theParent retain]; +} + +- (void) dealloc +{ + [children release]; + [name release]; + [parent release]; + [transform release]; + [super dealloc]; +} + + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelBoneCollection.h b/Classes/Retronator/Xni/Framework/Graphics/ModelBoneCollection.h new file mode 100644 index 0000000..ada25dc --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelBoneCollection.h @@ -0,0 +1,28 @@ +// +// ModelBoneCollection.h +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.Graphics.classes.h" + +#define ReadOnlyCollection ModelBoneCollection +#define T ModelBone* +#define Variables NSMutableDictionary *bones; + +#include "ReadOnlyCollection.h" + +@interface ModelBoneCollection (Custom) + +- (ModelBone*) itemForName:(NSString*)name; + +@end + + +#undef ReadOnlyCollection +#undef T +#undef Variables \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelBoneCollection.m b/Classes/Retronator/Xni/Framework/Graphics/ModelBoneCollection.m new file mode 100644 index 0000000..53f5f14 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelBoneCollection.m @@ -0,0 +1,30 @@ +// +// ModelBoneCollection.m +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "ModelBoneCollection.h" + +#import "Retronator.Xni.Framework.Graphics.h" + +#define ReadOnlyCollection ModelBoneCollection +#define T ModelBone* +#define Initialization bones = [[NSMutableDictionary alloc] init]; for (ModelBone* bone in collection) {if (bone.name) [bones setObject:bone forKey:bone.name];} + +#include "ReadOnlyCollection.m.h" + +@implementation ModelBoneCollection (Custom) + +- (ModelBone *) itemForName:(NSString *)name { + return [bones objectForKey:name]; +} + +@end + + +#undef ReadOnlyCollection +#undef T +#undef Initialization \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelEffectCollection.h b/Classes/Retronator/Xni/Framework/Graphics/ModelEffectCollection.h new file mode 100644 index 0000000..4897c66 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelEffectCollection.h @@ -0,0 +1,19 @@ +// +// ModelEffectCollection.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.Graphics.classes.h" + +#define ReadOnlyCollection ModelEffectCollection +#define T Effect* + +#include "ReadOnlyCollection.h" + +#undef ReadOnlyCollection +#undef T diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelEffectCollection.m b/Classes/Retronator/Xni/Framework/Graphics/ModelEffectCollection.m new file mode 100644 index 0000000..6ef937c --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelEffectCollection.m @@ -0,0 +1,18 @@ +// +// ModelEffectCollection.m +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "ModelEffectCollection.h" + + +#define ReadOnlyCollection ModelEffectCollection +#define T Effect* + +#include "ReadOnlyCollection.m.h" + +#undef ReadOnlyCollection +#undef T \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelMesh+Internal.h b/Classes/Retronator/Xni/Framework/Graphics/ModelMesh+Internal.h new file mode 100644 index 0000000..c7ea9b3 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelMesh+Internal.h @@ -0,0 +1,16 @@ +// +// ModelMesh+Internal.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + + +@interface ModelMesh (Internal) + +- (id) initWithName:(NSString*)theName parentBone:(ModelBone*)theParentBone modelMeshParts:(NSArray*)theModelMeshParts tag:(id)theTag; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelMesh.h b/Classes/Retronator/Xni/Framework/Graphics/ModelMesh.h new file mode 100644 index 0000000..328e0e3 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelMesh.h @@ -0,0 +1,29 @@ +// +// ModelMesh.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.Graphics.classes.h" + +@interface ModelMesh : NSObject { + ModelEffectCollection *effects; + ModelMeshPartCollection *meshParts; + NSString *name; + ModelBone *parentBone; + id tag; +} + +@property (nonatomic, readonly) ModelEffectCollection *effects; +@property (nonatomic, readonly) ModelMeshPartCollection *meshParts; +@property (nonatomic, readonly) NSString *name; +@property (nonatomic, readonly) ModelBone *parentBone; +@property (nonatomic, retain) id tag; + +- (void) draw; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelMesh.m b/Classes/Retronator/Xni/Framework/Graphics/ModelMesh.m new file mode 100644 index 0000000..e653785 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelMesh.m @@ -0,0 +1,68 @@ +// +// ModelMesh.m +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "ModelMesh.h" +#import "ModelMesh+Internal.h" + +#import "Retronator.Xni.Framework.Graphics.h" + +@implementation ModelMesh + +- (id) initWithName:(NSString *)theName parentBone:(ModelBone*)theParentBone modelMeshParts:(NSArray *)theModelMeshParts tag:(id)theTag +{ + self = [super init]; + if (self != nil) { + name = [[NSString alloc] initWithString:theName]; + parentBone = [theParentBone retain]; + meshParts = [[ModelMeshPartCollection alloc] initWithItems:theModelMeshParts]; + self.tag = theTag; + + NSMutableArray *partEffects = [NSMutableArray arrayWithCapacity:meshParts.count]; + for (ModelMeshPart *part in meshParts) { + [partEffects addObject:part.effect]; + } + effects = [[ModelEffectCollection alloc] initWithItems:partEffects]; + } + return self; +} + +@synthesize name, parentBone, meshParts, effects, tag; + +- (void) draw { + + + for (ModelMeshPart *part in meshParts) { + GraphicsDevice *graphicsDevice = part.effect.graphicsDevice; + + [graphicsDevice setVertexBuffer:part.vertexBuffer]; + graphicsDevice.indices = part.indexBuffer; + + for (EffectPass *pass in part.effect.currentTechnique.passes) { + [pass apply]; + + [graphicsDevice drawIndexedPrimitivesOfType:PrimitiveTypeTriangleList + baseVertex:part.vertexOffset + minVertexIndex:0 + numVertices:part.numVertices + startIndex:part.startIndex + primitiveCount:part.primitiveCount]; + } + } +} + +- (void) dealloc +{ + [name release]; + [parentBone release]; + [meshParts release]; + [effects release]; + [tag release]; + [super dealloc]; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelMeshCollection.h b/Classes/Retronator/Xni/Framework/Graphics/ModelMeshCollection.h new file mode 100644 index 0000000..9dddd13 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelMeshCollection.h @@ -0,0 +1,28 @@ +// +// ModelMeshCollection.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.Graphics.classes.h" + +#define ReadOnlyCollection ModelMeshCollection +#define T ModelMesh* +#define Variables NSMutableDictionary *meshes; + +#include "ReadOnlyCollection.h" + +@interface ModelMeshCollection (Custom) + +- (ModelMesh*) itemForName:(NSString*)name; + +@end + + +#undef ReadOnlyCollection +#undef T +#undef Variables diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelMeshCollection.m b/Classes/Retronator/Xni/Framework/Graphics/ModelMeshCollection.m new file mode 100644 index 0000000..ea87083 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelMeshCollection.m @@ -0,0 +1,30 @@ +// +// ModelMeshCollection.m +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "ModelMeshCollection.h" + +#import "Retronator.Xni.Framework.Graphics.h" + +#define ReadOnlyCollection ModelMeshCollection +#define T ModelMesh* +#define Initialization meshes = [[NSMutableDictionary alloc] init]; for (ModelMesh* mesh in collection) {[meshes setObject:mesh forKey:mesh.name];} + +#include "ReadOnlyCollection.m.h" + +@implementation ModelMeshCollection (Custom) + +- (ModelMesh *) itemForName:(NSString *)name { + return [meshes objectForKey:name]; +} + +@end + + +#undef ReadOnlyCollection +#undef T +#undef Initialization \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelMeshPart+Internal.h b/Classes/Retronator/Xni/Framework/Graphics/ModelMeshPart+Internal.h new file mode 100644 index 0000000..50a98c0 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelMeshPart+Internal.h @@ -0,0 +1,18 @@ +// +// ModelMeshPart+Internal.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + + +@interface ModelMeshPart (Internal) + +- (id) initWithVertexOffset:(int)theVertexOffset numVertices:(int)theNumVertices startIndex:(int)theStartIndex + primitiveCount:(int)thePrimitiveCount tag:(id)theTag indexBuffer:(IndexBuffer*)theIndexBuffer + vertexBuffer:(VertexBuffer*)theVertexBuffer effect:(Effect*)theEffect; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelMeshPart.h b/Classes/Retronator/Xni/Framework/Graphics/ModelMeshPart.h new file mode 100644 index 0000000..f7a941b --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelMeshPart.h @@ -0,0 +1,33 @@ +// +// ModelMeshPart.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.Graphics.classes.h" + +@interface ModelMeshPart : NSObject { + Effect *effect; + IndexBuffer *indexBuffer; + int numVertices; + int primitiveCount; + int startIndex; + id tag; + VertexBuffer *vertexBuffer; + int vertexOffset; +} + +@property (nonatomic, retain) Effect *effect; +@property (nonatomic, readonly) IndexBuffer *indexBuffer; +@property (nonatomic, readonly) int numVertices; +@property (nonatomic, readonly) int primitiveCount; +@property (nonatomic, readonly) int startIndex; +@property (nonatomic, retain) id tag; +@property (nonatomic, readonly) VertexBuffer *vertexBuffer; +@property (nonatomic, readonly) int vertexOffset; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelMeshPart.m b/Classes/Retronator/Xni/Framework/Graphics/ModelMeshPart.m new file mode 100644 index 0000000..4cf9992 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelMeshPart.m @@ -0,0 +1,43 @@ +// +// ModelMeshPart.m +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "ModelMeshPart.h" +#import "ModelMeshPart+Internal.h" + +@implementation ModelMeshPart + +- (id) initWithVertexOffset:(int)theVertexOffset numVertices:(int)theNumVertices startIndex:(int)theStartIndex + primitiveCount:(int)thePrimitiveCount tag:(id)theTag indexBuffer:(IndexBuffer*)theIndexBuffer + vertexBuffer:(VertexBuffer*)theVertexBuffer effect:(Effect*)theEffect +{ + self = [super init]; + if (self != nil) { + vertexOffset = theVertexOffset; + numVertices = theNumVertices; + startIndex = theStartIndex; + primitiveCount = thePrimitiveCount; + self.tag = tag; + indexBuffer = [theIndexBuffer retain]; + vertexBuffer = [theVertexBuffer retain]; + effect = [theEffect retain]; + } + return self; +} + +@synthesize effect,indexBuffer,numVertices,primitiveCount,startIndex,tag,vertexBuffer,vertexOffset; + +- (void) dealloc +{ + [indexBuffer release]; + [vertexBuffer release]; + [effect release]; + [tag release]; + [super dealloc]; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelMeshPartCollection.h b/Classes/Retronator/Xni/Framework/Graphics/ModelMeshPartCollection.h new file mode 100644 index 0000000..2a8360c --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelMeshPartCollection.h @@ -0,0 +1,19 @@ +// +// ModelMeshPartCollection.h +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.Graphics.classes.h" + +#define ReadOnlyCollection ModelMeshPartCollection +#define T ModelMeshPart* + +#include "ReadOnlyCollection.h" + +#undef ReadOnlyCollection +#undef T diff --git a/Classes/Retronator/Xni/Framework/Graphics/ModelMeshPartCollection.m b/Classes/Retronator/Xni/Framework/Graphics/ModelMeshPartCollection.m new file mode 100644 index 0000000..a3f3761 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ModelMeshPartCollection.m @@ -0,0 +1,18 @@ +// +// ModelMeshPartCollection.m +// XNI +// +// Created by Matej Jan on 22.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "ModelMeshPartCollection.h" + + +#define ReadOnlyCollection ModelMeshPartCollection +#define T ModelMeshPart* + +#include "ReadOnlyCollection.m.h" + +#undef ReadOnlyCollection +#undef T diff --git a/Classes/Retronator/Xni/Framework/Graphics/RasterizerState.m b/Classes/Retronator/Xni/Framework/Graphics/RasterizerState.m index b8dc48f..f3b3d00 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/RasterizerState.m +++ b/Classes/Retronator/Xni/Framework/Graphics/RasterizerState.m @@ -20,7 +20,7 @@ static RasterizerState *cullNone; - (id) init { self = [super init]; if (self != nil) { - cullMode = CullModeCullClockwiseFace; + cullMode = CullModeCullCounterClockwiseFace; depthBias = 0; fillMode = FillModeSolid; multiSampleAntiAlias = YES; @@ -33,6 +33,7 @@ static RasterizerState *cullNone; + (void) initialize { if (!cullClockwise) { cullClockwise = [[RasterizerState alloc] init]; + cullClockwise.cullMode = CullModeCullClockwiseFace; } if (!cullCounterClockwise) { diff --git a/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.m b/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.m index 4d05f64..add559a 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.m +++ b/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.m @@ -10,11 +10,24 @@ #import "Retronator.Xni.Framework.Graphics.h" +#import "VertexBuffer+Internal.h" +#import "IndexBuffer+Internal.h" + @interface ReachGraphicsDevice() +- (void) drawUserIndexedPrimitivesOfType:(PrimitiveType)primitiveType + vertexData:(void*)vertexData + vertexOffset:(int)vertexOffset + numVertices:(int)numVertices + indexData:(void*)indexData + indexOffset:(int)indexOffset + primitiveCount:(int)primitiveCount + vertexDeclaration:(VertexDeclaration*) vertexDeclaration + indexElementSize:(IndexElementSize)indexElementSize; + - (void) enableVertexBuffers; - (void) disableVertexBuffers; - + - (void) enableDeclaration:(VertexDeclaration*)vertexDeclaration forUserData:(void*)data; - (void) enableDeclaration:(VertexDeclaration*)vertexDeclaration onStream:(int)stream useBuffers:(BOOL)useBuffers pointer:(void*)pointer; @@ -26,19 +39,68 @@ @implementation ReachGraphicsDevice - (EAGLContext*) createContext { - return [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1]; + return [[[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1] autorelease]; } -- (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType vertices:(VertexArray*)vertexData - startingAt:(int)vertexOffset count:(int)primitiveCount { - [self drawUserPrimitivesOfType:primitiveType vertices:vertexData.array ofType:vertexData.vertexDeclaration - startingAt:vertexOffset count:primitiveCount]; +- (void) drawPrimitivesOfType:(PrimitiveType)primitiveType + startVertex:(int)startVertex + primitiveCount:(int)primitiveCount +{ + [self enableVertexBuffers]; + + int count = [GraphicsDevice getNumberOfVerticesForPrimitiveType:primitiveType primitiveCount:primitiveCount]; + glDrawArrays(primitiveType, 0, count); + + [self disableVertexBuffers]; } -- (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType - vertices:(void *)vertexData ofType:(VertexDeclaration *)vertexDeclaration - startingAt:(int)vertexOffset count:(int)primitiveCount { - +- (void) drawIndexedPrimitivesOfType:(PrimitiveType)primitiveType + baseVertex:(int)baseVertex + minVertexIndex:(int)minVertexIndex + numVertices:(int)numVertices + startIndex:(int)startIndex + primitiveCount:(int)primitiveCount; +{ + [self enableVertexBuffers]; + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indices.bufferID); + + int count = [GraphicsDevice getNumberOfVerticesForPrimitiveType:primitiveType primitiveCount:primitiveCount]; + + GLenum type; + switch (indices.indexElementSize) { + case IndexElementSizeSixteenBits: + type = DataTypeUnsignedShort; + break; + } + + void *startIndexPointer = (void*)(startIndex * indices.indexElementSize); + glDrawElements(primitiveType, count, type, startIndexPointer); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + [self disableVertexBuffers]; +} + +- (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType + vertexData:(VertexArray*)vertexData + vertexOffset:(int)vertexOffset + primitiveCount:(int)primitiveCount +{ + [self drawUserPrimitivesOfType:primitiveType + vertexData:vertexData.array + vertexOffset:vertexOffset + primitiveCount:primitiveCount + vertexDeclaration:vertexData.vertexDeclaration]; +} + + +- (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType + vertexData:(void*)vertexData + vertexOffset:(int)vertexOffset + primitiveCount:(int)primitiveCount + vertexDeclaration:(VertexDeclaration*) vertexDeclaration +{ [self enableDeclaration:vertexDeclaration forUserData:(vertexData + vertexOffset * vertexDeclaration.vertexStride)]; int count = [GraphicsDevice getNumberOfVerticesForPrimitiveType:primitiveType primitiveCount:primitiveCount]; @@ -47,6 +109,73 @@ [self disableDeclaration:vertexDeclaration]; } +- (void) drawUserIndexedPrimitivesOfType:(PrimitiveType)primitiveType + vertexData:(VertexArray*)vertexData + vertexOffset:(int)vertexOffset + numVertices:(int)numVertices + indexData:(IndexArray*)indexData + indexOffset:(int)indexOffset + primitiveCount:(int)primitiveCount +{ + [self drawUserIndexedPrimitivesOfType:primitiveType + vertexData:vertexData.array + vertexOffset:vertexOffset + numVertices:numVertices + indexData:indexData.array + indexOffset:indexOffset + primitiveCount:primitiveCount + vertexDeclaration:vertexData.vertexDeclaration + indexElementSize:indexData.indexElementSize]; +} + +- (void) drawUserIndexedPrimitivesOfType:(PrimitiveType)primitiveType + vertexData:(void*)vertexData + vertexOffset:(int)vertexOffset + numVertices:(int)numVertices + shortIndexData:(void*)indexData + indexOffset:(int)indexOffset + primitiveCount:(int)primitiveCount + vertexDeclaration:(VertexDeclaration*) vertexDeclaration +{ + [self drawUserIndexedPrimitivesOfType:primitiveType + vertexData:vertexData + vertexOffset:vertexOffset + numVertices:numVertices + indexData:indexData + indexOffset:indexOffset + primitiveCount:primitiveCount + vertexDeclaration:vertexDeclaration + indexElementSize:IndexElementSizeSixteenBits]; +} + +- (void) drawUserIndexedPrimitivesOfType:(PrimitiveType)primitiveType + vertexData:(void*)vertexData + vertexOffset:(int)vertexOffset + numVertices:(int)numVertices + indexData:(void*)indexData + indexOffset:(int)indexOffset + primitiveCount:(int)primitiveCount + vertexDeclaration:(VertexDeclaration*) vertexDeclaration + indexElementSize:(IndexElementSize)indexElementSize +{ + [self enableDeclaration:vertexDeclaration forUserData:(vertexData + vertexOffset * vertexDeclaration.vertexStride)]; + + int count = [GraphicsDevice getNumberOfVerticesForPrimitiveType:primitiveType primitiveCount:primitiveCount]; + + GLenum type; + switch (indexElementSize) { + case IndexElementSizeSixteenBits: + type = DataTypeUnsignedShort; + break; + } + + void *startIndex = indexData + indexOffset * indexElementSize; + glDrawElements(primitiveType, count, type, startIndex); + + [self disableDeclaration:vertexDeclaration]; + +} + // Private methods - (void) enableVertexBuffers { @@ -71,7 +200,7 @@ if (useBuffers) { // Bind the buffer the vertex element is using. VertexBufferBinding* binding = [vertices objectAtIndex:stream]; - glBindBuffer(GL_ARRAY_BUFFER, binding.vertexBuffer.bufferId); + glBindBuffer(GL_ARRAY_BUFFER, binding.vertexBuffer.bufferID); } // Enable the state that the vertex element represents. diff --git a/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.classes.h b/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.classes.h index 4e7c54c..0cc378d 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.classes.h +++ b/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.classes.h @@ -3,9 +3,12 @@ @class GraphicsResource, Texture, Texture2D, Effect, EffectTechnique, EffectPass, BasicEffect, DirectionalLight; #import "VertexStructs.h" -@class VertexElement, VertexPositionColor, VertexPositionTexture, VertexPositionColorTexture, VertexDeclaration; -@class VertexArray, VertexPositionColorArray, VertexPositionTextureArray, VertexPositionColorTextureArray; +@class VertexElement, VertexPositionColor, VertexPositionTexture, VertexPositionColorTexture, VertexPositionNormalTexture, VertexDeclaration; +@class VertexArray, VertexPositionColorArray, VertexPositionTextureArray, VertexPositionColorTextureArray, VertexPositionNormalTextureArray; +@class IndexArray, ShortIndexArray; @class VertexBuffer, VertexBufferBinding, IndexBuffer; +@class Model, ModelMeshCollection, ModelMesh, ModelEffectCollection, ModelMeshPartCollection, ModelMeshPart; +@class ModelBone, ModelBoneCollection; @class BlendState, DepthStencilState, RasterizerState, SamplerState, SamplerStateCollection, TextureCollection; diff --git a/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.h b/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.h index 81d0148..bff0fc0 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.h +++ b/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.h @@ -14,17 +14,32 @@ #import "VertexPositionColor.h" #import "VertexPositionTexture.h" #import "VertexPositionColorTexture.h" +#import "VertexPositionNormalTexture.h" #import "VertexDeclaration.h" #import "VertexArray.h" #import "VertexPositionColorArray.h" #import "VertexPositionTextureArray.h" #import "VertexPositionColorTextureArray.h" +#import "VertexPositionNormalTextureArray.h" + +#import "IndexArray.h" +#import "ShortIndexArray.h" #import "VertexBuffer.h" #import "VertexBufferBinding.h" #import "IndexBuffer.h" +#import "Model.h" +#import "ModelMeshCollection.h" +#import "ModelMesh.h" +#import "ModelEffectCollection.h" +#import "ModelMeshPartCollection.h" +#import "ModelMeshPart.h" + +#import "ModelBone.h" +#import "ModelBoneCollection.h" + #import "BlendState.h" #import "DepthStencilState.h" #import "RasterizerState.h" diff --git a/Classes/Retronator/Xni/Framework/Graphics/ShortIndexArray.h b/Classes/Retronator/Xni/Framework/Graphics/ShortIndexArray.h new file mode 100644 index 0000000..a24223c --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ShortIndexArray.h @@ -0,0 +1,21 @@ +// +// ShortIndexArray.h +// XNI +// +// Created by Matej Jan on 30.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "IndexArray.h" + +@interface ShortIndexArray : IndexArray { + +} + +- (id) initWithInitialCapacity:(int)initialCapacity; + +- (void) addIndex:(short)index; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/ShortIndexArray.m b/Classes/Retronator/Xni/Framework/Graphics/ShortIndexArray.m new file mode 100644 index 0000000..d91d5bf --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/ShortIndexArray.m @@ -0,0 +1,30 @@ +// +// ShortIndexArray.m +// XNI +// +// Created by Matej Jan on 30.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "ShortIndexArray.h" + +#import "Retronator.Xni.Framework.Graphics.h" + +@implementation ShortIndexArray + + +- (id) initWithInitialCapacity:(int)initialCapacity { + if (self = [super initWithItemSize:sizeof(short) initialCapacity:initialCapacity]) { + } + return self; +} + +- (IndexElementSize) indexElementSize { + return IndexElementSizeSixteenBits; +} + +- (void) addIndex:(short)index { + [super addIndex:&index]; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/SpriteBatch.m b/Classes/Retronator/Xni/Framework/Graphics/SpriteBatch.m index 9586ad6..81055ab 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/SpriteBatch.m +++ b/Classes/Retronator/Xni/Framework/Graphics/SpriteBatch.m @@ -45,11 +45,11 @@ typedef struct { @end -Matrix *identity; +static Matrix *identity; -NSArray *textureSort; -NSArray *frontToBackSort; -NSArray *backToFrontSort; +static NSArray *textureSort; +static NSArray *frontToBackSort; +static NSArray *backToFrontSort; static inline void SpriteSetSource(XniSprite *sprite, Rectangle *source, Texture2D *texture, SpriteEffects effects) { if (source) { @@ -150,10 +150,8 @@ static VertexPositionColorTextureStruct vertices[4]; NSSortDescriptor *depthDescendingSortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"layerDepth" ascending:NO] autorelease]; textureSort = [[NSArray arrayWithObject:textureSortDescriptor] retain]; - - // For better performance, depth sorting sorts by depth first and later also by texture. - frontToBackSort = [[NSArray arrayWithObjects:depthAscendingSortDescriptor, textureSortDescriptor, nil] retain]; - backToFrontSort = [[NSArray arrayWithObjects:depthDescendingSortDescriptor, textureSortDescriptor, nil] retain]; + frontToBackSort = [[NSArray arrayWithObject:depthAscendingSortDescriptor] retain]; + backToFrontSort = [[NSArray arrayWithObject:depthDescendingSortDescriptor] retain]; } - (void) setProjection { @@ -413,18 +411,18 @@ static VertexPositionColorTextureStruct vertices[4]; vertices[3].color = sprite->color; [vertexArray addVertex:&vertices[0]]; - [vertexArray addVertex:&vertices[1]]; - [vertexArray addVertex:&vertices[2]]; [vertexArray addVertex:&vertices[2]]; [vertexArray addVertex:&vertices[1]]; + [vertexArray addVertex:&vertices[2]]; [vertexArray addVertex:&vertices[3]]; + [vertexArray addVertex:&vertices[1]]; } [self.graphicsDevice.textures setItem:((XniSprite*)[sprites objectAtIndex:startIndex]).texture atIndex:0]; // Draw the vertex array. int count = (endIndex - startIndex + 1) * 2; - [graphicsDevice drawUserPrimitivesOfType:PrimitiveTypeTriangleList vertices:vertexArray startingAt:0 count:count]; + [graphicsDevice drawUserPrimitivesOfType:PrimitiveTypeTriangleList vertexData:vertexArray vertexOffset:0 primitiveCount:count]; // Clean up. [vertexArray clear]; diff --git a/Classes/Retronator/Xni/Framework/Graphics/Texture2D.m b/Classes/Retronator/Xni/Framework/Graphics/Texture2D.m index 6bea994..7151e38 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/Texture2D.m +++ b/Classes/Retronator/Xni/Framework/Graphics/Texture2D.m @@ -13,6 +13,8 @@ #import "Retronator.Xni.Framework.Graphics.h" #import "Retronator.Xni.Framework.Content.Pipeline.Graphics.h" +#import "GraphicsDevice+Internal.h" + @implementation Texture2D - (id) initWithGraphicsDevice:(GraphicsDevice*)theGraphicsDevice width:(int)theWidth height:(int)theHeight { @@ -78,7 +80,7 @@ free(imageData); [image release]; - return texture; + return [texture autorelease]; } - (void) setDataFrom:(void*)data { diff --git a/Classes/Retronator/Xni/Framework/Graphics/Vector4.h b/Classes/Retronator/Xni/Framework/Graphics/Vector4.h index f15ba5f..14711cf 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/Vector4.h +++ b/Classes/Retronator/Xni/Framework/Graphics/Vector4.h @@ -39,6 +39,7 @@ - (float) lengthSquared; - (Vector4*) normalize; - (Vector4*) negate; +- (Vector4*) set:(Vector4*)value; - (Vector4*) add:(Vector4*)value; - (Vector4*) subtract:(Vector4*)value; - (Vector4*) multiplyBy:(float)scalar; diff --git a/Classes/Retronator/Xni/Framework/Graphics/Vector4.m b/Classes/Retronator/Xni/Framework/Graphics/Vector4.m index f782eaa..52c3de5 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/Vector4.m +++ b/Classes/Retronator/Xni/Framework/Graphics/Vector4.m @@ -110,11 +110,17 @@ Vector4Normalize(&data); return self; } + - (Vector4*) negate { Vector4Negate(&data); return self; } +- (Vector4*) set:(Vector4 *)value { + data = *value.data; + return self; +} + - (Vector4*) add:(Vector4*)value { Vector4Add(self.data, value.data, self.data); return self; diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexArray.h b/Classes/Retronator/Xni/Framework/Graphics/VertexArray.h index 11c8e5c..b2a1e44 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/VertexArray.h +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexArray.h @@ -7,12 +7,13 @@ // #import -#import "System.classes.h" + +@class XniAdaptiveArray; #import "Retronator.Xni.Framework.Graphics.classes.h" @interface VertexArray : NSObject { - AdaptiveArray *array; + XniAdaptiveArray *array; } - (id) initWithItemSize:(int)itemSize initialCapacity:(int)initialCapacity; diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexArray.m b/Classes/Retronator/Xni/Framework/Graphics/VertexArray.m index 3e64649..36c4655 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/VertexArray.m +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexArray.m @@ -7,13 +7,14 @@ // #import "VertexArray.h" -#import "System.h" + +#import "XniAdaptiveArray.h" @implementation VertexArray - (id) initWithItemSize:(int)itemSize initialCapacity:(int)initialCapacity { if (self = [super init]) { - array = [[AdaptiveArray alloc] initWithItemSize:itemSize initialCapacity:initialCapacity]; + array = [[XniAdaptiveArray alloc] initWithItemSize:itemSize initialCapacity:initialCapacity]; } return self; } diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer+Internal.h b/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer+Internal.h new file mode 100644 index 0000000..efbc028 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer+Internal.h @@ -0,0 +1,16 @@ +// +// VertexBuffer+Internal.h +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + + +@interface VertexBuffer (Internal) + +@property (nonatomic, readonly) uint bufferID; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.h b/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.h index 1a5b123..0889541 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.h +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.h @@ -11,11 +11,21 @@ #import "GraphicsResource.h" @interface VertexBuffer : GraphicsResource { - uint bufferId; + uint bufferID; + BufferUsage bufferUsage; + int vertexCount; VertexDeclaration *vertexDeclaration; } -@property (nonatomic, readonly) uint bufferId; +- (id) initWithGraphicsDevice:(GraphicsDevice *)theGraphicsDevice + vertexDeclaration:(VertexDeclaration*)theVertexDeclaration + vertexCount:(int)theVertexCount + usage:(BufferUsage)theBufferUsage; + +@property (nonatomic, readonly) BufferUsage bufferUsage; +@property (nonatomic, readonly) int vertexCount; @property (nonatomic, readonly) VertexDeclaration *vertexDeclaration; +- (void) setData:(VertexArray*)data; + @end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.m b/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.m index b7a514d..27af588 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.m +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.m @@ -7,11 +7,43 @@ // #import "VertexBuffer.h" +#import "VertexBuffer+Internal.h" +#import "GraphicsDevice+Internal.h" +#import "Retronator.Xni.Framework.Graphics.h" @implementation VertexBuffer -@synthesize bufferId; -@synthesize vertexDeclaration; +- (id) initWithGraphicsDevice:(GraphicsDevice *)theGraphicsDevice + vertexDeclaration:(VertexDeclaration *)theVertexDeclaration + vertexCount:(int)theVertexCount + usage:(BufferUsage)theBufferUsage +{ + self = [super initWithGraphicsDevice:theGraphicsDevice]; + if (self != nil) { + bufferID = [graphicsDevice createBuffer]; + vertexDeclaration = [theVertexDeclaration retain]; + vertexCount = theVertexCount; + bufferUsage = theBufferUsage; + } + return self; +} + +@synthesize vertexCount, bufferUsage, vertexDeclaration; + +- (uint) bufferID { + return bufferID; +} + +- (void) setData:(VertexArray*)data { + [graphicsDevice setData:data.array toVertexBuffer:self]; +} + +- (void) dealloc +{ + [vertexDeclaration release]; + [super dealloc]; +} + @end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexElement.h b/Classes/Retronator/Xni/Framework/Graphics/VertexElement.h index 39a5ec7..85e1703 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/VertexElement.h +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexElement.h @@ -28,6 +28,8 @@ @property (nonatomic) VertexElementFormat vertexElementFormat; @property (nonatomic) VertexElementUsage vertexElementUsage; ++ (VertexElementFormat) getElementFormatForType:(Class)type; + + (int) getSizeForFormat:(VertexElementFormat)format; + (int) getValueDimensionsForFormat:(VertexElementFormat)format; + (DataType) getValueDataTypeForFormat:(VertexElementFormat)format; diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexElement.m b/Classes/Retronator/Xni/Framework/Graphics/VertexElement.m index 18ba7a0..7c9fa64 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/VertexElement.m +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexElement.m @@ -8,6 +8,7 @@ #import "VertexElement.h" +#import "Retronator.Xni.Framework.h" #import "Retronator.Xni.Framework.Graphics.h" @implementation VertexElement @@ -34,6 +35,21 @@ @synthesize vertexElementFormat; @synthesize vertexElementUsage; ++ (VertexElementFormat) getElementFormatForType:(Class)type { + if (type == [NSNumber class]) { + return VertexElementFormatSingle; + } else if (type == [Vector2 class]) { + return VertexElementFormatVector2; + } else if (type == [Vector3 class]) { + return VertexElementFormatVector3; + } else if (type == [Vector4 class]) { + return VertexElementFormatVector4; + } else { + [NSException raise:@"NotImplementedException" format:@"The type %@ is not a valid vertex element format.", type]; + return 0; + } +} + + (int) getSizeForFormat:(VertexElementFormat)format { switch (format) { case VertexElementFormatSingle: diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.m b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.m index 275af20..f7b625e 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.m +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.m @@ -12,7 +12,7 @@ @implementation VertexPositionColor -VertexDeclaration *vertexDeclaration; +static VertexDeclaration *vertexDeclaration; + (void) initialize { NSArray *vertexElements = [NSArray arrayWithObjects: diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorTexture.m b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorTexture.m index d08430f..ff3cd0f 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorTexture.m +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorTexture.m @@ -12,7 +12,7 @@ @implementation VertexPositionColorTexture -VertexDeclaration *vertexDeclaration; +static VertexDeclaration *vertexDeclaration; + (void) initialize { NSArray *vertexElements = [NSArray arrayWithObjects: diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionNormalTexture.h b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionNormalTexture.h new file mode 100644 index 0000000..23eba83 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionNormalTexture.h @@ -0,0 +1,19 @@ +// +// VertexPositionNormalTexture.h +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "VertexElement.h" + +@interface VertexPositionNormalTexture : VertexElement { + +} + ++ (VertexDeclaration*) vertexDeclaration; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionNormalTexture.m b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionNormalTexture.m new file mode 100644 index 0000000..a7cffb6 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionNormalTexture.m @@ -0,0 +1,39 @@ +// +// VertexPositionNormalTexture.m +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "VertexPositionNormalTexture.h" + +#import "Retronator.Xni.Framework.Graphics.h" + +@implementation VertexPositionNormalTexture + +static VertexDeclaration *vertexDeclaration; + ++ (void) initialize { + NSArray *vertexElements = [NSArray arrayWithObjects: + [VertexElement vertexElementWithOffset:offsetof(VertexPositionNormalTextureStruct, position) + format:VertexElementFormatVector3 + usage:VertexElementUsagePosition + usageIndex:0], + [VertexElement vertexElementWithOffset:offsetof(VertexPositionNormalTextureStruct, normal) + format:VertexElementFormatVector3 + usage:VertexElementUsageNormal + usageIndex:0], + [VertexElement vertexElementWithOffset:offsetof(VertexPositionNormalTextureStruct, texture) + format:VertexElementFormatVector2 + usage:VertexElementUsageTextureCoordinate + usageIndex:0], nil]; + + vertexDeclaration = [[VertexDeclaration alloc] initWithElements:vertexElements]; +} + ++ (VertexDeclaration *) vertexDeclaration { + return vertexDeclaration; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionNormalTextureArray.h b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionNormalTextureArray.h new file mode 100644 index 0000000..810d91b --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionNormalTextureArray.h @@ -0,0 +1,21 @@ +// +// VertexPositionNormalTextureArray.h +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "VertexArray.h" + +@interface VertexPositionNormalTextureArray : VertexArray { + +} + +- (id) initWithInitialCapacity:(int)initialCapacity; + +- (void) addVertex:(VertexPositionNormalTextureStruct*)vertex; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionNormalTextureArray.m b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionNormalTextureArray.m new file mode 100644 index 0000000..ee01304 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionNormalTextureArray.m @@ -0,0 +1,29 @@ +// +// VertexPositionNormalTextureArray.m +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "VertexPositionNormalTextureArray.h" + +#import "Retronator.Xni.Framework.Graphics.h" + +@implementation VertexPositionNormalTextureArray + +- (id) initWithInitialCapacity:(int)initialCapacity { + if (self = [super initWithItemSize:sizeof(VertexPositionNormalTextureStruct) initialCapacity:initialCapacity]) { + } + return self; +} + +- (VertexDeclaration *) vertexDeclaration { + return [VertexPositionNormalTexture vertexDeclaration]; +} + +- (void) addVertex:(VertexPositionNormalTextureStruct*)vertex { + [super addVertex:vertex]; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.m b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.m index ea1001e..61e6726 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.m +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.m @@ -12,7 +12,7 @@ @implementation VertexPositionTexture -VertexDeclaration *vertexDeclaration; +static VertexDeclaration *vertexDeclaration; + (void) initialize { NSArray *vertexElements = [NSArray arrayWithObjects: diff --git a/Classes/Retronator/Xni/Framework/Matrix.h b/Classes/Retronator/Xni/Framework/Matrix.h index 5ed2b19..a722fa7 100644 --- a/Classes/Retronator/Xni/Framework/Matrix.h +++ b/Classes/Retronator/Xni/Framework/Matrix.h @@ -63,6 +63,7 @@ - (float) determinant; - (Matrix*) negate; +- (Matrix*) set:(Matrix*)value; - (Matrix*) add:(Matrix*)value; - (Matrix*) subtract:(Matrix*)value; - (Matrix*) multiplyByScalar:(float)scaleFactor; diff --git a/Classes/Retronator/Xni/Framework/Matrix.m b/Classes/Retronator/Xni/Framework/Matrix.m index b4748c6..687d033 100644 --- a/Classes/Retronator/Xni/Framework/Matrix.m +++ b/Classes/Retronator/Xni/Framework/Matrix.m @@ -305,6 +305,11 @@ return self; } +- (Matrix*) set:(Matrix *)value { + data = *value.data; + return self; +} + - (Matrix*) add:(Matrix*)value { MatrixAdd(self.data, value.data, self.data); return self; diff --git a/Classes/Retronator/Xni/Framework/Quaternion.h b/Classes/Retronator/Xni/Framework/Quaternion.h index 2b2b3cb..32f67af 100644 --- a/Classes/Retronator/Xni/Framework/Quaternion.h +++ b/Classes/Retronator/Xni/Framework/Quaternion.h @@ -48,6 +48,7 @@ - (Quaternion*) normalize; - (Quaternion*) negate; - (Quaternion*) inverse; +- (Quaternion*) set:(Quaternion*)value; - (Quaternion*) add:(Quaternion*)value; - (Quaternion*) subtract:(Quaternion*)value; - (Quaternion*) multiplyByScalar:(float)scaleFactor; diff --git a/Classes/Retronator/Xni/Framework/Quaternion.m b/Classes/Retronator/Xni/Framework/Quaternion.m index 33fb1e9..f9f9486 100644 --- a/Classes/Retronator/Xni/Framework/Quaternion.m +++ b/Classes/Retronator/Xni/Framework/Quaternion.m @@ -60,7 +60,7 @@ } + (Quaternion *) rotationMatrix:(Matrix *)matrix { - Quaternion *result = [[Quaternion alloc] init]; + Quaternion *result = [[[Quaternion alloc] init] autorelease]; if ((matrix.data->m11 + matrix.data->m22 + matrix.data->m33) > 0.0F) { float M1 = sqrtf(matrix.data->m11 + matrix.data->m22 + matrix.data->m33 + 1); @@ -184,6 +184,11 @@ return self; } +- (Quaternion*) set:(Quaternion *)value { + data = *value.data; + return self; +} + - (Quaternion *) add:(Quaternion *)value { Vector4Add(self.data, value.data, self.data); return self; diff --git a/Classes/Retronator/Xni/Framework/Vector3.h b/Classes/Retronator/Xni/Framework/Vector3.h index 991008d..d991529 100644 --- a/Classes/Retronator/Xni/Framework/Vector3.h +++ b/Classes/Retronator/Xni/Framework/Vector3.h @@ -46,6 +46,7 @@ - (Vector3*) normalize; - (Vector3*) negate; +- (Vector3*) set:(Vector3*)value; - (Vector3*) add:(Vector3*)value; - (Vector3*) subtract:(Vector3*)value; - (Vector3*) multiplyBy:(float)scaleFactor; diff --git a/Classes/Retronator/Xni/Framework/Vector3.m b/Classes/Retronator/Xni/Framework/Vector3.m index 3f95644..778aad2 100644 --- a/Classes/Retronator/Xni/Framework/Vector3.m +++ b/Classes/Retronator/Xni/Framework/Vector3.m @@ -123,11 +123,17 @@ Vector3Normalize(&data); return self; } + - (Vector3*) negate { Vector3Negate(&data); return self; } +- (Vector3*) set:(Vector3 *)value { + data = *value.data; + return self; +} + - (Vector3*) add:(Vector3*)value { Vector3Add(self.data, value.data, self.data); return self; diff --git a/Classes/System/Collection.h b/Classes/System/Collection.h new file mode 100644 index 0000000..231401e --- /dev/null +++ b/Classes/System/Collection.h @@ -0,0 +1,38 @@ +// +// Collection.h +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +// #define Collection CollectionName +// #define T DataType + +@interface Collection : NSObject { + NSMutableArray *collection; +#ifdef Variables + Variables +#endif +} + +@property (nonatomic, readonly) int count; + +- (T)itemAt:(int)index; +- (void)setItem:(T)item at:(int)index; + +- (void)add:(T)item; +- (void)addRange:(NSArray*)items; +- (void)insert:(T)item at:(int)index; + +- (void)remove:(T)item; +- (void)removeAt:(int)index; + +- (void) clear; + +@end + +// #undef Collection +// #undef T diff --git a/Classes/System/Collection.m.h b/Classes/System/Collection.m.h new file mode 100644 index 0000000..478b7a8 --- /dev/null +++ b/Classes/System/Collection.m.h @@ -0,0 +1,72 @@ +// +// Collection.m.h +// XNI +// +// Created by Matej Jan on 26.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +// #define Collection CollectionName +// #define T DataType + +@implementation Collection + +- (id) init +{ + self = [super init]; + if (self != nil) { + collection = [[NSMutableArray alloc] init]; + } + return self; +} + +- (int) count { + return [collection count]; +} + +- (T)itemAt:(int)index { + return [collection objectAtIndex:index]; +} + +- (void)setItem:(T)item at:(int)index { + return [collection replaceObjectAtIndex:index withObject:item]; +} + +- (void)add:(T)item { + [collection addObject:item]; +} + +- (void)addRange:(NSArray*)items { + [collection addObjectsFromArray:items]; +} + +- (void)insert:(T)item at:(int)index { + [collection insertObject:item atIndex:index]; +} + +- (void)remove:(T)item { + [collection removeObject:item]; +} + +- (void)removeAt:(int)index { + [collection removeObjectAtIndex:index]; +} + +- (void) clear { + [collection removeAllObjects]; +} + +- (NSUInteger) countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len { + return [collection countByEnumeratingWithState:state objects:stackbuf count:len]; +} + +- (void) dealloc +{ + [collection dealloc]; + [super dealloc]; +} + +@end + +// #undef Collection +// #undef T \ No newline at end of file diff --git a/Classes/System/ReadOnlyCollection.h b/Classes/System/ReadOnlyCollection.h new file mode 100644 index 0000000..82a6ec4 --- /dev/null +++ b/Classes/System/ReadOnlyCollection.h @@ -0,0 +1,30 @@ +// +// ReadOnlyCollection.h +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +// #define ReadOnlyCollection ReadOnlyCollectionName +// #define T DataType + +@interface ReadOnlyCollection : NSObject { + NSArray *collection; +#ifdef Variables + Variables +#endif +} + +- (id) initWithItems:(NSArray*)items; + +@property (nonatomic, readonly) int count; + +- (T)itemAt:(int)index; + +@end + +// #undef ReadOnlyCollection +// #undef T \ No newline at end of file diff --git a/Classes/System/ReadOnlyCollection.m.h b/Classes/System/ReadOnlyCollection.m.h new file mode 100644 index 0000000..0f0ec43 --- /dev/null +++ b/Classes/System/ReadOnlyCollection.m.h @@ -0,0 +1,47 @@ +// +// ReadOnlyCollection.m +// XNI +// +// Created by Matej Jan on 29.11.10. +// Copyright 2010 Retronator. All rights reserved. +// + +// #define ReadOnlyCollection ReadOnlyCollectionName +// #define T DataType + +@implementation ReadOnlyCollection + +- (id) initWithItems:(NSArray*)items +{ + self = [super init]; + if (self != nil) { + collection = [[NSMutableArray alloc] initWithArray:items]; +#ifdef Initialization + Initialization +#endif + } + return self; +} + +- (int) count { + return [collection count]; +} + +- (T)itemAt:(int)index { + return [collection objectAtIndex:index]; +} + +- (NSUInteger) countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len { + return [collection countByEnumeratingWithState:state objects:stackbuf count:len]; +} + +- (void) dealloc +{ + [collection dealloc]; + [super dealloc]; +} + +@end + +// #undef ReadOnlyCollection +// #undef T \ No newline at end of file diff --git a/Classes/System/System.classes.h b/Classes/System/System.classes.h index ffa9bad..befc73d 100644 --- a/Classes/System/System.classes.h +++ b/Classes/System/System.classes.h @@ -5,5 +5,4 @@ // Events @class Delegate, Event, EventArgs; -// Arrays -@class AdaptiveArray; \ No newline at end of file +// Arrays \ No newline at end of file diff --git a/Classes/System/System.h b/Classes/System/System.h index e0cb4d4..57c0064 100644 --- a/Classes/System/System.h +++ b/Classes/System/System.h @@ -7,5 +7,4 @@ #import "Event.h" #import "EventArgs.h" -// Arrays -#import "AdaptiveArray.h" \ No newline at end of file +// Arrays \ No newline at end of file diff --git a/Classes/System/AdaptiveArray.h b/Classes/System/XniAdaptiveArray.h similarity index 88% rename from Classes/System/AdaptiveArray.h rename to Classes/System/XniAdaptiveArray.h index 89b874c..339080c 100644 --- a/Classes/System/AdaptiveArray.h +++ b/Classes/System/XniAdaptiveArray.h @@ -1,5 +1,5 @@ // -// AdaptiveArray.h +// XniAdaptiveArray.h // XNI // // Created by Matej Jan on 21.9.10. @@ -9,7 +9,7 @@ #import -@interface AdaptiveArray : NSObject { +@interface XniAdaptiveArray : NSObject { int capacity; int itemSize; void *array; diff --git a/Classes/System/AdaptiveArray.m b/Classes/System/XniAdaptiveArray.m similarity index 90% rename from Classes/System/AdaptiveArray.m rename to Classes/System/XniAdaptiveArray.m index 0362f8a..91e4320 100644 --- a/Classes/System/AdaptiveArray.m +++ b/Classes/System/XniAdaptiveArray.m @@ -1,14 +1,14 @@ // -// AdaptiveArray.m +// XniAdaptiveArray.m // XNI // // Created by Matej Jan on 21.9.10. // Copyright 2010 Retronator. All rights reserved. // -#import "AdaptiveArray.h" +#import "XniAdaptiveArray.h" -@implementation AdaptiveArray +@implementation XniAdaptiveArray - (id) initWithItemSize:(int)theItemSize initialCapacity:(int)theCapacity { if (self = [super init]) { diff --git a/XNI.xcodeproj/project.pbxproj b/XNI.xcodeproj/project.pbxproj index 38a63bf..a41c3a5 100644 --- a/XNI.xcodeproj/project.pbxproj +++ b/XNI.xcodeproj/project.pbxproj @@ -21,6 +21,61 @@ B52BACFB125527E200B308F6 /* TouchPanel+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B52BACF9125527E200B308F6 /* TouchPanel+Internal.h */; }; B52BADAD1255426600B308F6 /* FrameworkEnums.h in Headers */ = {isa = PBXBuildFile; fileRef = B52BADAC1255426600B308F6 /* FrameworkEnums.h */; settings = {ATTRIBUTES = (Public, ); }; }; B53649F2127DE08100CAE30C /* GameWindow+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B53649F1127DE08100CAE30C /* GameWindow+Internal.h */; }; + B54543DD129B4705002A28BE /* BasicEffectReader.h in Headers */ = {isa = PBXBuildFile; fileRef = B54543DB129B4705002A28BE /* BasicEffectReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B54543DE129B4705002A28BE /* BasicEffectReader.m in Sources */ = {isa = PBXBuildFile; fileRef = B54543DC129B4705002A28BE /* BasicEffectReader.m */; }; + B54543E1129B4716002A28BE /* IndexBufferReader.h in Headers */ = {isa = PBXBuildFile; fileRef = B54543DF129B4716002A28BE /* IndexBufferReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B54543E2129B4716002A28BE /* IndexBufferReader.m in Sources */ = {isa = PBXBuildFile; fileRef = B54543E0129B4716002A28BE /* IndexBufferReader.m */; }; + B54543E5129B4727002A28BE /* VertexBufferReader.h in Headers */ = {isa = PBXBuildFile; fileRef = B54543E3129B4727002A28BE /* VertexBufferReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B54543E6129B4727002A28BE /* VertexBufferReader.m in Sources */ = {isa = PBXBuildFile; fileRef = B54543E4129B4727002A28BE /* VertexBufferReader.m */; }; + B54543E9129B473A002A28BE /* ModelMeshPartReader.h in Headers */ = {isa = PBXBuildFile; fileRef = B54543E7129B473A002A28BE /* ModelMeshPartReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B54543EA129B473A002A28BE /* ModelMeshPartReader.m in Sources */ = {isa = PBXBuildFile; fileRef = B54543E8129B473A002A28BE /* ModelMeshPartReader.m */; }; + B54543F7129B47A1002A28BE /* ModelMeshReader.h in Headers */ = {isa = PBXBuildFile; fileRef = B54543F5129B47A1002A28BE /* ModelMeshReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B54543F8129B47A1002A28BE /* ModelMeshReader.m in Sources */ = {isa = PBXBuildFile; fileRef = B54543F6129B47A1002A28BE /* ModelMeshReader.m */; }; + B5454402129B4F4D002A28BE /* ContentManager+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B5454401129B4F4D002A28BE /* ContentManager+Internal.h */; }; + B54F9BC112A2CA1B00F7411F /* XImporterReader.h in Headers */ = {isa = PBXBuildFile; fileRef = B54F9BBF12A2CA1B00F7411F /* XImporterReader.h */; }; + B54F9BC212A2CA1B00F7411F /* XImporterReader.m in Sources */ = {isa = PBXBuildFile; fileRef = B54F9BC012A2CA1B00F7411F /* XImporterReader.m */; }; + B554F7B912A3B19100F20A0D /* TextureReferenceDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = B554F7B712A3B19100F20A0D /* TextureReferenceDictionary.h */; }; + B554F7BA12A3B19100F20A0D /* TextureReferenceDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = B554F7B812A3B19100F20A0D /* TextureReferenceDictionary.m */; }; + B554F7C112A3B48600F20A0D /* ExternalReference.h in Headers */ = {isa = PBXBuildFile; fileRef = B554F7BF12A3B48600F20A0D /* ExternalReference.h */; }; + B554F7C212A3B48600F20A0D /* ExternalReference.m in Sources */ = {isa = PBXBuildFile; fileRef = B554F7C012A3B48600F20A0D /* ExternalReference.m */; }; + B554F7D312A3BD1B00F20A0D /* NamedValueDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = B554F7D112A3BD1B00F20A0D /* NamedValueDictionary.h */; }; + B554F7EA12A3C1B100F20A0D /* NamedValueDictionary.m.h in Headers */ = {isa = PBXBuildFile; fileRef = B554F7D212A3BD1B00F20A0D /* NamedValueDictionary.m.h */; }; + B554F7F312A3C23300F20A0D /* OpaqueDataDictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = B554F7F112A3C23300F20A0D /* OpaqueDataDictionary.h */; }; + B554F7F412A3C23300F20A0D /* OpaqueDataDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = B554F7F212A3C23300F20A0D /* OpaqueDataDictionary.m */; }; + B554F8D012A3F3E400F20A0D /* ModelBone.h in Headers */ = {isa = PBXBuildFile; fileRef = B554F8CE12A3F3E400F20A0D /* ModelBone.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B554F8D112A3F3E400F20A0D /* ModelBone.m in Sources */ = {isa = PBXBuildFile; fileRef = B554F8CF12A3F3E400F20A0D /* ModelBone.m */; }; + B554F8DF12A3F3FD00F20A0D /* ModelBoneCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = B554F8DD12A3F3FD00F20A0D /* ModelBoneCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B554F8E012A3F3FD00F20A0D /* ModelBoneCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = B554F8DE12A3F3FD00F20A0D /* ModelBoneCollection.m */; }; + B554F8F312A3F6AB00F20A0D /* ReadOnlyCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = B554F8F112A3F6AB00F20A0D /* ReadOnlyCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B554F8F512A3F6BE00F20A0D /* ReadOnlyCollection.m.h in Headers */ = {isa = PBXBuildFile; fileRef = B554F8F212A3F6AB00F20A0D /* ReadOnlyCollection.m.h */; }; + B554F94D12A4033600F20A0D /* ModelBoneContent.h in Headers */ = {isa = PBXBuildFile; fileRef = B554F94B12A4033600F20A0D /* ModelBoneContent.h */; }; + B554F94E12A4033600F20A0D /* ModelBoneContent.m in Sources */ = {isa = PBXBuildFile; fileRef = B554F94C12A4033600F20A0D /* ModelBoneContent.m */; }; + B554F95112A4034100F20A0D /* ModelBoneContentCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = B554F94F12A4034100F20A0D /* ModelBoneContentCollection.h */; }; + B554F95212A4034100F20A0D /* ModelBoneContentCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = B554F95012A4034100F20A0D /* ModelBoneContentCollection.m */; }; + B554F99812A415AD00F20A0D /* ModelBoneContent+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B554F99712A415AD00F20A0D /* ModelBoneContent+Internal.h */; }; + B554F9B512A427DD00F20A0D /* ModelBoneReader.h in Headers */ = {isa = PBXBuildFile; fileRef = B554F9B312A427DD00F20A0D /* ModelBoneReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B554F9B612A427DD00F20A0D /* ModelBoneReader.m in Sources */ = {isa = PBXBuildFile; fileRef = B554F9B412A427DD00F20A0D /* ModelBoneReader.m */; }; + B554F9D012A42DC600F20A0D /* IndexBuffer+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B554F9CF12A42DC600F20A0D /* IndexBuffer+Internal.h */; }; + B554F9DE12A42FD000F20A0D /* GraphicsDevice+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B554F9DD12A42FD000F20A0D /* GraphicsDevice+Internal.h */; }; + B554F9EF12A433B500F20A0D /* VertexBuffer+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B554F9EE12A433B500F20A0D /* VertexBuffer+Internal.h */; }; + B554FA0D12A4362B00F20A0D /* VertexDeclarationReader.h in Headers */ = {isa = PBXBuildFile; fileRef = B554FA0B12A4362B00F20A0D /* VertexDeclarationReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B554FA0E12A4362B00F20A0D /* VertexDeclarationReader.m in Sources */ = {isa = PBXBuildFile; fileRef = B554FA0C12A4362B00F20A0D /* VertexDeclarationReader.m */; }; + B554FA2212A43A3A00F20A0D /* ModelBone+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B554FA2012A43A3A00F20A0D /* ModelBone+Internal.h */; }; + B554FC9A12A45A9D00F20A0D /* VertexPositionNormalTextureArray.h in Headers */ = {isa = PBXBuildFile; fileRef = B554FC9812A45A9D00F20A0D /* VertexPositionNormalTextureArray.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B554FC9B12A45A9D00F20A0D /* VertexPositionNormalTextureArray.m in Sources */ = {isa = PBXBuildFile; fileRef = B554FC9912A45A9D00F20A0D /* VertexPositionNormalTextureArray.m */; }; + B554FC9E12A45B3300F20A0D /* VertexPositionNormalTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = B554FC9C12A45B3300F20A0D /* VertexPositionNormalTexture.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B554FC9F12A45B3300F20A0D /* VertexPositionNormalTexture.m in Sources */ = {isa = PBXBuildFile; fileRef = B554FC9D12A45B3300F20A0D /* VertexPositionNormalTexture.m */; }; + B5672C6C129AFDCE00DE5AAC /* ModelMeshCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = B5672C6A129AFDCE00DE5AAC /* ModelMeshCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5672C6D129AFDCE00DE5AAC /* ModelMeshCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = B5672C6B129AFDCE00DE5AAC /* ModelMeshCollection.m */; }; + B5672C7A129AFE8500DE5AAC /* ModelMeshPartCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = B5672C78129AFE8500DE5AAC /* ModelMeshPartCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5672C7B129AFE8500DE5AAC /* ModelMeshPartCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = B5672C79129AFE8500DE5AAC /* ModelMeshPartCollection.m */; }; + B5672CC2129B02D100DE5AAC /* ModelEffectCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = B5672CC0129B02D100DE5AAC /* ModelEffectCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5672CC3129B02D100DE5AAC /* ModelEffectCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = B5672CC1129B02D100DE5AAC /* ModelEffectCollection.m */; }; + B5672CD8129B0CAC00DE5AAC /* Model+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B5672CD7129B0CAC00DE5AAC /* Model+Internal.h */; }; + B5672CDA129B0CB700DE5AAC /* ModelMesh+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B5672CD9129B0CB700DE5AAC /* ModelMesh+Internal.h */; }; + B5672CDC129B0CC300DE5AAC /* ModelMeshPart+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B5672CDB129B0CC300DE5AAC /* ModelMeshPart+Internal.h */; }; + B5672D1A129B174100DE5AAC /* ModelReader.h in Headers */ = {isa = PBXBuildFile; fileRef = B5672D18129B174100DE5AAC /* ModelReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5672D1B129B174100DE5AAC /* ModelReader.m in Sources */ = {isa = PBXBuildFile; fileRef = B5672D19129B174100DE5AAC /* ModelReader.m */; }; B56CC50D123A6F3600B72347 /* MipmapChain.h in Headers */ = {isa = PBXBuildFile; fileRef = B56CC50B123A6F3600B72347 /* MipmapChain.h */; settings = {ATTRIBUTES = (Public, ); }; }; B56CC50E123A6F3600B72347 /* MipmapChain.m in Sources */ = {isa = PBXBuildFile; fileRef = B56CC50C123A6F3600B72347 /* MipmapChain.m */; }; B56CC511123A739100B72347 /* MipmapChainCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = B56CC50F123A739100B72347 /* MipmapChainCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -34,8 +89,8 @@ B56CC5C4123A927500B72347 /* ContentTypeReader.m in Sources */ = {isa = PBXBuildFile; fileRef = B56CC5C2123A927500B72347 /* ContentTypeReader.m */; }; B56CC5C7123A928A00B72347 /* ContentTypeReaderManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B56CC5C5123A928A00B72347 /* ContentTypeReaderManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; B56CC5C8123A928A00B72347 /* ContentTypeReaderManager.m in Sources */ = {isa = PBXBuildFile; fileRef = B56CC5C6123A928A00B72347 /* ContentTypeReaderManager.m */; }; - B56CC5CB123A92BB00B72347 /* Texture2DContentTypeReader.h in Headers */ = {isa = PBXBuildFile; fileRef = B56CC5C9123A92BB00B72347 /* Texture2DContentTypeReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B56CC5CC123A92BB00B72347 /* Texture2DContentTypeReader.m in Sources */ = {isa = PBXBuildFile; fileRef = B56CC5CA123A92BB00B72347 /* Texture2DContentTypeReader.m */; }; + B56CC5CB123A92BB00B72347 /* Texture2DReader.h in Headers */ = {isa = PBXBuildFile; fileRef = B56CC5C9123A92BB00B72347 /* Texture2DReader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B56CC5CC123A92BB00B72347 /* Texture2DReader.m in Sources */ = {isa = PBXBuildFile; fileRef = B56CC5CA123A92BB00B72347 /* Texture2DReader.m */; }; B57E3665124BC23E00DDAA42 /* Viewport.h in Headers */ = {isa = PBXBuildFile; fileRef = B57E3663124BC23E00DDAA42 /* Viewport.h */; settings = {ATTRIBUTES = (Public, ); }; }; B57E3666124BC23E00DDAA42 /* Viewport.m in Sources */ = {isa = PBXBuildFile; fileRef = B57E3664124BC23E00DDAA42 /* Viewport.m */; }; B57E36BE124BE2DD00DDAA42 /* VertexPositionColorTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = B57E36BC124BE2DD00DDAA42 /* VertexPositionColorTexture.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -143,11 +198,53 @@ B5E78B6F12429B1A00DDD99A /* SamplerState.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E78B6D12429B1A00DDD99A /* SamplerState.m */; }; B5E78B7A12429BBD00DDD99A /* Effect.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E78B7812429BBD00DDD99A /* Effect.h */; settings = {ATTRIBUTES = (Public, ); }; }; B5E78B7B12429BBD00DDD99A /* Effect.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E78B7912429BBD00DDD99A /* Effect.m */; }; + B5E7EC54129AE1A00015B663 /* NodeContent.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7EC52129AE1A00015B663 /* NodeContent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7EC55129AE1A00015B663 /* NodeContent.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7EC53129AE1A00015B663 /* NodeContent.m */; }; + B5E7EC5B129AE1BF0015B663 /* MeshContent.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7EC59129AE1BF0015B663 /* MeshContent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7EC5C129AE1BF0015B663 /* MeshContent.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7EC5A129AE1BF0015B663 /* MeshContent.m */; }; + B5E7EC5F129AE1CD0015B663 /* GeometryContent.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7EC5D129AE1CD0015B663 /* GeometryContent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7EC60129AE1CD0015B663 /* GeometryContent.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7EC5E129AE1CD0015B663 /* GeometryContent.m */; }; + B5E7EC67129AE2340015B663 /* VertexContent.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7EC65129AE2340015B663 /* VertexContent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7EC68129AE2340015B663 /* VertexContent.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7EC66129AE2340015B663 /* VertexContent.m */; }; + B5E7EC6B129AE2410015B663 /* IndexCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7EC69129AE2410015B663 /* IndexCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7EC6C129AE2410015B663 /* IndexCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7EC6A129AE2410015B663 /* IndexCollection.m */; }; + B5E7EC6F129AE2530015B663 /* MaterialContent.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7EC6D129AE2530015B663 /* MaterialContent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7EC70129AE2530015B663 /* MaterialContent.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7EC6E129AE2530015B663 /* MaterialContent.m */; }; + B5E7EC73129AE2860015B663 /* BasicMaterialContent.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7EC71129AE2860015B663 /* BasicMaterialContent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7EC74129AE2860015B663 /* BasicMaterialContent.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7EC72129AE2860015B663 /* BasicMaterialContent.m */; }; + B5E7EC77129AE2E10015B663 /* ModelContent.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7EC75129AE2E10015B663 /* ModelContent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7EC78129AE2E10015B663 /* ModelContent.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7EC76129AE2E10015B663 /* ModelContent.m */; }; + B5E7EC7B129AE2ED0015B663 /* ModelMeshContent.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7EC79129AE2ED0015B663 /* ModelMeshContent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7EC7C129AE2ED0015B663 /* ModelMeshContent.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7EC7A129AE2ED0015B663 /* ModelMeshContent.m */; }; + B5E7EC7F129AE2FD0015B663 /* ModelMeshPartContent.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7EC7D129AE2FD0015B663 /* ModelMeshPartContent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7EC80129AE2FD0015B663 /* ModelMeshPartContent.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7EC7E129AE2FD0015B663 /* ModelMeshPartContent.m */; }; + B5E7EC83129AE30C0015B663 /* VertexBufferContent.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7EC81129AE30C0015B663 /* VertexBufferContent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7EC84129AE30C0015B663 /* VertexBufferContent.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7EC82129AE30C0015B663 /* VertexBufferContent.m */; }; + B5E7EC87129AE3570015B663 /* Model.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7EC85129AE3570015B663 /* Model.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7EC88129AE3570015B663 /* Model.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7EC86129AE3570015B663 /* Model.m */; }; + B5E7EC8B129AE3640015B663 /* ModelMesh.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7EC89129AE3640015B663 /* ModelMesh.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7EC8C129AE3640015B663 /* ModelMesh.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7EC8A129AE3640015B663 /* ModelMesh.m */; }; + B5E7EC8F129AE36E0015B663 /* ModelMeshPart.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7EC8D129AE36E0015B663 /* ModelMeshPart.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7EC90129AE36E0015B663 /* ModelMeshPart.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7EC8E129AE36E0015B663 /* ModelMeshPart.m */; }; + B5E7ECAE129AE5B40015B663 /* TextureProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7ECAC129AE5B40015B663 /* TextureProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7ECAF129AE5B40015B663 /* TextureProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7ECAD129AE5B40015B663 /* TextureProcessor.m */; }; + B5E7ECB2129AE5C50015B663 /* ModelProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7ECB0129AE5C50015B663 /* ModelProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7ECB3129AE5C50015B663 /* ModelProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7ECB1129AE5C50015B663 /* ModelProcessor.m */; }; + B5E7ECB6129AE5D40015B663 /* MaterialProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7ECB4129AE5D40015B663 /* MaterialProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7ECB7129AE5D40015B663 /* MaterialProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7ECB5129AE5D40015B663 /* MaterialProcessor.m */; }; + B5E7ECBA129AE6120015B663 /* XImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7ECB8129AE6120015B663 /* XImporter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7ECBB129AE6120015B663 /* XImporter.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7ECB9129AE6120015B663 /* XImporter.m */; }; + B5E7ECBD129AE6560015B663 /* Retronator.Xni.Framework.Content.Pipeline.Processors.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7ECBC129AE6560015B663 /* Retronator.Xni.Framework.Content.Pipeline.Processors.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7ECBF129AE6620015B663 /* Retronator.Xni.Framework.Content.Pipeline.Processors.classes.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7ECBE129AE6620015B663 /* Retronator.Xni.Framework.Content.Pipeline.Processors.classes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7ECD4129AE6A70015B663 /* ContentProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7ECD2129AE6A70015B663 /* ContentProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7ECD5129AE6A70015B663 /* ContentProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E7ECD3129AE6A70015B663 /* ContentProcessor.m */; }; + B5E7ECD7129AE6CA0015B663 /* IContentProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7ECD6129AE6CA0015B663 /* IContentProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5E7ECD9129AE6D20015B663 /* IContentImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E7ECD8129AE6D20015B663 /* IContentImporter.h */; settings = {ATTRIBUTES = (Public, ); }; }; B5EA634F12491709001245A4 /* VertexStructs.h in Headers */ = {isa = PBXBuildFile; fileRef = B5EA634E12491709001245A4 /* VertexStructs.h */; settings = {ATTRIBUTES = (Public, ); }; }; B5EA636F124917E2001245A4 /* VertexPositionColor.h in Headers */ = {isa = PBXBuildFile; fileRef = B5EA636D124917E2001245A4 /* VertexPositionColor.h */; settings = {ATTRIBUTES = (Public, ); }; }; B5EA6370124917E2001245A4 /* VertexPositionColor.m in Sources */ = {isa = PBXBuildFile; fileRef = B5EA636E124917E2001245A4 /* VertexPositionColor.m */; }; - B5EA637E124921D0001245A4 /* AdaptiveArray.h in Headers */ = {isa = PBXBuildFile; fileRef = B5EA637C124921D0001245A4 /* AdaptiveArray.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B5EA637F124921D0001245A4 /* AdaptiveArray.m in Sources */ = {isa = PBXBuildFile; fileRef = B5EA637D124921D0001245A4 /* AdaptiveArray.m */; }; + B5EA637E124921D0001245A4 /* XniAdaptiveArray.h in Headers */ = {isa = PBXBuildFile; fileRef = B5EA637C124921D0001245A4 /* XniAdaptiveArray.h */; settings = {ATTRIBUTES = (); }; }; + B5EA637F124921D0001245A4 /* XniAdaptiveArray.m in Sources */ = {isa = PBXBuildFile; fileRef = B5EA637D124921D0001245A4 /* XniAdaptiveArray.m */; }; B5EA638F1249229D001245A4 /* VertexArray.h in Headers */ = {isa = PBXBuildFile; fileRef = B5EA638D1249229D001245A4 /* VertexArray.h */; settings = {ATTRIBUTES = (Public, ); }; }; B5EA63901249229D001245A4 /* VertexArray.m in Sources */ = {isa = PBXBuildFile; fileRef = B5EA638E1249229D001245A4 /* VertexArray.m */; }; B5EA65531249482D001245A4 /* VertexPositionTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = B5EA65511249482D001245A4 /* VertexPositionTexture.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -176,6 +273,13 @@ B5EC5A4F1252C2DF001E7DFC /* GestureSample.h in Headers */ = {isa = PBXBuildFile; fileRef = B5EC5A4D1252C2DF001E7DFC /* GestureSample.h */; settings = {ATTRIBUTES = (Public, ); }; }; B5EC5A501252C2DF001E7DFC /* GestureSample.m in Sources */ = {isa = PBXBuildFile; fileRef = B5EC5A4E1252C2DF001E7DFC /* GestureSample.m */; }; B5EC5A931252C710001E7DFC /* Retronator.Xni.Framework.Input.h in Headers */ = {isa = PBXBuildFile; fileRef = B5EC5A921252C710001E7DFC /* Retronator.Xni.Framework.Input.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5EFD744129B2A7800FDC150 /* ModelMeshContentCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = B5EFD742129B2A7800FDC150 /* ModelMeshContentCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5EFD745129B2A7800FDC150 /* ModelMeshContentCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = B5EFD743129B2A7800FDC150 /* ModelMeshContentCollection.m */; }; + B5EFD748129B2A8900FDC150 /* ModelMeshPartContentCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = B5EFD746129B2A8900FDC150 /* ModelMeshPartContentCollection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5EFD749129B2A8900FDC150 /* ModelMeshPartContentCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = B5EFD747129B2A8900FDC150 /* ModelMeshPartContentCollection.m */; }; + B5EFD764129B2B8100FDC150 /* ModelMeshContent+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B5EFD763129B2B8100FDC150 /* ModelMeshContent+Internal.h */; }; + B5EFD766129B2B8B00FDC150 /* ModelContent+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B5EFD765129B2B8B00FDC150 /* ModelContent+Internal.h */; }; + B5EFD768129B2B9700FDC150 /* ModelMeshPartContent+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B5EFD767129B2B9700FDC150 /* ModelMeshPartContent+Internal.h */; }; B5F415B3127780840012BAF1 /* TextureCollection+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B5F415B1127780840012BAF1 /* TextureCollection+Internal.h */; }; B5F415CF127781340012BAF1 /* SamplerStateCollection+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = B5F415CD127781340012BAF1 /* SamplerStateCollection+Internal.h */; }; B5F415DE127781D80012BAF1 /* XniSamplerEventArgs.h in Headers */ = {isa = PBXBuildFile; fileRef = B5F415DC127781D80012BAF1 /* XniSamplerEventArgs.h */; }; @@ -200,6 +304,30 @@ B5F853CE1239357400E6FD71 /* Quaternion.m in Sources */ = {isa = PBXBuildFile; fileRef = B5F853CC1239357400E6FD71 /* Quaternion.m */; }; B5F8546D1239484700E6FD71 /* ColorPixelBitmapContent.h in Headers */ = {isa = PBXBuildFile; fileRef = B5F8546B1239484700E6FD71 /* ColorPixelBitmapContent.h */; settings = {ATTRIBUTES = (Public, ); }; }; B5F8546E1239484700E6FD71 /* ColorPixelBitmapContent.m in Sources */ = {isa = PBXBuildFile; fileRef = B5F8546C1239484700E6FD71 /* ColorPixelBitmapContent.m */; }; + B5FB745712A4ED6E00DB9234 /* IndexArray.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FB745512A4ED6E00DB9234 /* IndexArray.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5FB745812A4ED6E00DB9234 /* IndexArray.m in Sources */ = {isa = PBXBuildFile; fileRef = B5FB745612A4ED6E00DB9234 /* IndexArray.m */; }; + B5FB745B12A4F01400DB9234 /* ShortIndexArray.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FB745912A4F01400DB9234 /* ShortIndexArray.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5FB745C12A4F01400DB9234 /* ShortIndexArray.m in Sources */ = {isa = PBXBuildFile; fileRef = B5FB745A12A4F01400DB9234 /* ShortIndexArray.m */; }; + B5FE12A4129FDDF70081F7A7 /* NodeContentCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FE12A2129FDDF70081F7A7 /* NodeContentCollection.h */; }; + B5FE12A5129FDDF70081F7A7 /* NodeContentCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = B5FE12A3129FDDF70081F7A7 /* NodeContentCollection.m */; }; + B5FE12B0129FE1730081F7A7 /* ChildCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FE12AE129FE1730081F7A7 /* ChildCollection.h */; }; + B5FE12B1129FE1730081F7A7 /* ChildCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = B5FE12AF129FE1730081F7A7 /* ChildCollection.m */; }; + B5FE12F2129FE8220081F7A7 /* GeometryContentCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FE12F0129FE8220081F7A7 /* GeometryContentCollection.h */; }; + B5FE12F3129FE8220081F7A7 /* GeometryContentCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = B5FE12F1129FE8220081F7A7 /* GeometryContentCollection.m */; }; + B5FE12F6129FE8310081F7A7 /* PositionCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FE12F4129FE8310081F7A7 /* PositionCollection.h */; }; + B5FE12F7129FE8310081F7A7 /* PositionCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = B5FE12F5129FE8310081F7A7 /* PositionCollection.m */; }; + B5FE1330129FEC9A0081F7A7 /* Collection.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FE132E129FEC9A0081F7A7 /* Collection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5FE13CA12A00AC60081F7A7 /* VertexChannelCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FE13C812A00AC60081F7A7 /* VertexChannelCollection.h */; }; + B5FE13CB12A00AC60081F7A7 /* VertexChannelCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = B5FE13C912A00AC60081F7A7 /* VertexChannelCollection.m */; }; + B5FE13D512A00BE50081F7A7 /* VertexChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FE13D312A00BE50081F7A7 /* VertexChannel.h */; }; + B5FE13D612A00BE50081F7A7 /* VertexChannel.m in Sources */ = {isa = PBXBuildFile; fileRef = B5FE13D412A00BE50081F7A7 /* VertexChannel.m */; }; + B5FE13DB12A00C6B0081F7A7 /* IndirectPositionCollection.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FE13D912A00C6B0081F7A7 /* IndirectPositionCollection.h */; }; + B5FE13DC12A00C6B0081F7A7 /* IndirectPositionCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = B5FE13DA12A00C6B0081F7A7 /* IndirectPositionCollection.m */; }; + B5FE13EC12A00D580081F7A7 /* Collection.m.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FE13EB12A00D580081F7A7 /* Collection.m.h */; }; + B5FE146712A01BB50081F7A7 /* VertexChannelNames.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FE146512A01BB50081F7A7 /* VertexChannelNames.h */; }; + B5FE146812A01BB50081F7A7 /* VertexChannelNames.m in Sources */ = {isa = PBXBuildFile; fileRef = B5FE146612A01BB50081F7A7 /* VertexChannelNames.m */; }; + B5FE14BE12A02DCD0081F7A7 /* VertexDeclarationContent.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FE14BC12A02DCD0081F7A7 /* VertexDeclarationContent.h */; }; + B5FE14BF12A02DCD0081F7A7 /* VertexDeclarationContent.m in Sources */ = {isa = PBXBuildFile; fileRef = B5FE14BD12A02DCD0081F7A7 /* VertexDeclarationContent.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -227,6 +355,61 @@ B52BACF9125527E200B308F6 /* TouchPanel+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "TouchPanel+Internal.h"; sourceTree = ""; }; B52BADAC1255426600B308F6 /* FrameworkEnums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FrameworkEnums.h; sourceTree = ""; }; B53649F1127DE08100CAE30C /* GameWindow+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GameWindow+Internal.h"; sourceTree = ""; }; + B54543DB129B4705002A28BE /* BasicEffectReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BasicEffectReader.h; sourceTree = ""; }; + B54543DC129B4705002A28BE /* BasicEffectReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BasicEffectReader.m; sourceTree = ""; }; + B54543DF129B4716002A28BE /* IndexBufferReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexBufferReader.h; sourceTree = ""; }; + B54543E0129B4716002A28BE /* IndexBufferReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IndexBufferReader.m; sourceTree = ""; }; + B54543E3129B4727002A28BE /* VertexBufferReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexBufferReader.h; sourceTree = ""; }; + B54543E4129B4727002A28BE /* VertexBufferReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VertexBufferReader.m; sourceTree = ""; }; + B54543E7129B473A002A28BE /* ModelMeshPartReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelMeshPartReader.h; sourceTree = ""; }; + B54543E8129B473A002A28BE /* ModelMeshPartReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelMeshPartReader.m; sourceTree = ""; }; + B54543F5129B47A1002A28BE /* ModelMeshReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelMeshReader.h; sourceTree = ""; }; + B54543F6129B47A1002A28BE /* ModelMeshReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelMeshReader.m; sourceTree = ""; }; + B5454401129B4F4D002A28BE /* ContentManager+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ContentManager+Internal.h"; sourceTree = ""; }; + B54F9BBF12A2CA1B00F7411F /* XImporterReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XImporterReader.h; sourceTree = ""; }; + B54F9BC012A2CA1B00F7411F /* XImporterReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XImporterReader.m; sourceTree = ""; }; + B554F7B712A3B19100F20A0D /* TextureReferenceDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureReferenceDictionary.h; sourceTree = ""; }; + B554F7B812A3B19100F20A0D /* TextureReferenceDictionary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TextureReferenceDictionary.m; sourceTree = ""; }; + B554F7BF12A3B48600F20A0D /* ExternalReference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExternalReference.h; sourceTree = ""; }; + B554F7C012A3B48600F20A0D /* ExternalReference.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ExternalReference.m; sourceTree = ""; }; + B554F7D112A3BD1B00F20A0D /* NamedValueDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NamedValueDictionary.h; sourceTree = ""; }; + B554F7D212A3BD1B00F20A0D /* NamedValueDictionary.m.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NamedValueDictionary.m.h; sourceTree = ""; }; + B554F7F112A3C23300F20A0D /* OpaqueDataDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpaqueDataDictionary.h; sourceTree = ""; }; + B554F7F212A3C23300F20A0D /* OpaqueDataDictionary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OpaqueDataDictionary.m; sourceTree = ""; }; + B554F8CE12A3F3E400F20A0D /* ModelBone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelBone.h; sourceTree = ""; }; + B554F8CF12A3F3E400F20A0D /* ModelBone.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelBone.m; sourceTree = ""; }; + B554F8DD12A3F3FD00F20A0D /* ModelBoneCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelBoneCollection.h; sourceTree = ""; }; + B554F8DE12A3F3FD00F20A0D /* ModelBoneCollection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelBoneCollection.m; sourceTree = ""; }; + B554F8F112A3F6AB00F20A0D /* ReadOnlyCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReadOnlyCollection.h; sourceTree = ""; }; + B554F8F212A3F6AB00F20A0D /* ReadOnlyCollection.m.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReadOnlyCollection.m.h; sourceTree = ""; }; + B554F94B12A4033600F20A0D /* ModelBoneContent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelBoneContent.h; sourceTree = ""; }; + B554F94C12A4033600F20A0D /* ModelBoneContent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelBoneContent.m; sourceTree = ""; }; + B554F94F12A4034100F20A0D /* ModelBoneContentCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelBoneContentCollection.h; sourceTree = ""; }; + B554F95012A4034100F20A0D /* ModelBoneContentCollection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelBoneContentCollection.m; sourceTree = ""; }; + B554F99712A415AD00F20A0D /* ModelBoneContent+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ModelBoneContent+Internal.h"; sourceTree = ""; }; + B554F9B312A427DD00F20A0D /* ModelBoneReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelBoneReader.h; sourceTree = ""; }; + B554F9B412A427DD00F20A0D /* ModelBoneReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelBoneReader.m; sourceTree = ""; }; + B554F9CF12A42DC600F20A0D /* IndexBuffer+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "IndexBuffer+Internal.h"; sourceTree = ""; }; + B554F9DD12A42FD000F20A0D /* GraphicsDevice+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GraphicsDevice+Internal.h"; sourceTree = ""; }; + B554F9EE12A433B500F20A0D /* VertexBuffer+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "VertexBuffer+Internal.h"; sourceTree = ""; }; + B554FA0B12A4362B00F20A0D /* VertexDeclarationReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexDeclarationReader.h; sourceTree = ""; }; + B554FA0C12A4362B00F20A0D /* VertexDeclarationReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VertexDeclarationReader.m; sourceTree = ""; }; + B554FA2012A43A3A00F20A0D /* ModelBone+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ModelBone+Internal.h"; sourceTree = ""; }; + B554FC9812A45A9D00F20A0D /* VertexPositionNormalTextureArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexPositionNormalTextureArray.h; sourceTree = ""; }; + B554FC9912A45A9D00F20A0D /* VertexPositionNormalTextureArray.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VertexPositionNormalTextureArray.m; sourceTree = ""; }; + B554FC9C12A45B3300F20A0D /* VertexPositionNormalTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexPositionNormalTexture.h; sourceTree = ""; }; + B554FC9D12A45B3300F20A0D /* VertexPositionNormalTexture.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VertexPositionNormalTexture.m; sourceTree = ""; }; + B5672C6A129AFDCE00DE5AAC /* ModelMeshCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelMeshCollection.h; sourceTree = ""; }; + B5672C6B129AFDCE00DE5AAC /* ModelMeshCollection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelMeshCollection.m; sourceTree = ""; }; + B5672C78129AFE8500DE5AAC /* ModelMeshPartCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelMeshPartCollection.h; sourceTree = ""; }; + B5672C79129AFE8500DE5AAC /* ModelMeshPartCollection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelMeshPartCollection.m; sourceTree = ""; }; + B5672CC0129B02D100DE5AAC /* ModelEffectCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelEffectCollection.h; sourceTree = ""; }; + B5672CC1129B02D100DE5AAC /* ModelEffectCollection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelEffectCollection.m; sourceTree = ""; }; + B5672CD7129B0CAC00DE5AAC /* Model+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Model+Internal.h"; sourceTree = ""; }; + B5672CD9129B0CB700DE5AAC /* ModelMesh+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ModelMesh+Internal.h"; sourceTree = ""; }; + B5672CDB129B0CC300DE5AAC /* ModelMeshPart+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ModelMeshPart+Internal.h"; sourceTree = ""; }; + B5672D18129B174100DE5AAC /* ModelReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelReader.h; sourceTree = ""; }; + B5672D19129B174100DE5AAC /* ModelReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelReader.m; sourceTree = ""; }; B56CC50B123A6F3600B72347 /* MipmapChain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MipmapChain.h; sourceTree = ""; }; B56CC50C123A6F3600B72347 /* MipmapChain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MipmapChain.m; sourceTree = ""; }; B56CC50F123A739100B72347 /* MipmapChainCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MipmapChainCollection.h; sourceTree = ""; }; @@ -240,8 +423,8 @@ B56CC5C2123A927500B72347 /* ContentTypeReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContentTypeReader.m; sourceTree = ""; }; B56CC5C5123A928A00B72347 /* ContentTypeReaderManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContentTypeReaderManager.h; sourceTree = ""; }; B56CC5C6123A928A00B72347 /* ContentTypeReaderManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContentTypeReaderManager.m; sourceTree = ""; }; - B56CC5C9123A92BB00B72347 /* Texture2DContentTypeReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Texture2DContentTypeReader.h; sourceTree = ""; }; - B56CC5CA123A92BB00B72347 /* Texture2DContentTypeReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Texture2DContentTypeReader.m; sourceTree = ""; }; + B56CC5C9123A92BB00B72347 /* Texture2DReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Texture2DReader.h; sourceTree = ""; }; + B56CC5CA123A92BB00B72347 /* Texture2DReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Texture2DReader.m; sourceTree = ""; }; B57E3663124BC23E00DDAA42 /* Viewport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Viewport.h; sourceTree = ""; }; B57E3664124BC23E00DDAA42 /* Viewport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Viewport.m; sourceTree = ""; }; B57E36BC124BE2DD00DDAA42 /* VertexPositionColorTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexPositionColorTexture.h; sourceTree = ""; }; @@ -350,11 +533,53 @@ B5E78B6D12429B1A00DDD99A /* SamplerState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SamplerState.m; sourceTree = ""; }; B5E78B7812429BBD00DDD99A /* Effect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Effect.h; sourceTree = ""; }; B5E78B7912429BBD00DDD99A /* Effect.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Effect.m; sourceTree = ""; }; + B5E7EC52129AE1A00015B663 /* NodeContent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NodeContent.h; sourceTree = ""; }; + B5E7EC53129AE1A00015B663 /* NodeContent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NodeContent.m; sourceTree = ""; }; + B5E7EC59129AE1BF0015B663 /* MeshContent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MeshContent.h; sourceTree = ""; }; + B5E7EC5A129AE1BF0015B663 /* MeshContent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MeshContent.m; sourceTree = ""; }; + B5E7EC5D129AE1CD0015B663 /* GeometryContent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeometryContent.h; sourceTree = ""; }; + B5E7EC5E129AE1CD0015B663 /* GeometryContent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeometryContent.m; sourceTree = ""; }; + B5E7EC65129AE2340015B663 /* VertexContent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexContent.h; sourceTree = ""; }; + B5E7EC66129AE2340015B663 /* VertexContent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VertexContent.m; sourceTree = ""; }; + B5E7EC69129AE2410015B663 /* IndexCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexCollection.h; sourceTree = ""; }; + B5E7EC6A129AE2410015B663 /* IndexCollection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IndexCollection.m; sourceTree = ""; }; + B5E7EC6D129AE2530015B663 /* MaterialContent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MaterialContent.h; sourceTree = ""; }; + B5E7EC6E129AE2530015B663 /* MaterialContent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MaterialContent.m; sourceTree = ""; }; + B5E7EC71129AE2860015B663 /* BasicMaterialContent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BasicMaterialContent.h; sourceTree = ""; }; + B5E7EC72129AE2860015B663 /* BasicMaterialContent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BasicMaterialContent.m; sourceTree = ""; }; + B5E7EC75129AE2E10015B663 /* ModelContent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelContent.h; sourceTree = ""; }; + B5E7EC76129AE2E10015B663 /* ModelContent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelContent.m; sourceTree = ""; }; + B5E7EC79129AE2ED0015B663 /* ModelMeshContent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelMeshContent.h; sourceTree = ""; }; + B5E7EC7A129AE2ED0015B663 /* ModelMeshContent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelMeshContent.m; sourceTree = ""; }; + B5E7EC7D129AE2FD0015B663 /* ModelMeshPartContent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelMeshPartContent.h; sourceTree = ""; }; + B5E7EC7E129AE2FD0015B663 /* ModelMeshPartContent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelMeshPartContent.m; sourceTree = ""; }; + B5E7EC81129AE30C0015B663 /* VertexBufferContent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexBufferContent.h; sourceTree = ""; }; + B5E7EC82129AE30C0015B663 /* VertexBufferContent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VertexBufferContent.m; sourceTree = ""; }; + B5E7EC85129AE3570015B663 /* Model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Model.h; sourceTree = ""; }; + B5E7EC86129AE3570015B663 /* Model.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Model.m; sourceTree = ""; }; + B5E7EC89129AE3640015B663 /* ModelMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelMesh.h; sourceTree = ""; }; + B5E7EC8A129AE3640015B663 /* ModelMesh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelMesh.m; sourceTree = ""; }; + B5E7EC8D129AE36E0015B663 /* ModelMeshPart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelMeshPart.h; sourceTree = ""; }; + B5E7EC8E129AE36E0015B663 /* ModelMeshPart.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelMeshPart.m; sourceTree = ""; }; + B5E7ECAC129AE5B40015B663 /* TextureProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureProcessor.h; sourceTree = ""; }; + B5E7ECAD129AE5B40015B663 /* TextureProcessor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TextureProcessor.m; sourceTree = ""; }; + B5E7ECB0129AE5C50015B663 /* ModelProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelProcessor.h; sourceTree = ""; }; + B5E7ECB1129AE5C50015B663 /* ModelProcessor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelProcessor.m; sourceTree = ""; }; + B5E7ECB4129AE5D40015B663 /* MaterialProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MaterialProcessor.h; sourceTree = ""; }; + B5E7ECB5129AE5D40015B663 /* MaterialProcessor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MaterialProcessor.m; sourceTree = ""; }; + B5E7ECB8129AE6120015B663 /* XImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XImporter.h; sourceTree = ""; }; + B5E7ECB9129AE6120015B663 /* XImporter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XImporter.m; sourceTree = ""; }; + B5E7ECBC129AE6560015B663 /* Retronator.Xni.Framework.Content.Pipeline.Processors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Retronator.Xni.Framework.Content.Pipeline.Processors.h; sourceTree = ""; }; + B5E7ECBE129AE6620015B663 /* Retronator.Xni.Framework.Content.Pipeline.Processors.classes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Retronator.Xni.Framework.Content.Pipeline.Processors.classes.h; sourceTree = ""; }; + B5E7ECD2129AE6A70015B663 /* ContentProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContentProcessor.h; sourceTree = ""; }; + B5E7ECD3129AE6A70015B663 /* ContentProcessor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContentProcessor.m; sourceTree = ""; }; + B5E7ECD6129AE6CA0015B663 /* IContentProcessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IContentProcessor.h; sourceTree = ""; }; + B5E7ECD8129AE6D20015B663 /* IContentImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IContentImporter.h; sourceTree = ""; }; B5EA634E12491709001245A4 /* VertexStructs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexStructs.h; sourceTree = ""; }; B5EA636D124917E2001245A4 /* VertexPositionColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexPositionColor.h; sourceTree = ""; }; B5EA636E124917E2001245A4 /* VertexPositionColor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VertexPositionColor.m; sourceTree = ""; }; - B5EA637C124921D0001245A4 /* AdaptiveArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdaptiveArray.h; sourceTree = ""; }; - B5EA637D124921D0001245A4 /* AdaptiveArray.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdaptiveArray.m; sourceTree = ""; }; + B5EA637C124921D0001245A4 /* XniAdaptiveArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XniAdaptiveArray.h; sourceTree = ""; }; + B5EA637D124921D0001245A4 /* XniAdaptiveArray.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XniAdaptiveArray.m; sourceTree = ""; }; B5EA638D1249229D001245A4 /* VertexArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexArray.h; sourceTree = ""; }; B5EA638E1249229D001245A4 /* VertexArray.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VertexArray.m; sourceTree = ""; }; B5EA65511249482D001245A4 /* VertexPositionTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexPositionTexture.h; sourceTree = ""; }; @@ -383,6 +608,13 @@ B5EC5A4D1252C2DF001E7DFC /* GestureSample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GestureSample.h; sourceTree = ""; }; B5EC5A4E1252C2DF001E7DFC /* GestureSample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GestureSample.m; sourceTree = ""; }; B5EC5A921252C710001E7DFC /* Retronator.Xni.Framework.Input.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Retronator.Xni.Framework.Input.h; sourceTree = ""; }; + B5EFD742129B2A7800FDC150 /* ModelMeshContentCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelMeshContentCollection.h; sourceTree = ""; }; + B5EFD743129B2A7800FDC150 /* ModelMeshContentCollection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelMeshContentCollection.m; sourceTree = ""; }; + B5EFD746129B2A8900FDC150 /* ModelMeshPartContentCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelMeshPartContentCollection.h; sourceTree = ""; }; + B5EFD747129B2A8900FDC150 /* ModelMeshPartContentCollection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ModelMeshPartContentCollection.m; sourceTree = ""; }; + B5EFD763129B2B8100FDC150 /* ModelMeshContent+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ModelMeshContent+Internal.h"; sourceTree = ""; }; + B5EFD765129B2B8B00FDC150 /* ModelContent+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ModelContent+Internal.h"; sourceTree = ""; }; + B5EFD767129B2B9700FDC150 /* ModelMeshPartContent+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ModelMeshPartContent+Internal.h"; sourceTree = ""; }; B5F415B1127780840012BAF1 /* TextureCollection+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "TextureCollection+Internal.h"; sourceTree = ""; }; B5F415CD127781340012BAF1 /* SamplerStateCollection+Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SamplerStateCollection+Internal.h"; sourceTree = ""; }; B5F415DC127781D80012BAF1 /* XniSamplerEventArgs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XniSamplerEventArgs.h; sourceTree = ""; }; @@ -407,6 +639,30 @@ B5F853CC1239357400E6FD71 /* Quaternion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Quaternion.m; sourceTree = ""; }; B5F8546B1239484700E6FD71 /* ColorPixelBitmapContent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColorPixelBitmapContent.h; sourceTree = ""; }; B5F8546C1239484700E6FD71 /* ColorPixelBitmapContent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ColorPixelBitmapContent.m; sourceTree = ""; }; + B5FB745512A4ED6E00DB9234 /* IndexArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndexArray.h; sourceTree = ""; }; + B5FB745612A4ED6E00DB9234 /* IndexArray.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IndexArray.m; sourceTree = ""; }; + B5FB745912A4F01400DB9234 /* ShortIndexArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShortIndexArray.h; sourceTree = ""; }; + B5FB745A12A4F01400DB9234 /* ShortIndexArray.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShortIndexArray.m; sourceTree = ""; }; + B5FE12A2129FDDF70081F7A7 /* NodeContentCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NodeContentCollection.h; sourceTree = ""; }; + B5FE12A3129FDDF70081F7A7 /* NodeContentCollection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NodeContentCollection.m; sourceTree = ""; }; + B5FE12AE129FE1730081F7A7 /* ChildCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChildCollection.h; sourceTree = ""; }; + B5FE12AF129FE1730081F7A7 /* ChildCollection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChildCollection.m; sourceTree = ""; }; + B5FE12F0129FE8220081F7A7 /* GeometryContentCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeometryContentCollection.h; sourceTree = ""; }; + B5FE12F1129FE8220081F7A7 /* GeometryContentCollection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeometryContentCollection.m; sourceTree = ""; }; + B5FE12F4129FE8310081F7A7 /* PositionCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PositionCollection.h; sourceTree = ""; }; + B5FE12F5129FE8310081F7A7 /* PositionCollection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PositionCollection.m; sourceTree = ""; }; + B5FE132E129FEC9A0081F7A7 /* Collection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Collection.h; sourceTree = ""; }; + B5FE13C812A00AC60081F7A7 /* VertexChannelCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexChannelCollection.h; sourceTree = ""; }; + B5FE13C912A00AC60081F7A7 /* VertexChannelCollection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VertexChannelCollection.m; sourceTree = ""; }; + B5FE13D312A00BE50081F7A7 /* VertexChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexChannel.h; sourceTree = ""; }; + B5FE13D412A00BE50081F7A7 /* VertexChannel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VertexChannel.m; sourceTree = ""; }; + B5FE13D912A00C6B0081F7A7 /* IndirectPositionCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IndirectPositionCollection.h; sourceTree = ""; }; + B5FE13DA12A00C6B0081F7A7 /* IndirectPositionCollection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IndirectPositionCollection.m; sourceTree = ""; }; + B5FE13EB12A00D580081F7A7 /* Collection.m.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Collection.m.h; sourceTree = ""; }; + B5FE146512A01BB50081F7A7 /* VertexChannelNames.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexChannelNames.h; sourceTree = ""; }; + B5FE146612A01BB50081F7A7 /* VertexChannelNames.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VertexChannelNames.m; sourceTree = ""; }; + B5FE14BC12A02DCD0081F7A7 /* VertexDeclarationContent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexDeclarationContent.h; sourceTree = ""; }; + B5FE14BD12A02DCD0081F7A7 /* VertexDeclarationContent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VertexDeclarationContent.m; sourceTree = ""; }; D2AAC07E0554694100DB518D /* libXNI.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libXNI.a; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -477,17 +733,34 @@ B59AD7E81236E02500F99511 /* Pipeline */ = { isa = PBXGroup; children = ( + B5E7ECA6129AE5920015B663 /* Processors */, B59AD8181236E53600F99511 /* Graphics */, B59AD80D1236E22B00F99511 /* Retronator.Xni.Framework.Content.Pipeline.classes.h */, B59AD80B1236E21900F99511 /* Retronator.Xni.Framework.Content.Pipeline.h */, + B5FE12AE129FE1730081F7A7 /* ChildCollection.h */, + B5FE12AF129FE1730081F7A7 /* ChildCollection.m */, + B59AD81D1236E59A00F99511 /* ContentItem.h */, + B59AD81E1236E59A00F99511 /* ContentItem.m */, + B554F7F112A3C23300F20A0D /* OpaqueDataDictionary.h */, + B554F7F212A3C23300F20A0D /* OpaqueDataDictionary.m */, + B59AD8211236E76E00F99511 /* ContentIdentity.h */, + B59AD8221236E76E00F99511 /* ContentIdentity.m */, + B554F7BF12A3B48600F20A0D /* ExternalReference.h */, + B554F7C012A3B48600F20A0D /* ExternalReference.m */, + B5E7ECD8129AE6D20015B663 /* IContentImporter.h */, B59AD7EE1236E07300F99511 /* ContentImporter.h */, B59AD7EF1236E07300F99511 /* ContentImporter.m */, B59AD80F1236E25700F99511 /* TextureImporter.h */, B59AD8101236E25700F99511 /* TextureImporter.m */, - B59AD81D1236E59A00F99511 /* ContentItem.h */, - B59AD81E1236E59A00F99511 /* ContentItem.m */, - B59AD8211236E76E00F99511 /* ContentIdentity.h */, - B59AD8221236E76E00F99511 /* ContentIdentity.m */, + B5E7ECB8129AE6120015B663 /* XImporter.h */, + B5E7ECB9129AE6120015B663 /* XImporter.m */, + B54F9BBF12A2CA1B00F7411F /* XImporterReader.h */, + B54F9BC012A2CA1B00F7411F /* XImporterReader.m */, + B5E7ECD6129AE6CA0015B663 /* IContentProcessor.h */, + B5E7ECD2129AE6A70015B663 /* ContentProcessor.h */, + B5E7ECD3129AE6A70015B663 /* ContentProcessor.m */, + B554F7D112A3BD1B00F20A0D /* NamedValueDictionary.h */, + B554F7D212A3BD1B00F20A0D /* NamedValueDictionary.m.h */, ); path = Pipeline; sourceTree = ""; @@ -513,6 +786,36 @@ B56CC526123A79E800B72347 /* Texture2DContent.m */, B5F85385123929F800E6FD71 /* VectorConverter.h */, B5F85386123929F800E6FD71 /* VectorConverter.m */, + B5E7EC52129AE1A00015B663 /* NodeContent.h */, + B5E7EC53129AE1A00015B663 /* NodeContent.m */, + B5FE12A2129FDDF70081F7A7 /* NodeContentCollection.h */, + B5FE12A3129FDDF70081F7A7 /* NodeContentCollection.m */, + B5E7EC59129AE1BF0015B663 /* MeshContent.h */, + B5E7EC5A129AE1BF0015B663 /* MeshContent.m */, + B5FE12F0129FE8220081F7A7 /* GeometryContentCollection.h */, + B5FE12F1129FE8220081F7A7 /* GeometryContentCollection.m */, + B5FE12F4129FE8310081F7A7 /* PositionCollection.h */, + B5FE12F5129FE8310081F7A7 /* PositionCollection.m */, + B5E7EC5D129AE1CD0015B663 /* GeometryContent.h */, + B5E7EC5E129AE1CD0015B663 /* GeometryContent.m */, + B5E7EC65129AE2340015B663 /* VertexContent.h */, + B5E7EC66129AE2340015B663 /* VertexContent.m */, + B5FE13C812A00AC60081F7A7 /* VertexChannelCollection.h */, + B5FE13C912A00AC60081F7A7 /* VertexChannelCollection.m */, + B5FE13D312A00BE50081F7A7 /* VertexChannel.h */, + B5FE13D412A00BE50081F7A7 /* VertexChannel.m */, + B5FE13D912A00C6B0081F7A7 /* IndirectPositionCollection.h */, + B5FE13DA12A00C6B0081F7A7 /* IndirectPositionCollection.m */, + B5FE146512A01BB50081F7A7 /* VertexChannelNames.h */, + B5FE146612A01BB50081F7A7 /* VertexChannelNames.m */, + B5E7EC69129AE2410015B663 /* IndexCollection.h */, + B5E7EC6A129AE2410015B663 /* IndexCollection.m */, + B5E7EC6D129AE2530015B663 /* MaterialContent.h */, + B5E7EC6E129AE2530015B663 /* MaterialContent.m */, + B5E7EC71129AE2860015B663 /* BasicMaterialContent.h */, + B5E7EC72129AE2860015B663 /* BasicMaterialContent.m */, + B554F7B712A3B19100F20A0D /* TextureReferenceDictionary.h */, + B554F7B812A3B19100F20A0D /* TextureReferenceDictionary.m */, ); path = Graphics; sourceTree = ""; @@ -534,6 +837,7 @@ B5A1C83012353F9B00DB60CB /* Retronator.Xni.Framework.Content.classes.h */, B5A1C82E12353F8700DB60CB /* Retronator.Xni.Framework.Content.h */, B5A1C83212353FBB00DB60CB /* ContentManager.h */, + B5454401129B4F4D002A28BE /* ContentManager+Internal.h */, B5A1C83312353FBB00DB60CB /* ContentManager.m */, B56CC5BB123A915700B72347 /* ContentReader.h */, B56CC5BC123A915700B72347 /* ContentReader.m */, @@ -541,8 +845,24 @@ B56CC5C6123A928A00B72347 /* ContentTypeReaderManager.m */, B56CC5C1123A927500B72347 /* ContentTypeReader.h */, B56CC5C2123A927500B72347 /* ContentTypeReader.m */, - B56CC5C9123A92BB00B72347 /* Texture2DContentTypeReader.h */, - B56CC5CA123A92BB00B72347 /* Texture2DContentTypeReader.m */, + B56CC5C9123A92BB00B72347 /* Texture2DReader.h */, + B56CC5CA123A92BB00B72347 /* Texture2DReader.m */, + B5672D18129B174100DE5AAC /* ModelReader.h */, + B5672D19129B174100DE5AAC /* ModelReader.m */, + B54543F5129B47A1002A28BE /* ModelMeshReader.h */, + B54543F6129B47A1002A28BE /* ModelMeshReader.m */, + B54543E7129B473A002A28BE /* ModelMeshPartReader.h */, + B54543E8129B473A002A28BE /* ModelMeshPartReader.m */, + B54543DB129B4705002A28BE /* BasicEffectReader.h */, + B54543DC129B4705002A28BE /* BasicEffectReader.m */, + B54543DF129B4716002A28BE /* IndexBufferReader.h */, + B54543E0129B4716002A28BE /* IndexBufferReader.m */, + B54543E3129B4727002A28BE /* VertexBufferReader.h */, + B54543E4129B4727002A28BE /* VertexBufferReader.m */, + B554F9B312A427DD00F20A0D /* ModelBoneReader.h */, + B554F9B412A427DD00F20A0D /* ModelBoneReader.m */, + B554FA0B12A4362B00F20A0D /* VertexDeclarationReader.h */, + B554FA0C12A4362B00F20A0D /* VertexDeclarationReader.m */, ); path = Content; sourceTree = ""; @@ -579,6 +899,8 @@ B5EA65521249482D001245A4 /* VertexPositionTexture.m */, B57E36BC124BE2DD00DDAA42 /* VertexPositionColorTexture.h */, B57E36BD124BE2DD00DDAA42 /* VertexPositionColorTexture.m */, + B554FC9C12A45B3300F20A0D /* VertexPositionNormalTexture.h */, + B554FC9D12A45B3300F20A0D /* VertexPositionNormalTexture.m */, B5BBC2AC1248F0C40066F5ED /* VertexDeclaration.h */, B5BBC2AD1248F0C40066F5ED /* VertexDeclaration.m */, B5EA638D1249229D001245A4 /* VertexArray.h */, @@ -589,12 +911,40 @@ B5EA657712494AC3001245A4 /* VertexPositionTextureArray.m */, B57E36CA124BE36E00DDAA42 /* VertexPositionColorTextureArray.h */, B57E36CB124BE36E00DDAA42 /* VertexPositionColorTextureArray.m */, + B554FC9812A45A9D00F20A0D /* VertexPositionNormalTextureArray.h */, + B554FC9912A45A9D00F20A0D /* VertexPositionNormalTextureArray.m */, + B5FB745512A4ED6E00DB9234 /* IndexArray.h */, + B5FB745612A4ED6E00DB9234 /* IndexArray.m */, + B5FB745912A4F01400DB9234 /* ShortIndexArray.h */, + B5FB745A12A4F01400DB9234 /* ShortIndexArray.m */, B5BBC2D01248F98D0066F5ED /* VertexBuffer.h */, + B554F9EE12A433B500F20A0D /* VertexBuffer+Internal.h */, B5BBC2D11248F98D0066F5ED /* VertexBuffer.m */, B5BBC2EA1248FC7A0066F5ED /* VertexBufferBinding.h */, B5BBC2EB1248FC7A0066F5ED /* VertexBufferBinding.m */, B5BBC1CD1248D4CB0066F5ED /* IndexBuffer.h */, + B554F9CF12A42DC600F20A0D /* IndexBuffer+Internal.h */, B5BBC1CE1248D4CB0066F5ED /* IndexBuffer.m */, + B5E7EC85129AE3570015B663 /* Model.h */, + B5672CD7129B0CAC00DE5AAC /* Model+Internal.h */, + B5E7EC86129AE3570015B663 /* Model.m */, + B5672C6A129AFDCE00DE5AAC /* ModelMeshCollection.h */, + B5672C6B129AFDCE00DE5AAC /* ModelMeshCollection.m */, + B5E7EC89129AE3640015B663 /* ModelMesh.h */, + B5672CD9129B0CB700DE5AAC /* ModelMesh+Internal.h */, + B5E7EC8A129AE3640015B663 /* ModelMesh.m */, + B5672CC0129B02D100DE5AAC /* ModelEffectCollection.h */, + B5672CC1129B02D100DE5AAC /* ModelEffectCollection.m */, + B5672C78129AFE8500DE5AAC /* ModelMeshPartCollection.h */, + B5672C79129AFE8500DE5AAC /* ModelMeshPartCollection.m */, + B5E7EC8D129AE36E0015B663 /* ModelMeshPart.h */, + B5672CDB129B0CC300DE5AAC /* ModelMeshPart+Internal.h */, + B5E7EC8E129AE36E0015B663 /* ModelMeshPart.m */, + B554F8CE12A3F3E400F20A0D /* ModelBone.h */, + B554FA2012A43A3A00F20A0D /* ModelBone+Internal.h */, + B554F8CF12A3F3E400F20A0D /* ModelBone.m */, + B554F8DD12A3F3FD00F20A0D /* ModelBoneCollection.h */, + B554F8DE12A3F3FD00F20A0D /* ModelBoneCollection.m */, B5E78B6012429AEC00DDD99A /* BlendState.h */, B5E78B6112429AEC00DDD99A /* BlendState.m */, B5E78B6412429AF900DDD99A /* DepthStencilState.h */, @@ -615,6 +965,7 @@ B57E3664124BC23E00DDAA42 /* Viewport.m */, B5DDE82A11FF10EF000DB38B /* IGraphicsDeviceService.h */, B5DDE85A11FF1326000DB38B /* GraphicsDevice.h */, + B554F9DD12A42FD000F20A0D /* GraphicsDevice+Internal.h */, B5DDE85B11FF1326000DB38B /* GraphicsDevice.m */, B5DDE8C111FF29E8000DB38B /* ReachGraphicsDevice.h */, B5DDE8C211FF29E8000DB38B /* ReachGraphicsDevice.m */, @@ -717,12 +1068,53 @@ B5DE189611F8884A00BF3275 /* EventArgs.h */, B5DE189711F8884A00BF3275 /* EventArgs.m */, B56CC559123A846C00B72347 /* IServiceProvider.h */, - B5EA637C124921D0001245A4 /* AdaptiveArray.h */, - B5EA637D124921D0001245A4 /* AdaptiveArray.m */, + B5EA637C124921D0001245A4 /* XniAdaptiveArray.h */, + B5EA637D124921D0001245A4 /* XniAdaptiveArray.m */, + B5FE132E129FEC9A0081F7A7 /* Collection.h */, + B5FE13EB12A00D580081F7A7 /* Collection.m.h */, + B554F8F112A3F6AB00F20A0D /* ReadOnlyCollection.h */, + B554F8F212A3F6AB00F20A0D /* ReadOnlyCollection.m.h */, ); path = System; sourceTree = ""; }; + B5E7ECA6129AE5920015B663 /* Processors */ = { + isa = PBXGroup; + children = ( + B5E7ECBE129AE6620015B663 /* Retronator.Xni.Framework.Content.Pipeline.Processors.classes.h */, + B5E7ECBC129AE6560015B663 /* Retronator.Xni.Framework.Content.Pipeline.Processors.h */, + B5E7ECAC129AE5B40015B663 /* TextureProcessor.h */, + B5E7ECAD129AE5B40015B663 /* TextureProcessor.m */, + B5E7ECB0129AE5C50015B663 /* ModelProcessor.h */, + B5E7ECB1129AE5C50015B663 /* ModelProcessor.m */, + B5E7ECB4129AE5D40015B663 /* MaterialProcessor.h */, + B5E7ECB5129AE5D40015B663 /* MaterialProcessor.m */, + B5E7EC75129AE2E10015B663 /* ModelContent.h */, + B5EFD765129B2B8B00FDC150 /* ModelContent+Internal.h */, + B5E7EC76129AE2E10015B663 /* ModelContent.m */, + B5EFD742129B2A7800FDC150 /* ModelMeshContentCollection.h */, + B5EFD743129B2A7800FDC150 /* ModelMeshContentCollection.m */, + B5E7EC79129AE2ED0015B663 /* ModelMeshContent.h */, + B5EFD763129B2B8100FDC150 /* ModelMeshContent+Internal.h */, + B5E7EC7A129AE2ED0015B663 /* ModelMeshContent.m */, + B5EFD746129B2A8900FDC150 /* ModelMeshPartContentCollection.h */, + B5EFD747129B2A8900FDC150 /* ModelMeshPartContentCollection.m */, + B5E7EC7D129AE2FD0015B663 /* ModelMeshPartContent.h */, + B5EFD767129B2B9700FDC150 /* ModelMeshPartContent+Internal.h */, + B5E7EC7E129AE2FD0015B663 /* ModelMeshPartContent.m */, + B5E7EC81129AE30C0015B663 /* VertexBufferContent.h */, + B5E7EC82129AE30C0015B663 /* VertexBufferContent.m */, + B5FE14BC12A02DCD0081F7A7 /* VertexDeclarationContent.h */, + B5FE14BD12A02DCD0081F7A7 /* VertexDeclarationContent.m */, + B554F94B12A4033600F20A0D /* ModelBoneContent.h */, + B554F99712A415AD00F20A0D /* ModelBoneContent+Internal.h */, + B554F94C12A4033600F20A0D /* ModelBoneContent.m */, + B554F94F12A4034100F20A0D /* ModelBoneContentCollection.h */, + B554F95012A4034100F20A0D /* ModelBoneContentCollection.m */, + ); + path = Processors; + sourceTree = ""; + }; B5EC59F41252B8B6001E7DFC /* Input */ = { isa = PBXGroup; children = ( @@ -836,7 +1228,7 @@ B56CC5BD123A915700B72347 /* ContentReader.h in Headers */, B56CC5C3123A927500B72347 /* ContentTypeReader.h in Headers */, B56CC5C7123A928A00B72347 /* ContentTypeReaderManager.h in Headers */, - B56CC5CB123A92BB00B72347 /* Texture2DContentTypeReader.h in Headers */, + B56CC5CB123A92BB00B72347 /* Texture2DReader.h in Headers */, B5E78B4A1242925600DDD99A /* SpriteBatch.h in Headers */, B5E78B6212429AEC00DDD99A /* BlendState.h in Headers */, B5E78B6612429AF900DDD99A /* DepthStencilState.h in Headers */, @@ -852,7 +1244,7 @@ B5BBC2EC1248FC7A0066F5ED /* VertexBufferBinding.h in Headers */, B5EA634F12491709001245A4 /* VertexStructs.h in Headers */, B5EA636F124917E2001245A4 /* VertexPositionColor.h in Headers */, - B5EA637E124921D0001245A4 /* AdaptiveArray.h in Headers */, + B5EA637E124921D0001245A4 /* XniAdaptiveArray.h in Headers */, B5EA638F1249229D001245A4 /* VertexArray.h in Headers */, B5EA65531249482D001245A4 /* VertexPositionTexture.h in Headers */, B5EA65601249495C001245A4 /* VertexPositionColorArray.h in Headers */, @@ -880,6 +1272,81 @@ B5F415CF127781340012BAF1 /* SamplerStateCollection+Internal.h in Headers */, B5F415DE127781D80012BAF1 /* XniSamplerEventArgs.h in Headers */, B53649F2127DE08100CAE30C /* GameWindow+Internal.h in Headers */, + B5E7EC54129AE1A00015B663 /* NodeContent.h in Headers */, + B5E7EC5B129AE1BF0015B663 /* MeshContent.h in Headers */, + B5E7EC5F129AE1CD0015B663 /* GeometryContent.h in Headers */, + B5E7EC67129AE2340015B663 /* VertexContent.h in Headers */, + B5E7EC6B129AE2410015B663 /* IndexCollection.h in Headers */, + B5E7EC6F129AE2530015B663 /* MaterialContent.h in Headers */, + B5E7EC73129AE2860015B663 /* BasicMaterialContent.h in Headers */, + B5E7EC77129AE2E10015B663 /* ModelContent.h in Headers */, + B5E7EC7B129AE2ED0015B663 /* ModelMeshContent.h in Headers */, + B5E7EC7F129AE2FD0015B663 /* ModelMeshPartContent.h in Headers */, + B5E7EC83129AE30C0015B663 /* VertexBufferContent.h in Headers */, + B5E7EC87129AE3570015B663 /* Model.h in Headers */, + B5E7EC8B129AE3640015B663 /* ModelMesh.h in Headers */, + B5E7EC8F129AE36E0015B663 /* ModelMeshPart.h in Headers */, + B5E7ECAE129AE5B40015B663 /* TextureProcessor.h in Headers */, + B5E7ECB2129AE5C50015B663 /* ModelProcessor.h in Headers */, + B5E7ECB6129AE5D40015B663 /* MaterialProcessor.h in Headers */, + B5E7ECBA129AE6120015B663 /* XImporter.h in Headers */, + B5E7ECBD129AE6560015B663 /* Retronator.Xni.Framework.Content.Pipeline.Processors.h in Headers */, + B5E7ECBF129AE6620015B663 /* Retronator.Xni.Framework.Content.Pipeline.Processors.classes.h in Headers */, + B5E7ECD4129AE6A70015B663 /* ContentProcessor.h in Headers */, + B5E7ECD7129AE6CA0015B663 /* IContentProcessor.h in Headers */, + B5E7ECD9129AE6D20015B663 /* IContentImporter.h in Headers */, + B5672C6C129AFDCE00DE5AAC /* ModelMeshCollection.h in Headers */, + B5672C7A129AFE8500DE5AAC /* ModelMeshPartCollection.h in Headers */, + B5672CC2129B02D100DE5AAC /* ModelEffectCollection.h in Headers */, + B5672CD8129B0CAC00DE5AAC /* Model+Internal.h in Headers */, + B5672CDA129B0CB700DE5AAC /* ModelMesh+Internal.h in Headers */, + B5672CDC129B0CC300DE5AAC /* ModelMeshPart+Internal.h in Headers */, + B5672D1A129B174100DE5AAC /* ModelReader.h in Headers */, + B5EFD744129B2A7800FDC150 /* ModelMeshContentCollection.h in Headers */, + B5EFD748129B2A8900FDC150 /* ModelMeshPartContentCollection.h in Headers */, + B5EFD764129B2B8100FDC150 /* ModelMeshContent+Internal.h in Headers */, + B5EFD766129B2B8B00FDC150 /* ModelContent+Internal.h in Headers */, + B5EFD768129B2B9700FDC150 /* ModelMeshPartContent+Internal.h in Headers */, + B54543DD129B4705002A28BE /* BasicEffectReader.h in Headers */, + B54543E1129B4716002A28BE /* IndexBufferReader.h in Headers */, + B54543E5129B4727002A28BE /* VertexBufferReader.h in Headers */, + B54543E9129B473A002A28BE /* ModelMeshPartReader.h in Headers */, + B54543F7129B47A1002A28BE /* ModelMeshReader.h in Headers */, + B5454402129B4F4D002A28BE /* ContentManager+Internal.h in Headers */, + B5FE12A4129FDDF70081F7A7 /* NodeContentCollection.h in Headers */, + B5FE12B0129FE1730081F7A7 /* ChildCollection.h in Headers */, + B5FE12F2129FE8220081F7A7 /* GeometryContentCollection.h in Headers */, + B5FE12F6129FE8310081F7A7 /* PositionCollection.h in Headers */, + B5FE1330129FEC9A0081F7A7 /* Collection.h in Headers */, + B5FE13CA12A00AC60081F7A7 /* VertexChannelCollection.h in Headers */, + B5FE13D512A00BE50081F7A7 /* VertexChannel.h in Headers */, + B5FE13DB12A00C6B0081F7A7 /* IndirectPositionCollection.h in Headers */, + B5FE13EC12A00D580081F7A7 /* Collection.m.h in Headers */, + B5FE146712A01BB50081F7A7 /* VertexChannelNames.h in Headers */, + B5FE14BE12A02DCD0081F7A7 /* VertexDeclarationContent.h in Headers */, + B54F9BC112A2CA1B00F7411F /* XImporterReader.h in Headers */, + B554F7B912A3B19100F20A0D /* TextureReferenceDictionary.h in Headers */, + B554F7C112A3B48600F20A0D /* ExternalReference.h in Headers */, + B554F7D312A3BD1B00F20A0D /* NamedValueDictionary.h in Headers */, + B554F7EA12A3C1B100F20A0D /* NamedValueDictionary.m.h in Headers */, + B554F7F312A3C23300F20A0D /* OpaqueDataDictionary.h in Headers */, + B554F8D012A3F3E400F20A0D /* ModelBone.h in Headers */, + B554F8DF12A3F3FD00F20A0D /* ModelBoneCollection.h in Headers */, + B554F8F312A3F6AB00F20A0D /* ReadOnlyCollection.h in Headers */, + B554F8F512A3F6BE00F20A0D /* ReadOnlyCollection.m.h in Headers */, + B554F94D12A4033600F20A0D /* ModelBoneContent.h in Headers */, + B554F95112A4034100F20A0D /* ModelBoneContentCollection.h in Headers */, + B554F99812A415AD00F20A0D /* ModelBoneContent+Internal.h in Headers */, + B554F9B512A427DD00F20A0D /* ModelBoneReader.h in Headers */, + B554F9D012A42DC600F20A0D /* IndexBuffer+Internal.h in Headers */, + B554F9DE12A42FD000F20A0D /* GraphicsDevice+Internal.h in Headers */, + B554F9EF12A433B500F20A0D /* VertexBuffer+Internal.h in Headers */, + B554FA0D12A4362B00F20A0D /* VertexDeclarationReader.h in Headers */, + B554FA2212A43A3A00F20A0D /* ModelBone+Internal.h in Headers */, + B554FC9A12A45A9D00F20A0D /* VertexPositionNormalTextureArray.h in Headers */, + B554FC9E12A45B3300F20A0D /* VertexPositionNormalTexture.h in Headers */, + B5FB745712A4ED6E00DB9234 /* IndexArray.h in Headers */, + B5FB745B12A4F01400DB9234 /* ShortIndexArray.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1022,7 +1489,7 @@ B56CC5BE123A915700B72347 /* ContentReader.m in Sources */, B56CC5C4123A927500B72347 /* ContentTypeReader.m in Sources */, B56CC5C8123A928A00B72347 /* ContentTypeReaderManager.m in Sources */, - B56CC5CC123A92BB00B72347 /* Texture2DContentTypeReader.m in Sources */, + B56CC5CC123A92BB00B72347 /* Texture2DReader.m in Sources */, B5E78B4B1242925600DDD99A /* SpriteBatch.m in Sources */, B5E78B6312429AEC00DDD99A /* BlendState.m in Sources */, B5E78B6712429AF900DDD99A /* DepthStencilState.m in Sources */, @@ -1037,7 +1504,7 @@ B5BBC2D31248F98D0066F5ED /* VertexBuffer.m in Sources */, B5BBC2ED1248FC7A0066F5ED /* VertexBufferBinding.m in Sources */, B5EA6370124917E2001245A4 /* VertexPositionColor.m in Sources */, - B5EA637F124921D0001245A4 /* AdaptiveArray.m in Sources */, + B5EA637F124921D0001245A4 /* XniAdaptiveArray.m in Sources */, B5EA63901249229D001245A4 /* VertexArray.m in Sources */, B5EA65541249482D001245A4 /* VertexPositionTexture.m in Sources */, B5EA65611249495C001245A4 /* VertexPositionColorArray.m in Sources */, @@ -1056,6 +1523,59 @@ B50769151264EE9500E4474F /* GameComponent.m in Sources */, B507691D1264EF0B00E4474F /* DrawableGameComponent.m in Sources */, B5F415DF127781D80012BAF1 /* XniSamplerEventArgs.m in Sources */, + B5E7EC55129AE1A00015B663 /* NodeContent.m in Sources */, + B5E7EC5C129AE1BF0015B663 /* MeshContent.m in Sources */, + B5E7EC60129AE1CD0015B663 /* GeometryContent.m in Sources */, + B5E7EC68129AE2340015B663 /* VertexContent.m in Sources */, + B5E7EC6C129AE2410015B663 /* IndexCollection.m in Sources */, + B5E7EC70129AE2530015B663 /* MaterialContent.m in Sources */, + B5E7EC74129AE2860015B663 /* BasicMaterialContent.m in Sources */, + B5E7EC78129AE2E10015B663 /* ModelContent.m in Sources */, + B5E7EC7C129AE2ED0015B663 /* ModelMeshContent.m in Sources */, + B5E7EC80129AE2FD0015B663 /* ModelMeshPartContent.m in Sources */, + B5E7EC84129AE30C0015B663 /* VertexBufferContent.m in Sources */, + B5E7EC88129AE3570015B663 /* Model.m in Sources */, + B5E7EC8C129AE3640015B663 /* ModelMesh.m in Sources */, + B5E7EC90129AE36E0015B663 /* ModelMeshPart.m in Sources */, + B5E7ECAF129AE5B40015B663 /* TextureProcessor.m in Sources */, + B5E7ECB3129AE5C50015B663 /* ModelProcessor.m in Sources */, + B5E7ECB7129AE5D40015B663 /* MaterialProcessor.m in Sources */, + B5E7ECBB129AE6120015B663 /* XImporter.m in Sources */, + B5E7ECD5129AE6A70015B663 /* ContentProcessor.m in Sources */, + B5672C6D129AFDCE00DE5AAC /* ModelMeshCollection.m in Sources */, + B5672C7B129AFE8500DE5AAC /* ModelMeshPartCollection.m in Sources */, + B5672CC3129B02D100DE5AAC /* ModelEffectCollection.m in Sources */, + B5672D1B129B174100DE5AAC /* ModelReader.m in Sources */, + B5EFD745129B2A7800FDC150 /* ModelMeshContentCollection.m in Sources */, + B5EFD749129B2A8900FDC150 /* ModelMeshPartContentCollection.m in Sources */, + B54543DE129B4705002A28BE /* BasicEffectReader.m in Sources */, + B54543E2129B4716002A28BE /* IndexBufferReader.m in Sources */, + B54543E6129B4727002A28BE /* VertexBufferReader.m in Sources */, + B54543EA129B473A002A28BE /* ModelMeshPartReader.m in Sources */, + B54543F8129B47A1002A28BE /* ModelMeshReader.m in Sources */, + B5FE12A5129FDDF70081F7A7 /* NodeContentCollection.m in Sources */, + B5FE12B1129FE1730081F7A7 /* ChildCollection.m in Sources */, + B5FE12F3129FE8220081F7A7 /* GeometryContentCollection.m in Sources */, + B5FE12F7129FE8310081F7A7 /* PositionCollection.m in Sources */, + B5FE13CB12A00AC60081F7A7 /* VertexChannelCollection.m in Sources */, + B5FE13D612A00BE50081F7A7 /* VertexChannel.m in Sources */, + B5FE13DC12A00C6B0081F7A7 /* IndirectPositionCollection.m in Sources */, + B5FE146812A01BB50081F7A7 /* VertexChannelNames.m in Sources */, + B5FE14BF12A02DCD0081F7A7 /* VertexDeclarationContent.m in Sources */, + B54F9BC212A2CA1B00F7411F /* XImporterReader.m in Sources */, + B554F7BA12A3B19100F20A0D /* TextureReferenceDictionary.m in Sources */, + B554F7C212A3B48600F20A0D /* ExternalReference.m in Sources */, + B554F7F412A3C23300F20A0D /* OpaqueDataDictionary.m in Sources */, + B554F8D112A3F3E400F20A0D /* ModelBone.m in Sources */, + B554F8E012A3F3FD00F20A0D /* ModelBoneCollection.m in Sources */, + B554F94E12A4033600F20A0D /* ModelBoneContent.m in Sources */, + B554F95212A4034100F20A0D /* ModelBoneContentCollection.m in Sources */, + B554F9B612A427DD00F20A0D /* ModelBoneReader.m in Sources */, + B554FA0E12A4362B00F20A0D /* VertexDeclarationReader.m in Sources */, + B554FC9B12A45A9D00F20A0D /* VertexPositionNormalTextureArray.m in Sources */, + B554FC9F12A45B3300F20A0D /* VertexPositionNormalTexture.m in Sources */, + B5FB745812A4ED6E00DB9234 /* IndexArray.m in Sources */, + B5FB745C12A4F01400DB9234 /* ShortIndexArray.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1113,7 +1633,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; OTHER_LDFLAGS = "-ObjC"; PREBINDING = NO; - SDKROOT = iphoneos4.1; + SDKROOT = iphoneos; }; name = Debug; }; @@ -1124,9 +1644,10 @@ GCC_C_LANGUAGE_STANDARD = c99; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 3.2; OTHER_LDFLAGS = "-ObjC"; PREBINDING = NO; - SDKROOT = iphoneos4.1; + SDKROOT = iphoneos; }; name = Release; };