From 668bba9869ce9fe68c8fa9e441824bf2f56319f0 Mon Sep 17 00:00:00 2001 From: Matej Jan Date: Tue, 21 Sep 2010 21:46:53 +0000 Subject: [PATCH] Added user primitive rendering. git-svn-id: http://xni.googlecode.com/svn/XNI@23 ac433895-eea3-a490-d80a-17149a75e588 --- Classes/Retronator/Xni/Framework/Color.h | 16 +- Classes/Retronator/Xni/Framework/Color.m | 314 +++++++++--------- .../Content/Pipeline/Graphics/BitmapContent.h | 2 +- .../Content/Pipeline/Graphics/BitmapContent.m | 2 +- .../Graphics/ColorPixelBitmapContent.h | 4 +- .../Graphics/ColorPixelBitmapContent.m | 6 +- .../Pipeline/Graphics/PixelBitmapContent.h | 2 +- .../Pipeline/Graphics/PixelBitmapContent.m | 6 +- .../Pipeline/Graphics/VectorConverter.h | 4 +- .../Pipeline/Graphics/VectorConverter.m | 4 +- .../Content/Pipeline/TextureImporter.m | 2 +- .../Content/Texture2DContentTypeReader.m | 10 +- Classes/Retronator/Xni/Framework/Game.m | 2 +- .../Xni/Framework/Graphics/BasicEffect.h | 72 ++++ .../Xni/Framework/Graphics/BasicEffect.m | 196 +++++++++++ .../Xni/Framework/Graphics/DirectionalLight.h | 27 ++ .../Xni/Framework/Graphics/DirectionalLight.m | 33 ++ .../Xni/Framework/Graphics/Effect.h | 11 +- .../Xni/Framework/Graphics/Effect.m | 3 + .../Xni/Framework/Graphics/EffectPass.h | 22 ++ .../Xni/Framework/Graphics/EffectPass.m | 32 ++ .../Xni/Framework/Graphics/EffectTechnique.h | 21 ++ .../Xni/Framework/Graphics/EffectTechnique.m | 31 ++ .../Retronator/Xni/Framework/Graphics/Enums.h | 22 +- .../Xni/Framework/Graphics/GraphicsDevice.h | 53 ++- .../Xni/Framework/Graphics/GraphicsDevice.m | 128 ++++++- .../Xni/Framework/Graphics/IndexBuffer.h | 19 ++ .../Xni/Framework/Graphics/IndexBuffer.m | 16 + .../Framework/Graphics/ReachGraphicsDevice.h | 1 - .../Framework/Graphics/ReachGraphicsDevice.m | 111 +++++++ ...etronator.Xni.Framework.Graphics.classes.h | 12 +- .../Retronator.Xni.Framework.Graphics.h | 21 ++ .../Graphics/SamplerStateCollection.h | 22 ++ .../Graphics/SamplerStateCollection.m | 46 +++ .../Xni/Framework/Graphics/Texture.h | 2 +- .../Xni/Framework/Graphics/Texture.m | 2 +- .../Xni/Framework/Graphics/Texture2D.h | 18 +- .../Xni/Framework/Graphics/Texture2D.m | 22 +- .../Framework/Graphics/TextureCollection.h | 22 ++ .../Framework/Graphics/TextureCollection.m | 46 +++ .../Xni/Framework/Graphics/Vector4.h | 4 +- .../Xni/Framework/Graphics/VertexArray.h | 28 ++ .../Xni/Framework/Graphics/VertexArray.m | 50 +++ .../Xni/Framework/Graphics/VertexBuffer.h | 21 ++ .../Xni/Framework/Graphics/VertexBuffer.m | 17 + .../Framework/Graphics/VertexBufferBinding.h | 27 ++ .../Framework/Graphics/VertexBufferBinding.m | 43 +++ .../Framework/Graphics/VertexDeclaration.h | 23 ++ .../Framework/Graphics/VertexDeclaration.m | 37 +++ .../Xni/Framework/Graphics/VertexElement.h | 39 +++ .../Xni/Framework/Graphics/VertexElement.m | 102 ++++++ .../Framework/Graphics/VertexPositionColor.h | 19 ++ .../Framework/Graphics/VertexPositionColor.m | 35 ++ .../Graphics/VertexPositionColorArray.h | 21 ++ .../Graphics/VertexPositionColorArray.m | 29 ++ .../Graphics/VertexPositionTexture.h | 19 ++ .../Graphics/VertexPositionTexture.m | 35 ++ .../Graphics/VertexPositionTextureArray.h | 21 ++ .../Graphics/VertexPositionTextureArray.m | 29 ++ .../Xni/Framework/Graphics/VertexStructs.h | 29 ++ Classes/Retronator/Xni/Framework/Matrix.h | 2 +- Classes/Retronator/Xni/Framework/Matrix.m | 191 +++++++++++ Classes/Retronator/Xni/Framework/Quaternion.h | 2 +- Classes/Retronator/Xni/Framework/Rectangle.h | 4 +- Classes/Retronator/Xni/Framework/Rectangle.m | 12 +- Classes/Retronator/Xni/Framework/Vector2.h | 4 +- Classes/Retronator/Xni/Framework/Vector3.h | 4 +- Classes/Retronator/Xni/Framework/Vector3.m | 160 +++++++++ Classes/System/AdaptiveArray.m | 50 +++ Classes/System/System.classes.h | 3 + Classes/System/System.h | 5 +- 71 files changed, 2204 insertions(+), 246 deletions(-) create mode 100644 Classes/Retronator/Xni/Framework/Graphics/BasicEffect.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/BasicEffect.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/DirectionalLight.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/DirectionalLight.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/EffectPass.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/EffectPass.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/EffectTechnique.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/EffectTechnique.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/SamplerStateCollection.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/SamplerStateCollection.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/TextureCollection.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/TextureCollection.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexArray.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexArray.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexBufferBinding.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexBufferBinding.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexDeclaration.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexDeclaration.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexElement.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexElement.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorArray.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorArray.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexPositionTextureArray.h create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexPositionTextureArray.m create mode 100644 Classes/Retronator/Xni/Framework/Graphics/VertexStructs.h create mode 100644 Classes/System/AdaptiveArray.m diff --git a/Classes/Retronator/Xni/Framework/Color.h b/Classes/Retronator/Xni/Framework/Color.h index ce349d3..7269b17 100644 --- a/Classes/Retronator/Xni/Framework/Color.h +++ b/Classes/Retronator/Xni/Framework/Color.h @@ -14,16 +14,16 @@ uint packedValue; } -- (id) initWithRed:(int)red Green:(int)green Blue:(int)blue Alpha:(int)alpha; -- (id) initWithRed:(int)red Green:(int)green Blue:(int)blue; -- (id) initWithPercentageRed:(float)red Green:(float)green Blue:(float)blue Alpha:(float)alpha; -- (id) initWithPercentageRed:(float)red Green:(float)green Blue:(float)blue; +- (id) initWithRed:(int)red green:(int)green blue:(int)blue alpha:(int)alpha; +- (id) initWithRed:(int)red green:(int)green blue:(int)blue; +- (id) initWithPercentageRed:(float)red green:(float)green blue:(float)blue alpha:(float)alpha; +- (id) initWithPercentageRed:(float)red green:(float)green blue:(float)blue; - (id) initWithColor:(Color*)color; -+ (Color*) colorWithRed:(int)red Green:(int)green Blue:(int)blue Alpha:(int)alpha; -+ (Color*) colorWithRed:(int)red Green:(int)green Blue:(int)blue; -+ (Color*) colorWithPercentageRed:(float)red Green:(float)green Blue:(float)blue Alpha:(float)alpha; -+ (Color*) colorWithPercentageRed:(float)red Green:(float)green Blue:(float)blue; ++ (Color*) colorWithRed:(int)red green:(int)green blue:(int)blue alpha:(int)alpha; ++ (Color*) colorWithRed:(int)red green:(int)green blue:(int)blue; ++ (Color*) colorWithPercentageRed:(float)red green:(float)green blue:(float)blue alpha:(float)alpha; ++ (Color*) colorWithPercentageRed:(float)red green:(float)green blue:(float)blue; + (Color*) colorWithColor:(Color*)color; @property (nonatomic) Byte r; diff --git a/Classes/Retronator/Xni/Framework/Color.m b/Classes/Retronator/Xni/Framework/Color.m index dfce26f..e157b5d 100644 --- a/Classes/Retronator/Xni/Framework/Color.m +++ b/Classes/Retronator/Xni/Framework/Color.m @@ -15,7 +15,7 @@ // CONSTRUCTORS -- (id) initWithRed:(int)red Green:(int)green Blue:(int)blue Alpha:(int)alpha { +- (id) initWithRed:(int)red green:(int)green blue:(int)blue alpha:(int)alpha { if (self = [super init]) { red = CLAMP_TO_BYTE(red); green = CLAMP_TO_BYTE(green) << 8; @@ -26,36 +26,36 @@ return self; } -- (id) initWithRed:(int)red Green:(int)green Blue:(int)blue { - return [self initWithRed:red Green:green Blue:blue Alpha:255]; +- (id) initWithRed:(int)red green:(int)green blue:(int)blue { + return [self initWithRed:red green:green blue:blue alpha:255]; } -- (id) initWithPercentageRed:(float)red Green:(float)green Blue:(float)blue Alpha:(float)alpha { - return [self initWithRed:255 * red Green:255 * green Blue:255 * blue Alpha:255 * alpha]; +- (id) initWithPercentageRed:(float)red green:(float)green blue:(float)blue alpha:(float)alpha { + return [self initWithRed:255 * red green:255 * green blue:255 * blue alpha:255 * alpha]; } -- (id) initWithPercentageRed:(float)red Green:(float)green Blue:(float)blue { - return [self initWithPercentageRed:red Green:green Blue:blue Alpha:1]; +- (id) initWithPercentageRed:(float)red green:(float)green blue:(float)blue { + return [self initWithPercentageRed:red green:green blue:blue alpha:1]; } - (id) initWithColor:(Color*)color { - return [self initWithRed:color.r Green:color.g Blue:color.b Alpha:color.a]; + return [self initWithRed:color.r green:color.g blue:color.b alpha:color.a]; } -+ (Color*) colorWithRed:(int)red Green:(int)green Blue:(int)blue Alpha:(int)alpha { - return [[[Color alloc] initWithRed:red Green:green Blue:blue Alpha:alpha] autorelease]; ++ (Color*) colorWithRed:(int)red green:(int)green blue:(int)blue alpha:(int)alpha { + return [[[Color alloc] initWithRed:red green:green blue:blue alpha:alpha] autorelease]; } -+ (Color*) colorWithRed:(int)red Green:(int)green Blue:(int)blue { - return [[[Color alloc] initWithRed:red Green:green Blue:blue] autorelease]; ++ (Color*) colorWithRed:(int)red green:(int)green blue:(int)blue { + return [[[Color alloc] initWithRed:red green:green blue:blue] autorelease]; } -+ (Color*) colorWithPercentageRed:(float)red Green:(float)green Blue:(float)blue Alpha:(float)alpha { - return [[[Color alloc] initWithPercentageRed:red Green:green Blue:blue Alpha:alpha] autorelease]; ++ (Color*) colorWithPercentageRed:(float)red green:(float)green blue:(float)blue alpha:(float)alpha { + return [[[Color alloc] initWithPercentageRed:red green:green blue:blue alpha:alpha] autorelease]; } -+ (Color*) colorWithPercentageRed:(float)red Green:(float)green Blue:(float)blue { - return [[[Color alloc] initWithPercentageRed:red Green:green Blue:blue] autorelease]; ++ (Color*) colorWithPercentageRed:(float)red green:(float)green blue:(float)blue { + return [[[Color alloc] initWithPercentageRed:red green:green blue:blue] autorelease]; } + (Color*) colorWithColor:(Color *)color { @@ -86,146 +86,146 @@ // Constants -+ (Color*) aliceBlue {return [Color colorWithRed:240 Green:248 Blue:255 Alpha:255];} -+ (Color*) antiqueWhite {return [Color colorWithRed:250 Green:235 Blue:215 Alpha:255];} -+ (Color*) aqua {return [Color colorWithRed:0 Green:255 Blue:255 Alpha:255];} -+ (Color*) aquamarine {return [Color colorWithRed:127 Green:255 Blue:212 Alpha:255];} -+ (Color*) azure {return [Color colorWithRed:240 Green:255 Blue:255 Alpha:255];} -+ (Color*) beige {return [Color colorWithRed:245 Green:245 Blue:220 Alpha:255];} -+ (Color*) bisque {return [Color colorWithRed:255 Green:228 Blue:196 Alpha:255];} -+ (Color*) black {return [Color colorWithRed:0 Green:0 Blue:0 Alpha:255];} -+ (Color*) blanchedAlmond {return [Color colorWithRed:255 Green:235 Blue:205 Alpha:255];} -+ (Color*) blue {return [Color colorWithRed:0 Green:0 Blue:255 Alpha:255];} -+ (Color*) blueViolet {return [Color colorWithRed:138 Green:43 Blue:226 Alpha:255];} -+ (Color*) brown {return [Color colorWithRed:165 Green:42 Blue:42 Alpha:255];} -+ (Color*) burlyWood {return [Color colorWithRed:222 Green:184 Blue:135 Alpha:255];} -+ (Color*) cadetBlue {return [Color colorWithRed:95 Green:158 Blue:160 Alpha:255];} -+ (Color*) chartreuse {return [Color colorWithRed:127 Green:255 Blue:0 Alpha:255];} -+ (Color*) chocolate {return [Color colorWithRed:210 Green:105 Blue:30 Alpha:255];} -+ (Color*) coral {return [Color colorWithRed:255 Green:127 Blue:80 Alpha:255];} -+ (Color*) cornflowerBlue {return [Color colorWithRed:100 Green:149 Blue:237 Alpha:255];} -+ (Color*) cornsilk {return [Color colorWithRed:255 Green:248 Blue:220 Alpha:255];} -+ (Color*) crimson {return [Color colorWithRed:220 Green:20 Blue:60 Alpha:255];} -+ (Color*) cyan {return [Color colorWithRed:0 Green:255 Blue:255 Alpha:255];} -+ (Color*) darkBlue {return [Color colorWithRed:0 Green:0 Blue:139 Alpha:255];} -+ (Color*) darkCyan {return [Color colorWithRed:0 Green:139 Blue:139 Alpha:255];} -+ (Color*) darkGoldenrod {return [Color colorWithRed:184 Green:134 Blue:11 Alpha:255];} -+ (Color*) darkGray {return [Color colorWithRed:169 Green:169 Blue:169 Alpha:255];} -+ (Color*) darkGreen {return [Color colorWithRed:0 Green:100 Blue:0 Alpha:255];} -+ (Color*) darkKhaki {return [Color colorWithRed:189 Green:183 Blue:107 Alpha:255];} -+ (Color*) darkMagenta {return [Color colorWithRed:139 Green:0 Blue:139 Alpha:255];} -+ (Color*) darkOliveGreen {return [Color colorWithRed:85 Green:107 Blue:47 Alpha:255];} -+ (Color*) darkOrange {return [Color colorWithRed:255 Green:140 Blue:0 Alpha:255];} -+ (Color*) darkOrchid {return [Color colorWithRed:153 Green:50 Blue:204 Alpha:255];} -+ (Color*) darkRed {return [Color colorWithRed:139 Green:0 Blue:0 Alpha:255];} -+ (Color*) darkSalmon {return [Color colorWithRed:233 Green:150 Blue:122 Alpha:255];} -+ (Color*) darkSeaGreen {return [Color colorWithRed:143 Green:188 Blue:139 Alpha:255];} -+ (Color*) darkSlateBlue {return [Color colorWithRed:72 Green:61 Blue:139 Alpha:255];} -+ (Color*) darkSlateGray {return [Color colorWithRed:47 Green:79 Blue:79 Alpha:255];} -+ (Color*) darkTurquoise {return [Color colorWithRed:0 Green:206 Blue:209 Alpha:255];} -+ (Color*) darkViolet {return [Color colorWithRed:148 Green:0 Blue:211 Alpha:255];} -+ (Color*) deepPink {return [Color colorWithRed:255 Green:20 Blue:147 Alpha:255];} -+ (Color*) deepSkyBlue {return [Color colorWithRed:0 Green:191 Blue:255 Alpha:255];} -+ (Color*) dimGray {return [Color colorWithRed:105 Green:105 Blue:105 Alpha:255];} -+ (Color*) dodgerBlue {return [Color colorWithRed:30 Green:144 Blue:255 Alpha:255];} -+ (Color*) firebrick {return [Color colorWithRed:178 Green:34 Blue:34 Alpha:255];} -+ (Color*) floralWhite {return [Color colorWithRed:255 Green:250 Blue:240 Alpha:255];} -+ (Color*) forestGreen {return [Color colorWithRed:34 Green:139 Blue:34 Alpha:255];} -+ (Color*) fuchsia {return [Color colorWithRed:255 Green:0 Blue:255 Alpha:255];} -+ (Color*) gainsboro {return [Color colorWithRed:220 Green:220 Blue:220 Alpha:255];} -+ (Color*) ghostWhite {return [Color colorWithRed:248 Green:248 Blue:255 Alpha:255];} -+ (Color*) gold {return [Color colorWithRed:255 Green:215 Blue:0 Alpha:255];} -+ (Color*) goldenrod {return [Color colorWithRed:218 Green:165 Blue:32 Alpha:255];} -+ (Color*) gray {return [Color colorWithRed:128 Green:128 Blue:128 Alpha:255];} -+ (Color*) green {return [Color colorWithRed:0 Green:128 Blue:0 Alpha:255];} -+ (Color*) greenYellow {return [Color colorWithRed:173 Green:255 Blue:47 Alpha:255];} -+ (Color*) honeydew {return [Color colorWithRed:240 Green:255 Blue:240 Alpha:255];} -+ (Color*) hotPink {return [Color colorWithRed:255 Green:105 Blue:180 Alpha:255];} -+ (Color*) indianRed {return [Color colorWithRed:205 Green:92 Blue:92 Alpha:255];} -+ (Color*) indigo {return [Color colorWithRed:75 Green:0 Blue:130 Alpha:255];} -+ (Color*) ivory {return [Color colorWithRed:255 Green:255 Blue:240 Alpha:255];} -+ (Color*) khaki {return [Color colorWithRed:240 Green:230 Blue:140 Alpha:255];} -+ (Color*) lavender {return [Color colorWithRed:230 Green:230 Blue:250 Alpha:255];} -+ (Color*) lavenderBlush {return [Color colorWithRed:255 Green:240 Blue:245 Alpha:255];} -+ (Color*) lawnGreen {return [Color colorWithRed:124 Green:252 Blue:0 Alpha:255];} -+ (Color*) lemonChiffon {return [Color colorWithRed:255 Green:250 Blue:205 Alpha:255];} -+ (Color*) lightBlue {return [Color colorWithRed:173 Green:216 Blue:230 Alpha:255];} -+ (Color*) lightCoral {return [Color colorWithRed:240 Green:128 Blue:128 Alpha:255];} -+ (Color*) lightCyan {return [Color colorWithRed:224 Green:255 Blue:255 Alpha:255];} -+ (Color*) lightGoldenrodYellow {return [Color colorWithRed:250 Green:250 Blue:210 Alpha:255];} -+ (Color*) lightGray {return [Color colorWithRed:211 Green:211 Blue:211 Alpha:255];} -+ (Color*) lightGreen {return [Color colorWithRed:144 Green:238 Blue:144 Alpha:255];} -+ (Color*) lightPink {return [Color colorWithRed:255 Green:182 Blue:193 Alpha:255];} -+ (Color*) lightSalmon {return [Color colorWithRed:255 Green:160 Blue:122 Alpha:255];} -+ (Color*) lightSeaGreen {return [Color colorWithRed:32 Green:178 Blue:170 Alpha:255];} -+ (Color*) lightSkyBlue {return [Color colorWithRed:135 Green:206 Blue:250 Alpha:255];} -+ (Color*) lightSlateGray {return [Color colorWithRed:119 Green:136 Blue:153 Alpha:255];} -+ (Color*) lightSteelBlue {return [Color colorWithRed:176 Green:196 Blue:222 Alpha:255];} -+ (Color*) lightYellow {return [Color colorWithRed:255 Green:255 Blue:224 Alpha:255];} -+ (Color*) lime {return [Color colorWithRed:0 Green:255 Blue:0 Alpha:255];} -+ (Color*) limeGreen {return [Color colorWithRed:50 Green:205 Blue:50 Alpha:255];} -+ (Color*) linen {return [Color colorWithRed:250 Green:240 Blue:230 Alpha:255];} -+ (Color*) magenta {return [Color colorWithRed:255 Green:0 Blue:255 Alpha:255];} -+ (Color*) maroon {return [Color colorWithRed:128 Green:0 Blue:0 Alpha:255];} -+ (Color*) mediumAquamarine {return [Color colorWithRed:102 Green:205 Blue:170 Alpha:255];} -+ (Color*) mediumBlue {return [Color colorWithRed:0 Green:0 Blue:205 Alpha:255];} -+ (Color*) mediumOrchid {return [Color colorWithRed:186 Green:85 Blue:211 Alpha:255];} -+ (Color*) mediumPurple {return [Color colorWithRed:147 Green:112 Blue:219 Alpha:255];} -+ (Color*) mediumSeaGreen {return [Color colorWithRed:60 Green:179 Blue:113 Alpha:255];} -+ (Color*) mediumSlateBlue {return [Color colorWithRed:123 Green:104 Blue:238 Alpha:255];} -+ (Color*) mediumSpringGreen {return [Color colorWithRed:0 Green:250 Blue:154 Alpha:255];} -+ (Color*) mediumTurquoise {return [Color colorWithRed:72 Green:209 Blue:204 Alpha:255];} -+ (Color*) mediumVioletRed {return [Color colorWithRed:199 Green:21 Blue:133 Alpha:255];} -+ (Color*) midnightBlue {return [Color colorWithRed:25 Green:25 Blue:112 Alpha:255];} -+ (Color*) mintCream {return [Color colorWithRed:245 Green:255 Blue:250 Alpha:255];} -+ (Color*) mistyRose {return [Color colorWithRed:255 Green:228 Blue:225 Alpha:255];} -+ (Color*) moccasin {return [Color colorWithRed:255 Green:228 Blue:181 Alpha:255];} -+ (Color*) navajoWhite {return [Color colorWithRed:255 Green:222 Blue:173 Alpha:255];} -+ (Color*) navy {return [Color colorWithRed:0 Green:0 Blue:128 Alpha:255];} -+ (Color*) oldLace {return [Color colorWithRed:253 Green:245 Blue:230 Alpha:255];} -+ (Color*) olive {return [Color colorWithRed:128 Green:128 Blue:0 Alpha:255];} -+ (Color*) oliveDrab {return [Color colorWithRed:107 Green:142 Blue:35 Alpha:255];} -+ (Color*) orange {return [Color colorWithRed:255 Green:165 Blue:0 Alpha:255];} -+ (Color*) orangeRed {return [Color colorWithRed:255 Green:69 Blue:0 Alpha:255];} -+ (Color*) orchid {return [Color colorWithRed:218 Green:112 Blue:214 Alpha:255];} -+ (Color*) paleGoldenrod {return [Color colorWithRed:238 Green:232 Blue:170 Alpha:255];} -+ (Color*) paleGreen {return [Color colorWithRed:152 Green:251 Blue:152 Alpha:255];} -+ (Color*) paleTurquoise {return [Color colorWithRed:175 Green:238 Blue:238 Alpha:255];} -+ (Color*) paleVioletRed {return [Color colorWithRed:219 Green:112 Blue:147 Alpha:255];} -+ (Color*) papayaWhip {return [Color colorWithRed:255 Green:239 Blue:213 Alpha:255];} -+ (Color*) peachPuff {return [Color colorWithRed:255 Green:218 Blue:185 Alpha:255];} -+ (Color*) peru {return [Color colorWithRed:205 Green:133 Blue:63 Alpha:255];} -+ (Color*) pink {return [Color colorWithRed:255 Green:192 Blue:203 Alpha:255];} -+ (Color*) plum {return [Color colorWithRed:221 Green:160 Blue:221 Alpha:255];} -+ (Color*) powderBlue {return [Color colorWithRed:176 Green:224 Blue:230 Alpha:255];} -+ (Color*) purple {return [Color colorWithRed:128 Green:0 Blue:128 Alpha:255];} -+ (Color*) red {return [Color colorWithRed:255 Green:0 Blue:0 Alpha:255];} -+ (Color*) rosyBrown {return [Color colorWithRed:188 Green:143 Blue:143 Alpha:255];} -+ (Color*) royalBlue {return [Color colorWithRed:65 Green:105 Blue:225 Alpha:255];} -+ (Color*) saddleBrown {return [Color colorWithRed:139 Green:69 Blue:19 Alpha:255];} -+ (Color*) salmon {return [Color colorWithRed:250 Green:128 Blue:114 Alpha:255];} -+ (Color*) sandyBrown {return [Color colorWithRed:244 Green:164 Blue:96 Alpha:255];} -+ (Color*) seaGreen {return [Color colorWithRed:46 Green:139 Blue:87 Alpha:255];} -+ (Color*) seaShell {return [Color colorWithRed:255 Green:245 Blue:238 Alpha:255];} -+ (Color*) sienna {return [Color colorWithRed:160 Green:82 Blue:45 Alpha:255];} -+ (Color*) silver {return [Color colorWithRed:192 Green:192 Blue:192 Alpha:255];} -+ (Color*) skyBlue {return [Color colorWithRed:135 Green:206 Blue:235 Alpha:255];} -+ (Color*) slateBlue {return [Color colorWithRed:106 Green:90 Blue:205 Alpha:255];} -+ (Color*) slateGray {return [Color colorWithRed:112 Green:128 Blue:144 Alpha:255];} -+ (Color*) snow {return [Color colorWithRed:255 Green:250 Blue:250 Alpha:255];} -+ (Color*) springGreen {return [Color colorWithRed:0 Green:255 Blue:127 Alpha:255];} -+ (Color*) steelBlue {return [Color colorWithRed:70 Green:130 Blue:180 Alpha:255];} -+ (Color*) tan {return [Color colorWithRed:210 Green:180 Blue:140 Alpha:255];} -+ (Color*) teal {return [Color colorWithRed:0 Green:128 Blue:128 Alpha:255];} -+ (Color*) thistle {return [Color colorWithRed:216 Green:191 Blue:216 Alpha:255];} -+ (Color*) tomato {return [Color colorWithRed:255 Green:99 Blue:71 Alpha:255];} -+ (Color*) transparent {return [Color colorWithRed:0 Green:0 Blue:0 Alpha:0];} -+ (Color*) turquoise {return [Color colorWithRed:64 Green:224 Blue:208 Alpha:255];} -+ (Color*) violet {return [Color colorWithRed:238 Green:130 Blue:238 Alpha:255];} -+ (Color*) wheat {return [Color colorWithRed:245 Green:222 Blue:179 Alpha:255];} -+ (Color*) white {return [Color colorWithRed:255 Green:255 Blue:255 Alpha:255];} -+ (Color*) whiteSmoke {return [Color colorWithRed:245 Green:245 Blue:245 Alpha:255];} -+ (Color*) yellow {return [Color colorWithRed:255 Green:255 Blue:0 Alpha:255];} -+ (Color*) yellowGreen {return [Color colorWithRed:154 Green:205 Blue:50 Alpha:255];} ++ (Color*) aliceBlue {return [Color colorWithRed:240 green:248 blue:255 alpha:255];} ++ (Color*) antiqueWhite {return [Color colorWithRed:250 green:235 blue:215 alpha:255];} ++ (Color*) aqua {return [Color colorWithRed:0 green:255 blue:255 alpha:255];} ++ (Color*) aquamarine {return [Color colorWithRed:127 green:255 blue:212 alpha:255];} ++ (Color*) azure {return [Color colorWithRed:240 green:255 blue:255 alpha:255];} ++ (Color*) beige {return [Color colorWithRed:245 green:245 blue:220 alpha:255];} ++ (Color*) bisque {return [Color colorWithRed:255 green:228 blue:196 alpha:255];} ++ (Color*) black {return [Color colorWithRed:0 green:0 blue:0 alpha:255];} ++ (Color*) blanchedAlmond {return [Color colorWithRed:255 green:235 blue:205 alpha:255];} ++ (Color*) blue {return [Color colorWithRed:0 green:0 blue:255 alpha:255];} ++ (Color*) blueViolet {return [Color colorWithRed:138 green:43 blue:226 alpha:255];} ++ (Color*) brown {return [Color colorWithRed:165 green:42 blue:42 alpha:255];} ++ (Color*) burlyWood {return [Color colorWithRed:222 green:184 blue:135 alpha:255];} ++ (Color*) cadetBlue {return [Color colorWithRed:95 green:158 blue:160 alpha:255];} ++ (Color*) chartreuse {return [Color colorWithRed:127 green:255 blue:0 alpha:255];} ++ (Color*) chocolate {return [Color colorWithRed:210 green:105 blue:30 alpha:255];} ++ (Color*) coral {return [Color colorWithRed:255 green:127 blue:80 alpha:255];} ++ (Color*) cornflowerBlue {return [Color colorWithRed:100 green:149 blue:237 alpha:255];} ++ (Color*) cornsilk {return [Color colorWithRed:255 green:248 blue:220 alpha:255];} ++ (Color*) crimson {return [Color colorWithRed:220 green:20 blue:60 alpha:255];} ++ (Color*) cyan {return [Color colorWithRed:0 green:255 blue:255 alpha:255];} ++ (Color*) darkBlue {return [Color colorWithRed:0 green:0 blue:139 alpha:255];} ++ (Color*) darkCyan {return [Color colorWithRed:0 green:139 blue:139 alpha:255];} ++ (Color*) darkGoldenrod {return [Color colorWithRed:184 green:134 blue:11 alpha:255];} ++ (Color*) darkGray {return [Color colorWithRed:169 green:169 blue:169 alpha:255];} ++ (Color*) darkGreen {return [Color colorWithRed:0 green:100 blue:0 alpha:255];} ++ (Color*) darkKhaki {return [Color colorWithRed:189 green:183 blue:107 alpha:255];} ++ (Color*) darkMagenta {return [Color colorWithRed:139 green:0 blue:139 alpha:255];} ++ (Color*) darkOliveGreen {return [Color colorWithRed:85 green:107 blue:47 alpha:255];} ++ (Color*) darkOrange {return [Color colorWithRed:255 green:140 blue:0 alpha:255];} ++ (Color*) darkOrchid {return [Color colorWithRed:153 green:50 blue:204 alpha:255];} ++ (Color*) darkRed {return [Color colorWithRed:139 green:0 blue:0 alpha:255];} ++ (Color*) darkSalmon {return [Color colorWithRed:233 green:150 blue:122 alpha:255];} ++ (Color*) darkSeaGreen {return [Color colorWithRed:143 green:188 blue:139 alpha:255];} ++ (Color*) darkSlateBlue {return [Color colorWithRed:72 green:61 blue:139 alpha:255];} ++ (Color*) darkSlateGray {return [Color colorWithRed:47 green:79 blue:79 alpha:255];} ++ (Color*) darkTurquoise {return [Color colorWithRed:0 green:206 blue:209 alpha:255];} ++ (Color*) darkViolet {return [Color colorWithRed:148 green:0 blue:211 alpha:255];} ++ (Color*) deepPink {return [Color colorWithRed:255 green:20 blue:147 alpha:255];} ++ (Color*) deepSkyBlue {return [Color colorWithRed:0 green:191 blue:255 alpha:255];} ++ (Color*) dimGray {return [Color colorWithRed:105 green:105 blue:105 alpha:255];} ++ (Color*) dodgerBlue {return [Color colorWithRed:30 green:144 blue:255 alpha:255];} ++ (Color*) firebrick {return [Color colorWithRed:178 green:34 blue:34 alpha:255];} ++ (Color*) floralWhite {return [Color colorWithRed:255 green:250 blue:240 alpha:255];} ++ (Color*) forestGreen {return [Color colorWithRed:34 green:139 blue:34 alpha:255];} ++ (Color*) fuchsia {return [Color colorWithRed:255 green:0 blue:255 alpha:255];} ++ (Color*) gainsboro {return [Color colorWithRed:220 green:220 blue:220 alpha:255];} ++ (Color*) ghostWhite {return [Color colorWithRed:248 green:248 blue:255 alpha:255];} ++ (Color*) gold {return [Color colorWithRed:255 green:215 blue:0 alpha:255];} ++ (Color*) goldenrod {return [Color colorWithRed:218 green:165 blue:32 alpha:255];} ++ (Color*) gray {return [Color colorWithRed:128 green:128 blue:128 alpha:255];} ++ (Color*) green {return [Color colorWithRed:0 green:128 blue:0 alpha:255];} ++ (Color*) greenYellow {return [Color colorWithRed:173 green:255 blue:47 alpha:255];} ++ (Color*) honeydew {return [Color colorWithRed:240 green:255 blue:240 alpha:255];} ++ (Color*) hotPink {return [Color colorWithRed:255 green:105 blue:180 alpha:255];} ++ (Color*) indianRed {return [Color colorWithRed:205 green:92 blue:92 alpha:255];} ++ (Color*) indigo {return [Color colorWithRed:75 green:0 blue:130 alpha:255];} ++ (Color*) ivory {return [Color colorWithRed:255 green:255 blue:240 alpha:255];} ++ (Color*) khaki {return [Color colorWithRed:240 green:230 blue:140 alpha:255];} ++ (Color*) lavender {return [Color colorWithRed:230 green:230 blue:250 alpha:255];} ++ (Color*) lavenderBlush {return [Color colorWithRed:255 green:240 blue:245 alpha:255];} ++ (Color*) lawnGreen {return [Color colorWithRed:124 green:252 blue:0 alpha:255];} ++ (Color*) lemonChiffon {return [Color colorWithRed:255 green:250 blue:205 alpha:255];} ++ (Color*) lightBlue {return [Color colorWithRed:173 green:216 blue:230 alpha:255];} ++ (Color*) lightCoral {return [Color colorWithRed:240 green:128 blue:128 alpha:255];} ++ (Color*) lightCyan {return [Color colorWithRed:224 green:255 blue:255 alpha:255];} ++ (Color*) lightGoldenrodYellow {return [Color colorWithRed:250 green:250 blue:210 alpha:255];} ++ (Color*) lightGray {return [Color colorWithRed:211 green:211 blue:211 alpha:255];} ++ (Color*) lightGreen {return [Color colorWithRed:144 green:238 blue:144 alpha:255];} ++ (Color*) lightPink {return [Color colorWithRed:255 green:182 blue:193 alpha:255];} ++ (Color*) lightSalmon {return [Color colorWithRed:255 green:160 blue:122 alpha:255];} ++ (Color*) lightSeaGreen {return [Color colorWithRed:32 green:178 blue:170 alpha:255];} ++ (Color*) lightSkyBlue {return [Color colorWithRed:135 green:206 blue:250 alpha:255];} ++ (Color*) lightSlateGray {return [Color colorWithRed:119 green:136 blue:153 alpha:255];} ++ (Color*) lightSteelBlue {return [Color colorWithRed:176 green:196 blue:222 alpha:255];} ++ (Color*) lightYellow {return [Color colorWithRed:255 green:255 blue:224 alpha:255];} ++ (Color*) lime {return [Color colorWithRed:0 green:255 blue:0 alpha:255];} ++ (Color*) limeGreen {return [Color colorWithRed:50 green:205 blue:50 alpha:255];} ++ (Color*) linen {return [Color colorWithRed:250 green:240 blue:230 alpha:255];} ++ (Color*) magenta {return [Color colorWithRed:255 green:0 blue:255 alpha:255];} ++ (Color*) maroon {return [Color colorWithRed:128 green:0 blue:0 alpha:255];} ++ (Color*) mediumAquamarine {return [Color colorWithRed:102 green:205 blue:170 alpha:255];} ++ (Color*) mediumBlue {return [Color colorWithRed:0 green:0 blue:205 alpha:255];} ++ (Color*) mediumOrchid {return [Color colorWithRed:186 green:85 blue:211 alpha:255];} ++ (Color*) mediumPurple {return [Color colorWithRed:147 green:112 blue:219 alpha:255];} ++ (Color*) mediumSeaGreen {return [Color colorWithRed:60 green:179 blue:113 alpha:255];} ++ (Color*) mediumSlateBlue {return [Color colorWithRed:123 green:104 blue:238 alpha:255];} ++ (Color*) mediumSpringGreen {return [Color colorWithRed:0 green:250 blue:154 alpha:255];} ++ (Color*) mediumTurquoise {return [Color colorWithRed:72 green:209 blue:204 alpha:255];} ++ (Color*) mediumVioletRed {return [Color colorWithRed:199 green:21 blue:133 alpha:255];} ++ (Color*) midnightBlue {return [Color colorWithRed:25 green:25 blue:112 alpha:255];} ++ (Color*) mintCream {return [Color colorWithRed:245 green:255 blue:250 alpha:255];} ++ (Color*) mistyRose {return [Color colorWithRed:255 green:228 blue:225 alpha:255];} ++ (Color*) moccasin {return [Color colorWithRed:255 green:228 blue:181 alpha:255];} ++ (Color*) navajoWhite {return [Color colorWithRed:255 green:222 blue:173 alpha:255];} ++ (Color*) navy {return [Color colorWithRed:0 green:0 blue:128 alpha:255];} ++ (Color*) oldLace {return [Color colorWithRed:253 green:245 blue:230 alpha:255];} ++ (Color*) olive {return [Color colorWithRed:128 green:128 blue:0 alpha:255];} ++ (Color*) oliveDrab {return [Color colorWithRed:107 green:142 blue:35 alpha:255];} ++ (Color*) orange {return [Color colorWithRed:255 green:165 blue:0 alpha:255];} ++ (Color*) orangeRed {return [Color colorWithRed:255 green:69 blue:0 alpha:255];} ++ (Color*) orchid {return [Color colorWithRed:218 green:112 blue:214 alpha:255];} ++ (Color*) paleGoldenrod {return [Color colorWithRed:238 green:232 blue:170 alpha:255];} ++ (Color*) paleGreen {return [Color colorWithRed:152 green:251 blue:152 alpha:255];} ++ (Color*) paleTurquoise {return [Color colorWithRed:175 green:238 blue:238 alpha:255];} ++ (Color*) paleVioletRed {return [Color colorWithRed:219 green:112 blue:147 alpha:255];} ++ (Color*) papayaWhip {return [Color colorWithRed:255 green:239 blue:213 alpha:255];} ++ (Color*) peachPuff {return [Color colorWithRed:255 green:218 blue:185 alpha:255];} ++ (Color*) peru {return [Color colorWithRed:205 green:133 blue:63 alpha:255];} ++ (Color*) pink {return [Color colorWithRed:255 green:192 blue:203 alpha:255];} ++ (Color*) plum {return [Color colorWithRed:221 green:160 blue:221 alpha:255];} ++ (Color*) powderBlue {return [Color colorWithRed:176 green:224 blue:230 alpha:255];} ++ (Color*) purple {return [Color colorWithRed:128 green:0 blue:128 alpha:255];} ++ (Color*) red {return [Color colorWithRed:255 green:0 blue:0 alpha:255];} ++ (Color*) rosyBrown {return [Color colorWithRed:188 green:143 blue:143 alpha:255];} ++ (Color*) royalBlue {return [Color colorWithRed:65 green:105 blue:225 alpha:255];} ++ (Color*) saddleBrown {return [Color colorWithRed:139 green:69 blue:19 alpha:255];} ++ (Color*) salmon {return [Color colorWithRed:250 green:128 blue:114 alpha:255];} ++ (Color*) sandyBrown {return [Color colorWithRed:244 green:164 blue:96 alpha:255];} ++ (Color*) seaGreen {return [Color colorWithRed:46 green:139 blue:87 alpha:255];} ++ (Color*) seaShell {return [Color colorWithRed:255 green:245 blue:238 alpha:255];} ++ (Color*) sienna {return [Color colorWithRed:160 green:82 blue:45 alpha:255];} ++ (Color*) silver {return [Color colorWithRed:192 green:192 blue:192 alpha:255];} ++ (Color*) skyBlue {return [Color colorWithRed:135 green:206 blue:235 alpha:255];} ++ (Color*) slateBlue {return [Color colorWithRed:106 green:90 blue:205 alpha:255];} ++ (Color*) slateGray {return [Color colorWithRed:112 green:128 blue:144 alpha:255];} ++ (Color*) snow {return [Color colorWithRed:255 green:250 blue:250 alpha:255];} ++ (Color*) springGreen {return [Color colorWithRed:0 green:255 blue:127 alpha:255];} ++ (Color*) steelBlue {return [Color colorWithRed:70 green:130 blue:180 alpha:255];} ++ (Color*) tan {return [Color colorWithRed:210 green:180 blue:140 alpha:255];} ++ (Color*) teal {return [Color colorWithRed:0 green:128 blue:128 alpha:255];} ++ (Color*) thistle {return [Color colorWithRed:216 green:191 blue:216 alpha:255];} ++ (Color*) tomato {return [Color colorWithRed:255 green:99 blue:71 alpha:255];} ++ (Color*) transparent {return [Color colorWithRed:0 green:0 blue:0 alpha:0];} ++ (Color*) turquoise {return [Color colorWithRed:64 green:224 blue:208 alpha:255];} ++ (Color*) violet {return [Color colorWithRed:238 green:130 blue:238 alpha:255];} ++ (Color*) wheat {return [Color colorWithRed:245 green:222 blue:179 alpha:255];} ++ (Color*) white {return [Color colorWithRed:255 green:255 blue:255 alpha:255];} ++ (Color*) whiteSmoke {return [Color colorWithRed:245 green:245 blue:245 alpha:255];} ++ (Color*) yellow {return [Color colorWithRed:255 green:255 blue:0 alpha:255];} ++ (Color*) yellowGreen {return [Color colorWithRed:154 green:205 blue:50 alpha:255];} @end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BitmapContent.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BitmapContent.h index c12b101..81cc899 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BitmapContent.h +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BitmapContent.h @@ -17,7 +17,7 @@ int height; } -- (id) initWithWidth:(int)theWidth Height:(int)theHeight; +- (id) initWithWidth:(int)theWidth height:(int)theHeight; @property (nonatomic) int width; @property (nonatomic) int height; diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BitmapContent.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BitmapContent.m index 61bf5ca..c7379fb 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BitmapContent.m +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/BitmapContent.m @@ -11,7 +11,7 @@ @implementation BitmapContent -- (id) initWithWidth:(int)theWidth Height:(int)theHeight { +- (id) initWithWidth:(int)theWidth height:(int)theHeight { if (self = [super init]) { width = theWidth; height = theHeight; diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/ColorPixelBitmapContent.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/ColorPixelBitmapContent.h index b6a893a..020992d 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/ColorPixelBitmapContent.h +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/ColorPixelBitmapContent.h @@ -18,7 +18,7 @@ - (Byte4*) getPixelData; - (void) setPixelData:(Byte4*)sourceData; -- (Byte4) getPixelAtX:(int)x Y:(int)y; -- (void) setPixelAtX:(int)x Y:(int)y Value:(Byte4)value; +- (Byte4) getPixelAtX:(int)x y:(int)y; +- (void) setPixelAtX:(int)x y:(int)y value:(Byte4)value; @end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/ColorPixelBitmapContent.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/ColorPixelBitmapContent.m index 302c151..0d34f6c 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/ColorPixelBitmapContent.m +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/ColorPixelBitmapContent.m @@ -12,7 +12,7 @@ @implementation ColorPixelBitmapContent - (id) initWithWidth:(int)theWidth Height:(int)theHeight { - if (self = [super initWithWidth:theWidth Height:theHeight Format:SurfaceFormatColor]) { + if (self = [super initWithWidth:theWidth height:theHeight format:SurfaceFormatColor]) { } return self; } @@ -26,11 +26,11 @@ [super setPixelData:sourceData]; } -- (Byte4) getPixelAtX:(int)x Y:(int)y { +- (Byte4) getPixelAtX:(int)x y:(int)y { return colorPixelData[x + y * width]; } -- (void) setPixelAtX:(int)x Y:(int)y Value:(Byte4)value { +- (void) setPixelAtX:(int)x y:(int)y value:(Byte4)value { colorPixelData[x + y * width] = value; } diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PixelBitmapContent.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PixelBitmapContent.h index 020dd91..582225e 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PixelBitmapContent.h +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PixelBitmapContent.h @@ -16,7 +16,7 @@ int bytesPerPixel; } -- (id) initWithWidth:(int)theWidth Height:(int)theHeight Format:(SurfaceFormat)theFormat; +- (id) initWithWidth:(int)theWidth height:(int)theHeight format:(SurfaceFormat)theFormat; - (Byte*) getPixelAtX:(int)x Y:(int)y; - (void) setPixelAtX:(int)x Y:(int)y Value:(Byte*)value; diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PixelBitmapContent.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PixelBitmapContent.m index f07347b..82f128b 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PixelBitmapContent.m +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/PixelBitmapContent.m @@ -12,10 +12,10 @@ @implementation PixelBitmapContent -- (id) initWithWidth:(int)theWidth Height:(int)theHeight Format:(SurfaceFormat)theFormat { - if (self = [super initWithWidth:theWidth Height:theHeight]) { +- (id) initWithWidth:(int)theWidth height:(int)theHeight format:(SurfaceFormat)theFormat { + if (self = [super initWithWidth:theWidth height:theHeight]) { format = theFormat; - BOOL result = [VectorConverter tryGetSizeInBytesOfSurfaceFormat:format SizeInBytes:&bytesPerPixel]; + BOOL result = [VectorConverter tryGetSizeInBytesOfSurfaceFormat:format sizeInBytes:&bytesPerPixel]; if (!result) { [NSException raise:@"ArgumentException" format:@"The provided format is not supported"]; } diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VectorConverter.h b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VectorConverter.h index 082ac79..83cca08 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VectorConverter.h +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VectorConverter.h @@ -15,8 +15,8 @@ } -+ (BOOL) tryGetSizeInBytesOfSurfaceFormat:(SurfaceFormat)surfaceFormat SizeInBytes:(int*)sizeInBytes; ++ (BOOL) tryGetSizeInBytesOfSurfaceFormat:(SurfaceFormat)surfaceFormat sizeInBytes:(int*)sizeInBytes; -+ (BOOL) tryGetVectorTypeOfSurfaceFormat:(SurfaceFormat)surfaceFormat VectorType:(Class*)type; ++ (BOOL) tryGetVectorTypeOfSurfaceFormat:(SurfaceFormat)surfaceFormat vectorType:(Class*)type; @end diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VectorConverter.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VectorConverter.m index 206b535..5360403 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VectorConverter.m +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/Graphics/VectorConverter.m @@ -13,7 +13,7 @@ @implementation VectorConverter -+ (BOOL) tryGetSizeInBytesOfSurfaceFormat:(SurfaceFormat)surfaceFormat SizeInBytes:(int*)sizeInBytes { ++ (BOOL) tryGetSizeInBytesOfSurfaceFormat:(SurfaceFormat)surfaceFormat sizeInBytes:(int*)sizeInBytes { switch (surfaceFormat) { case SurfaceFormatColor: *sizeInBytes = sizeof(Byte4); @@ -37,7 +37,7 @@ return NO; } -+ (BOOL) tryGetVectorTypeOfSurfaceFormat:(SurfaceFormat)surfaceFormat VectorType:(Class*)type { ++ (BOOL) tryGetVectorTypeOfSurfaceFormat:(SurfaceFormat)surfaceFormat vectorType:(Class*)type { switch (surfaceFormat) { case SurfaceFormatColor: *type = [Vector4 class]; diff --git a/Classes/Retronator/Xni/Framework/Content/Pipeline/TextureImporter.m b/Classes/Retronator/Xni/Framework/Content/Pipeline/TextureImporter.m index 7d358a6..a9c7e5b 100644 --- a/Classes/Retronator/Xni/Framework/Content/Pipeline/TextureImporter.m +++ b/Classes/Retronator/Xni/Framework/Content/Pipeline/TextureImporter.m @@ -39,7 +39,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]; [bitmap setPixelData:imageData]; // This bitmap is the only one in the mipmap chain. diff --git a/Classes/Retronator/Xni/Framework/Content/Texture2DContentTypeReader.m b/Classes/Retronator/Xni/Framework/Content/Texture2DContentTypeReader.m index 8adbb82..b994eb6 100644 --- a/Classes/Retronator/Xni/Framework/Content/Texture2DContentTypeReader.m +++ b/Classes/Retronator/Xni/Framework/Content/Texture2DContentTypeReader.m @@ -25,14 +25,14 @@ [bitmap tryGetFormat:&format]; Texture2D *texture = [[Texture2D alloc] initWithGraphicsDevice:graphicsDevice - Width:bitmap.width - Height:bitmap.height - MipMaps:generateMipmaps - Format:format]; + width:bitmap.width + height:bitmap.height + mipMaps:generateMipmaps + format:format]; for (int i=0;i<[mipmaps count];i++) { bitmap = [mipmaps objectAtIndex:i]; - [texture setDataToLevel:i SourceRectangle:nil From:[bitmap getPixelData]]; + [texture setDataToLevel:i sourceRectangle:nil from:[bitmap getPixelData]]; } return texture; diff --git a/Classes/Retronator/Xni/Framework/Game.m b/Classes/Retronator/Xni/Framework/Game.m index 6d16b77..01dbc84 100644 --- a/Classes/Retronator/Xni/Framework/Game.m +++ b/Classes/Retronator/Xni/Framework/Game.m @@ -32,7 +32,7 @@ targetElapsedTime = 1.0 / 60.0; inactiveSleepTime = 1.0 / 5.0; maximumElapsedTime = 1.0 / 2.0; - + // Get the game host. gameHost = (GameHost*)[UIApplication sharedApplication]; } diff --git a/Classes/Retronator/Xni/Framework/Graphics/BasicEffect.h b/Classes/Retronator/Xni/Framework/Graphics/BasicEffect.h new file mode 100644 index 0000000..3363518 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/BasicEffect.h @@ -0,0 +1,72 @@ +// +// BasicEffect.h +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Effect.h" + +@interface BasicEffect : Effect { + // Material + float alpha; + Vector3 *ambientColor; + Vector3 *diffuseColor; + Vector3 *emissiveColor; + Vector3 *specularColor; + float specularPower; + BOOL vertexColorEnabled; + + // Texturing + BOOL textureEnabled; + Texture2D *texture; + + // Lighting + BOOL lightingEnabled; + Vector3 *ambientLightColor; + DirectionalLight *directionalLight0; + DirectionalLight *directionalLight1; + DirectionalLight *directionalLight2; + + // Fog + BOOL fogEnabled; + Vector3 *fogColor; + float fogStart; + float fogEnd; + + // Transformations + Matrix *projection; + Matrix *view; + Matrix *world; +} + +@property (nonatomic) float alpha; +@property (nonatomic, retain) Vector3 *ambientColor; +@property (nonatomic, retain) Vector3 *diffuseColor; +@property (nonatomic, retain) Vector3 *emissiveColor; +@property (nonatomic, retain) Vector3 *specularColor; +@property (nonatomic) float specularPower; +@property (nonatomic) BOOL vertexColorEnabled; + +@property (nonatomic) BOOL textureEnabled; +@property (nonatomic, retain) Texture2D *texture; + +@property (nonatomic) BOOL lightingEnabled; +@property (nonatomic, retain) Vector3 *ambientLightColor; +@property (nonatomic, readonly) DirectionalLight *directionalLight0; +@property (nonatomic, readonly) DirectionalLight *directionalLight1; +@property (nonatomic, readonly) DirectionalLight *directionalLight2; + +@property (nonatomic) BOOL fogEnabled; +@property (nonatomic, retain) Vector3 *fogColor; +@property (nonatomic) float fogStart; +@property (nonatomic) float fogEnd; + +@property (nonatomic, retain) Matrix *projection; +@property (nonatomic, retain) Matrix *view; +@property (nonatomic, retain) Matrix *world; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/BasicEffect.m b/Classes/Retronator/Xni/Framework/Graphics/BasicEffect.m new file mode 100644 index 0000000..75dd534 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/BasicEffect.m @@ -0,0 +1,196 @@ +// +// BasicEffect.m +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "BasicEffect.h" + +#import "Retronator.Xni.Framework.h" +#import "Retronator.Xni.Framework.Graphics.h" + +@interface BasicEffectPass : EffectPass { + BasicEffect *basicEffect; +} + +- (id) initWithBasicEffect:(BasicEffect*)theBasicEffect; + +@end + +@implementation BasicEffect + +-(id) initWithGraphicsDevice:(GraphicsDevice *)theGraphicsDevice { + if (self = [super initWithGraphicsDevice:theGraphicsDevice]) { + // Create the main pass. + BasicEffectPass *mainPass = [[BasicEffectPass alloc] initWithBasicEffect:self]; + NSArray *passes = [NSArray arrayWithObject:mainPass]; + + // Create the basic technique. + EffectTechnique *basicTechnique = [[EffectTechnique alloc] initWithName:@"BasicEffect" passes:passes]; + + techniques = [NSDictionary dictionaryWithObject:basicTechnique forKey:basicTechnique.name]; + currentTechnique = basicTechnique; + + // Set defaults. + self.alpha = 1; + self.ambientColor = [Vector3 zero]; + self.diffuseColor = [Vector3 zero]; + self.emissiveColor = [Vector3 zero]; + self.specularColor = [Vector3 zero]; + self.specularPower = 0; + self.vertexColorEnabled = NO; + + self.textureEnabled = NO; + self.texture = nil; + + self.lightingEnabled = NO; + self.ambientLightColor = [Vector3 zero]; + directionalLight0 = [[DirectionalLight alloc] init]; + directionalLight1 = [[DirectionalLight alloc] init]; + directionalLight2 = [[DirectionalLight alloc] init]; + + self.fogEnabled = NO; + self.fogColor = [Vector3 zero]; + self.fogStart = 0; + self.fogEnd = 1; + + self.projection = [Matrix identity]; + self.view = [Matrix identity]; + self.world = [Matrix identity]; + } + return self; +} + +@synthesize alpha; +@synthesize ambientColor; +@synthesize diffuseColor; +@synthesize emissiveColor; +@synthesize specularColor; +@synthesize specularPower; +@synthesize vertexColorEnabled; + +@synthesize textureEnabled; +@synthesize texture; + +@synthesize lightingEnabled; +@synthesize ambientLightColor; +@synthesize directionalLight0; +@synthesize directionalLight1; +@synthesize directionalLight2; + +@synthesize fogEnabled; +@synthesize fogColor; +@synthesize fogStart; +@synthesize fogEnd; + +@synthesize projection; +@synthesize view; +@synthesize world; + +- (void) dealloc +{ + [directionalLight0 release]; + [directionalLight1 release]; + [directionalLight2 release]; + [super dealloc]; +} + +@end + + +@interface BasicEffectPass() + +- (void) activateLight:(DirectionalLight*) light name:(uint)name; + +@end + +@implementation BasicEffectPass + +- (id) initWithBasicEffect:(BasicEffect *)theBasicEffect { + if (self = [super initWithName:@"BasicEffectPass"]) { + basicEffect = theBasicEffect; + } + return self; +} + +- (void) apply { + // Set material. + Vector4Struct data; + Vector4Set(&data, basicEffect.ambientColor.x, basicEffect.ambientColor.y, basicEffect.ambientColor.z, basicEffect.alpha); + glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, (float*)&data); + + Vector4Set(&data, basicEffect.diffuseColor.x, basicEffect.diffuseColor.y, basicEffect.diffuseColor.z, basicEffect.alpha); + glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, (float*)&data); + + Vector4Set(&data, basicEffect.specularColor.x, basicEffect.specularColor.y, basicEffect.specularColor.z, 1); + glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, (float*)&data); + glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, basicEffect.specularPower); + + Vector4Set(&data, basicEffect.emissiveColor.x, basicEffect.emissiveColor.y, basicEffect.emissiveColor.z, 1); + glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, (float*)&data); + + if (basicEffect.vertexColorEnabled) { + glEnable(GL_COLOR_MATERIAL); + } else { + glDisable(GL_COLOR_MATERIAL); + } + + // Set texturing. + if (basicEffect.textureEnabled) { + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, basicEffect.texture.textureId); + } else { + glDisable(GL_TEXTURE_2D); + } + + // Set the projection matrix. + glMatrixMode(GL_PROJECTION); + glLoadMatrixf((float*)basicEffect.projection.data); + + // Set the model-view matrix. + glMatrixMode(GL_MODELVIEW); + // Multiply in reverse order, because our matrices assume vector transformation b = a * M, + // while openGL will tranform b = M * a. So v_projectionspace = M_modelview * v_modelspace, + // and our model-view matrix therefore should be view * world. + glLoadMatrixf((float*)basicEffect.view.data); + + // Set lighting now that we're in view coordinates. + if (basicEffect.lightingEnabled) { + glEnable(GL_LIGHTING); + } else { + glDisable(GL_LIGHTING); + } + Vector4Set(&data, basicEffect.ambientLightColor.x, basicEffect.ambientLightColor.y, basicEffect.ambientLightColor.z, 1); + glLightModelfv(GL_LIGHT_MODEL_AMBIENT, (float*)&data); + [self activateLight:basicEffect.directionalLight0 name:GL_LIGHT0]; + [self activateLight:basicEffect.directionalLight1 name:GL_LIGHT1]; + [self activateLight:basicEffect.directionalLight2 name:GL_LIGHT2]; + + // Finally add the world component of the model-view matrix. + glMultMatrixf((float*)basicEffect.world.data); +} + +- (void) activateLight:(DirectionalLight *)light name:(uint)lightName { + if (light.enabled) { + glEnable(lightName); + } else { + glDisable(lightName); + return; + } + + Vector4Struct data; + Vector4Set(&data, light.ambientColor.x, light.ambientColor.y, light.ambientColor.z, 1); + glLightfv(lightName, GL_AMBIENT, (float*)&data); + Vector4Set(&data, light.diffuseColor.x, light.diffuseColor.y, light.diffuseColor.z, 1); + glLightfv(lightName, GL_DIFFUSE, (float*)&data); + Vector4Set(&data, light.specularColor.x, light.specularColor.y, light.specularColor.z, 1); + glLightfv(lightName, GL_SPECULAR, (float*)&data); + Vector4Set(&data, light.direction.x, light.direction.y, light.direction.z, 0); + glLightfv(lightName, GL_POSITION, (float*)&data); +} + + + +@end \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Graphics/DirectionalLight.h b/Classes/Retronator/Xni/Framework/Graphics/DirectionalLight.h new file mode 100644 index 0000000..f076ed8 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/DirectionalLight.h @@ -0,0 +1,27 @@ +// +// DirectionalLight.h +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.classes.h" + +@interface DirectionalLight : NSObject { + Vector3 *ambientColor; + Vector3 *diffuseColor; + Vector3 *direction; + BOOL enabled; + Vector3 *specularColor; +} + +@property (nonatomic, retain) Vector3 *ambientColor; +@property (nonatomic, retain) Vector3 *diffuseColor; +@property (nonatomic, retain) Vector3 *direction; +@property (nonatomic) BOOL enabled; +@property (nonatomic, retain) Vector3 *specularColor; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/DirectionalLight.m b/Classes/Retronator/Xni/Framework/Graphics/DirectionalLight.m new file mode 100644 index 0000000..24cb2ca --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/DirectionalLight.m @@ -0,0 +1,33 @@ +// +// DirectionalLight.m +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "DirectionalLight.h" + +#import "Retronator.Xni.Framework.h" + +@implementation DirectionalLight + +- (id) init { + if (self = [super init]) { + self.enabled = NO; + self.ambientColor = [Vector3 zero]; + self.diffuseColor = [Vector3 zero]; + self.specularColor = [Vector3 zero]; + self.direction = [Vector3 zero]; + } + return self; +} + +@synthesize ambientColor; +@synthesize diffuseColor; +@synthesize direction; +@synthesize enabled; +@synthesize specularColor; + +@end + diff --git a/Classes/Retronator/Xni/Framework/Graphics/Effect.h b/Classes/Retronator/Xni/Framework/Graphics/Effect.h index fd2836e..74ca31b 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/Effect.h +++ b/Classes/Retronator/Xni/Framework/Graphics/Effect.h @@ -8,9 +8,14 @@ #import +#import "GraphicsResource.h" -@interface Effect : NSObject { - +@interface Effect : GraphicsResource { + EffectTechnique *currentTechnique; + NSDictionary *techniques; } -@end +@property (nonatomic, retain) EffectTechnique *currentTechnique; +@property (nonatomic, readonly) NSDictionary *techniques; + +@end \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Graphics/Effect.m b/Classes/Retronator/Xni/Framework/Graphics/Effect.m index 9127576..0f4cdb0 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/Effect.m +++ b/Classes/Retronator/Xni/Framework/Graphics/Effect.m @@ -11,4 +11,7 @@ @implementation Effect +@synthesize currentTechnique; +@synthesize techniques; + @end diff --git a/Classes/Retronator/Xni/Framework/Graphics/EffectPass.h b/Classes/Retronator/Xni/Framework/Graphics/EffectPass.h new file mode 100644 index 0000000..47571e8 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/EffectPass.h @@ -0,0 +1,22 @@ +// +// EffectPass.h +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + + +@interface EffectPass : NSObject { + NSString *name; +} + +- (id) initWithName:(NSString*)theName; + +@property (nonatomic, readonly) NSString *name; + +- (void) apply; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/EffectPass.m b/Classes/Retronator/Xni/Framework/Graphics/EffectPass.m new file mode 100644 index 0000000..6a6dd00 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/EffectPass.m @@ -0,0 +1,32 @@ +// +// EffectPass.m +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "EffectPass.h" + + +@implementation EffectPass + +-(id) initWithName:(NSString *)theName { + if (self = [super init]) { + name = [theName retain]; + } + return self; +} + +@synthesize name; + +- (void) apply {} + +- (void) dealloc +{ + [name release]; + [super dealloc]; +} + + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/EffectTechnique.h b/Classes/Retronator/Xni/Framework/Graphics/EffectTechnique.h new file mode 100644 index 0000000..3feb2a9 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/EffectTechnique.h @@ -0,0 +1,21 @@ +// +// EffectTechnique.h +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +@interface EffectTechnique : NSObject { + NSArray *passes; + NSString *name; +} + +- (id) initWithName:(NSString*)theName passes:(NSArray*)thePasses; + +@property (nonatomic, readonly) NSString *name; +@property (nonatomic, readonly) NSArray *passes; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/EffectTechnique.m b/Classes/Retronator/Xni/Framework/Graphics/EffectTechnique.m new file mode 100644 index 0000000..c102d57 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/EffectTechnique.m @@ -0,0 +1,31 @@ +// +// EffectTechnique.m +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "EffectTechnique.h" + +@implementation EffectTechnique + +-(id) initWithName:(NSString *)theName passes:(NSArray *)thePasses { + if (self = [super init]) { + name = [theName retain]; + passes = [thePasses retain]; + } + return self; +} + +@synthesize name; +@synthesize passes; + +- (void) dealloc +{ + [name release]; + [passes release]; + [super dealloc]; +} + +@end \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Graphics/Enums.h b/Classes/Retronator/Xni/Framework/Graphics/Enums.h index ba4b600..61f899d 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/Enums.h +++ b/Classes/Retronator/Xni/Framework/Graphics/Enums.h @@ -2,17 +2,17 @@ #import typedef enum { - BlendZero, - BlendOne, - BlendSourceColor, - BlendInverseSourceColor, - BlendSourceAlpha, - BlendInverseSourceAlpha, - BlendDestinationAlpha, - BlendInverseDestinationAlpha, - BlendDestinationColor, - BlendInverseDestinationColor, - BlendSourceAlphaSaturation, + BlendZero = GL_ZERO, + BlendOne = GL_ONE, + BlendSourceColor = GL_SRC_COLOR, + BlendInverseSourceColor = GL_ONE_MINUS_SRC_COLOR, + BlendSourceAlpha = GL_SRC_ALPHA, + BlendInverseSourceAlpha = GL_ONE_MINUS_SRC_ALPHA, + BlendDestinationAlpha = GL_DST_ALPHA, + BlendInverseDestinationAlpha = GL_ONE_MINUS_DST_ALPHA, + BlendDestinationColor = GL_DST_COLOR, + BlendInverseDestinationColor = GL_ONE_MINUS_DST_COLOR, + BlendSourceAlphaSaturation = GL_SRC_ALPHA_SATURATE, BlendBlendFactor, BlendInverseBlendFactor } Blend; diff --git a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.h b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.h index df7b05c..81a8e3d 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.h +++ b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.h @@ -24,12 +24,36 @@ // The OpenGL names for the buffers used to render to this view GLuint defaultFramebuffer, colorRenderbuffer, depthRenderbuffer; + + // Device state + Color *blendFactor; + BlendState *blendState; + DepthStencilState *depthStencilState; + GraphicsDeviceStatus graphicsDeviceStatus; + IndexBuffer *indices; + RasterizerState *rasterizerState; + int referenceStencil; + SamplerStateCollection *samplerStates; + TextureCollection *textures; + + NSMutableArray *vertices; } -@property (nonatomic, readonly) GraphicsProfile graphicsProfile; - - (id) initWithGame:(Game*) theGame; +@property (nonatomic, retain) Color *blendFactor; +@property (nonatomic, retain) BlendState *blendState; +@property (nonatomic, retain) DepthStencilState *depthStencilState; +@property (nonatomic, readonly) GraphicsDeviceStatus graphicsDeviceStatus; +@property (nonatomic, readonly) GraphicsProfile graphicsProfile; +@property (nonatomic, retain) IndexBuffer *indices; +@property (nonatomic, retain) RasterizerState *rasterizerState; +@property (nonatomic) int referenceStencil; +@property (nonatomic, readonly) SamplerStateCollection *samplerStates; +@property (nonatomic, readonly) TextureCollection *textures; + ++ (int) getNumberOfVerticesForPrimitiveType:(PrimitiveType)primitiveType primitiveCount:(int)primitiveCount; + // Presentation - (void) reset; - (void) present; @@ -38,6 +62,31 @@ - (void) clearWithColor:(Color*)color; - (void) clearWithOptions:(ClearOptions)options color:(Color*)color depth:(float)depth stencil:(int)stencil; +// Vertex buffers +- (NSArray*) getVertexBuffers; +- (void) setVertexBuffer:(VertexBuffer*)vertexBuffer; +- (void) setVertexBuffer:(VertexBuffer*)vertexBuffer vertexOffset:(int)vertexOffset; +- (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; + +- (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType vertices:(VertexArray*)vertexData + startingAt:(int)vertexOffset count:(int)primitiveCount; + +- (void) drawUserPrimitivesOfType:(PrimitiveType)primitiveType + vertices:(void*)vertexData ofType:(VertexDeclaration*) vertexDeclaration + startingAt:(int)vertexOffset count:(int)primitiveCount; + +- (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; + + // Low level methods - (uint) createTexture; diff --git a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m index b7763ba..be84233 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 #import "Retronator.Xni.Framework.h" #import "Retronator.Xni.Framework.Graphics.h" @@ -46,15 +47,82 @@ glGenRenderbuffersOES(1, &depthRenderbuffer); glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer); glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer); - + // Do the initial reset. [self reset]; + + // Initialize defaults. + self.blendFactor = [Color white]; + self.blendState = [BlendState opaque]; + self.depthStencilState = [DepthStencilState defaultDepth]; + graphicsDeviceStatus = GraphicsDeviceStatusNormal; + self.indices = nil; + self.rasterizerState = [RasterizerState cullClockwise]; + self.referenceStencil = 0; + samplerStates = [[SamplerStateCollection alloc] init]; + textures = [[TextureCollection alloc] init]; + [samplerStates insertObject:[SamplerState linearClamp] atIndex:0]; } return self; } +#define FLAG_BLOCK(variable, parameter) if (variable) { glEnable(parameter); } else { glDisable(parameter);} + +@synthesize blendFactor; +@synthesize blendState; +- (void) setBlendState:(BlendState*)value { + if (value != blendState) { + [value retain]; + [blendState release]; + blendState = value; + + // Apply the blend state. + glBlendFunc(blendState.colorSourceBlend, blendState.colorDestinationBlend); + } +} + +@synthesize depthStencilState; +- (void) depthStencilState:(DepthStencilState*)value { + if (value != depthStencilState) { + [value retain]; + [depthStencilState release]; + depthStencilState = value; + } +} + +@synthesize graphicsDeviceStatus; @synthesize graphicsProfile; +@synthesize indices; +@synthesize rasterizerState; +- (void) setRasterizerState:(RasterizerState*)value { + if (value != rasterizerState) { + [value retain]; + [rasterizerState release]; + rasterizerState = value; + } +} + +@synthesize referenceStencil; +@synthesize samplerStates; +@synthesize textures; + ++ (int) getNumberOfVerticesForPrimitiveType:(PrimitiveType)primitiveType primitiveCount:(int)primitiveCount { + switch (primitiveType) { + case PrimitiveTypeLineStrip: + return primitiveCount + 1; + case PrimitiveTypeLineList: + return 2 * primitiveCount; + case PrimitiveTypeTriangleStrip: + return primitiveCount + 2; + case PrimitiveTypeTriangleList: + return 3 * primitiveCount; + default: + [NSException raise:@"NotImplementedException" + format:@"The primitive type %i is not yet implemented.", primitiveType]; + return 0; + } +} // Presentation - (void) reset { @@ -97,6 +165,36 @@ glClear(options); } +// Vertex buffers +- (NSArray*) getVertexBuffers { + return [[NSArray arrayWithArray:vertices] autorelease]; +} + +- (void) setVertexBuffer:(VertexBuffer*)vertexBuffer { + VertexBufferBinding *binding = [[VertexBufferBinding alloc] initWithVertexBuffer:vertexBuffer]; + [vertices insertObject:binding atIndex:0]; + [binding release]; +} + +- (void) setVertexBuffer:(VertexBuffer*)vertexBuffer vertexOffset:(int)vertexOffset { + VertexBufferBinding *binding = [[VertexBufferBinding alloc] initWithVertexBuffer:vertexBuffer vertexOffset:vertexOffset]; + [vertices insertObject:binding atIndex:0]; + [binding release]; +} + +- (void) setVertexBuffers:(VertexBufferBinding*)vertexBuffer, ... { + if (vertexBuffer != nil) { + va_list args; + va_start(args, vertexBuffer); + VertexBufferBinding *binding = vertexBuffer; + for (int i = 0; binding; i++) { + [vertices insertObject:binding atIndex:i]; + binding = va_arg(args, VertexBufferBinding*); + } + va_end(args); + } +} + // Low level methods - (uint) createTexture { GLuint textureId; @@ -129,6 +227,23 @@ - (EAGLContext*) createContext { return nil; } +- (void) drawPrimitivesOfType:(PrimitiveType)primitiveType startingAt:(int)startVertex count:(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) drawUserPrimitivesOfType:(PrimitiveType)primitiveType + vertices:(void*)vertexData ofType:(VertexDeclaration*) vertexDeclaration + startingAt:(int)vertexOffset count:(int)primitiveCount {} + +- (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 {} + // Private methods + (void) getFormat:(GLenum*)format AndType:(GLenum*)type ForSurfaceFormat:(SurfaceFormat)surfaceFormat { @@ -158,5 +273,16 @@ } } +- (void) dealloc +{ + [blendState release]; + [depthStencilState release]; + [rasterizerState release]; + [samplerStates release]; + [textures release]; + [super dealloc]; +} + + @end diff --git a/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.h b/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.h new file mode 100644 index 0000000..162d70b --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.h @@ -0,0 +1,19 @@ +// +// IndexBuffer.h +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "GraphicsResource.h" + +@interface IndexBuffer : GraphicsResource { + uint bufferID; +} + +@property (nonatomic, readonly) uint bufferId; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.m b/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.m new file mode 100644 index 0000000..c926a76 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/IndexBuffer.m @@ -0,0 +1,16 @@ +// +// IndexBuffer.m +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "IndexBuffer.h" + + +@implementation IndexBuffer + +@synthesize bufferId; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.h b/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.h index 2f36245..4c76fcc 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.h +++ b/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.h @@ -12,7 +12,6 @@ @interface ReachGraphicsDevice : GraphicsDevice { - } @end diff --git a/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.m b/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.m index 783f98d..4d05f64 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.m +++ b/Classes/Retronator/Xni/Framework/Graphics/ReachGraphicsDevice.m @@ -8,10 +8,121 @@ #import "ReachGraphicsDevice.h" +#import "Retronator.Xni.Framework.Graphics.h" + +@interface ReachGraphicsDevice() + +- (void) enableVertexBuffers; +- (void) disableVertexBuffers; + +- (void) enableDeclaration:(VertexDeclaration*)vertexDeclaration forUserData:(void*)data; + +- (void) enableDeclaration:(VertexDeclaration*)vertexDeclaration onStream:(int)stream useBuffers:(BOOL)useBuffers pointer:(void*)pointer; +- (void) disableDeclaration:(VertexDeclaration*)vertexDeclaration; + +@end + + @implementation ReachGraphicsDevice - (EAGLContext*) createContext { return [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1]; } +- (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) drawUserPrimitivesOfType:(PrimitiveType)primitiveType + vertices:(void *)vertexData ofType:(VertexDeclaration *)vertexDeclaration + startingAt:(int)vertexOffset count:(int)primitiveCount { + + [self enableDeclaration:vertexDeclaration forUserData:(vertexData + vertexOffset * vertexDeclaration.vertexStride)]; + + int count = [GraphicsDevice getNumberOfVerticesForPrimitiveType:primitiveType primitiveCount:primitiveCount]; + glDrawArrays(primitiveType, 0, count); + + [self disableDeclaration:vertexDeclaration]; +} + +// Private methods + +- (void) enableVertexBuffers { + // We need to enable the declarations set on the vertex buffers. + for (int i=0;i<[vertices count];i++) { + VertexBufferBinding *binding = [vertices objectAtIndex:i]; + [self enableDeclaration:binding.vertexBuffer.vertexDeclaration + onStream:i useBuffers:YES pointer:(void*)binding.vertexOffset]; + } +} + +- (void) enableDeclaration:(VertexDeclaration*)vertexDeclaration forUserData:(void*)data { + [self enableDeclaration:vertexDeclaration onStream:0 useBuffers:NO pointer:data]; +} + +- (void) enableDeclaration:(VertexDeclaration *)vertexDeclaration onStream:(int)stream useBuffers:(BOOL)useBuffers pointer:(void*)pointer { + NSArray *vertexElements = vertexDeclaration.vertexElements; + + int stride = vertexDeclaration.vertexStride; + + for (VertexElement *vertexElement in vertexElements) { + if (useBuffers) { + // Bind the buffer the vertex element is using. + VertexBufferBinding* binding = [vertices objectAtIndex:stream]; + glBindBuffer(GL_ARRAY_BUFFER, binding.vertexBuffer.bufferId); + } + + // Enable the state that the vertex element represents. + glEnableClientState(vertexElement.vertexElementUsage); + + // Create the pointer to the vertex element data. + switch (vertexElement.vertexElementUsage) { + case VertexElementUsagePosition: + glVertexPointer([vertexElement getValueDimensions], [vertexElement getValueDataType], + stride, pointer + vertexElement.offset); + break; + case VertexElementUsageNormal: + glNormalPointer([vertexElement getValueDataType], + stride, pointer + vertexElement.offset); + break; + case VertexElementUsageTextureCoordinate: + glTexCoordPointer([vertexElement getValueDimensions], [vertexElement getValueDataType], + stride, pointer + vertexElement.offset); + break; + case VertexElementUsageColor: + glColorPointer([vertexElement getValueDimensions], [vertexElement getValueDataType], + stride, pointer + vertexElement.offset); + break; + case VertexElementUsagePointSize: + glPointSizePointerOES([vertexElement getValueDataType], + stride, pointer + vertexElement.offset); + break; + default: + [NSException raise:@"NotImplementedException" + format:@"The vertex element usage %i is not yet implemented.", vertexElement.vertexElementUsage]; + break; + } + } +} + +- (void) disableVertexBuffers { + // We need to disable the declarations set on the vertex buffers. + for (int i=0;i<[vertices count];i++) { + VertexBufferBinding *binding = [vertices objectAtIndex:i]; + [self disableDeclaration:binding.vertexBuffer.vertexDeclaration]; + } + + glBindBuffer(GL_ARRAY_BUFFER, 0); +} + +- (void) disableDeclaration:(VertexDeclaration*)vertexDeclaration { + NSArray *vertexElements = vertexDeclaration.vertexElements; + for (VertexElement *vertexElement in vertexElements) { + // Enable the state that the vertex element represents. + glDisableClientState(vertexElement.vertexElementUsage); + } +} + @end 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 bba1c99..8fd121e 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 @@ -1,7 +1,15 @@ #import "Enums.h" -@class GraphicsResource, Texture, Texture2D, Effect; -@class BlendState, DepthStencilState, RasterizerState, SamplerState; +@class GraphicsResource, Texture, Texture2D, Effect, EffectTechnique, EffectPass, BasicEffect, DirectionalLight; + +#import "VertexStructs.h" +@class VertexElement, VertexPositionColor, VertexPositionTexture, VertexDeclaration; +@class VertexArray, VertexPositionColorArray, VertexPositionTextureArray; +@class VertexBuffer, VertexBufferBinding, IndexBuffer; + +@class BlendState, DepthStencilState, RasterizerState, SamplerState, SamplerStateCollection, TextureCollection; @protocol IGraphicsDeviceService; @class GraphicsDevice, ReachGraphicsDevice, HiDefGraphicsDevice; + +@class SpriteBatch; 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 3551b6c..23036c2 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.h +++ b/Classes/Retronator/Xni/Framework/Graphics/Retronator.Xni.Framework.Graphics.h @@ -3,10 +3,31 @@ #import "Texture.h" #import "Texture2D.h" #import "Effect.h" +#import "EffectTechnique.h" +#import "EffectPass.h" +#import "BasicEffect.h" +#import "DirectionalLight.h" + +#import "VertexStructs.h" +#import "VertexElement.h" +#import "VertexPositionColor.h" +#import "VertexPositionTexture.h" +#import "VertexDeclaration.h" + +#import "VertexArray.h" +#import "VertexPositionColorArray.h" +#import "VertexPositionTextureArray.h" + +#import "VertexBuffer.h" +#import "VertexBufferBinding.h" +#import "IndexBuffer.h" + #import "BlendState.h" #import "DepthStencilState.h" #import "RasterizerState.h" #import "SamplerState.h" +#import "SamplerStateCollection.h" +#import "TextureCollection.h" #import "IGraphicsDeviceService.h" #import "GraphicsDevice.h" diff --git a/Classes/Retronator/Xni/Framework/Graphics/SamplerStateCollection.h b/Classes/Retronator/Xni/Framework/Graphics/SamplerStateCollection.h new file mode 100644 index 0000000..b6ace11 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/SamplerStateCollection.h @@ -0,0 +1,22 @@ +// +// SamplerStateCollection.h +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.Graphics.classes.h" + +@interface SamplerStateCollection : NSObject { + NSMutableArray *collection; +} + +- (int) count; +- (SamplerState*)objectAtIndex:(NSUInteger)index; +- (void)addObject:(SamplerState*)anObject; +- (void)insertObject:(SamplerState*)anObject atIndex:(NSUInteger)index; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/SamplerStateCollection.m b/Classes/Retronator/Xni/Framework/Graphics/SamplerStateCollection.m new file mode 100644 index 0000000..f79e45d --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/SamplerStateCollection.m @@ -0,0 +1,46 @@ +// +// SamplerStateCollection.m +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "SamplerStateCollection.h" + +#import "Retronator.Xni.Framework.Graphics.h" + +@implementation SamplerStateCollection + +- (id) init +{ + self = [super init]; + if (self != nil) { + collection = [[NSMutableArray alloc] init]; + } + return self; +} + +- (int) count { + return [collection count]; +} + +- (SamplerState*)objectAtIndex:(NSUInteger)index { + return (SamplerState*)[collection objectAtIndex:index]; +} + +- (void)addObject:(SamplerState*)anObject { + [collection addObject:anObject]; +} + +- (void)insertObject:(SamplerState*)anObject atIndex:(NSUInteger)index { + [collection insertObject:anObject atIndex:index]; +} + +- (void) dealloc +{ + [collection dealloc]; + [super dealloc]; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/Texture.h b/Classes/Retronator/Xni/Framework/Graphics/Texture.h index 689ab15..24588bd 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/Texture.h +++ b/Classes/Retronator/Xni/Framework/Graphics/Texture.h @@ -16,7 +16,7 @@ int levelCount; } -- (id) initWithGraphicsDevice:(GraphicsDevice *)theGraphicsDevice SurfaceFormat:(SurfaceFormat)theFormat LevelCount:(int)theLevelCount; +- (id) initWithGraphicsDevice:(GraphicsDevice *)theGraphicsDevice surfaceFormat:(SurfaceFormat)theFormat levelCount:(int)theLevelCount; @property (nonatomic, readonly) uint textureId; @property (nonatomic) SurfaceFormat format; diff --git a/Classes/Retronator/Xni/Framework/Graphics/Texture.m b/Classes/Retronator/Xni/Framework/Graphics/Texture.m index ea8d677..046fb68 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/Texture.m +++ b/Classes/Retronator/Xni/Framework/Graphics/Texture.m @@ -11,7 +11,7 @@ @implementation Texture -- (id) initWithGraphicsDevice:(GraphicsDevice *)theGraphicsDevice SurfaceFormat:(SurfaceFormat)theFormat LevelCount:(int)theLevelCount { +- (id) initWithGraphicsDevice:(GraphicsDevice *)theGraphicsDevice surfaceFormat:(SurfaceFormat)theFormat levelCount:(int)theLevelCount { if (self = [super initWithGraphicsDevice:theGraphicsDevice]) { format = theFormat; diff --git a/Classes/Retronator/Xni/Framework/Graphics/Texture2D.h b/Classes/Retronator/Xni/Framework/Graphics/Texture2D.h index f5bed8e..0d99d82 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/Texture2D.h +++ b/Classes/Retronator/Xni/Framework/Graphics/Texture2D.h @@ -15,24 +15,24 @@ int width; } -- (id) initWithGraphicsDevice:(GraphicsDevice*)theGraphicsDevice Width:(int)theWidth Height:(int)theHeight; -- (id) initWithGraphicsDevice:(GraphicsDevice*)theGraphicsDevice Width:(int)theWidth Height:(int)theHeight MipMaps:(BOOL)generateMipMaps Format:(SurfaceFormat)theFormat; +- (id) initWithGraphicsDevice:(GraphicsDevice*)theGraphicsDevice width:(int)theWidth height:(int)theHeight; +- (id) initWithGraphicsDevice:(GraphicsDevice*)theGraphicsDevice width:(int)theWidth height:(int)theHeight mipMaps:(BOOL)generateMipMaps format:(SurfaceFormat)theFormat; @property (nonatomic, readonly) Rectangle *bounds; @property (nonatomic, readonly) int height; @property (nonatomic, readonly) int width; -+ (Texture2D*) fromData:(NSData*)textureData GraphicsDevice:(GraphicsDevice*)graphicsDevice; -//+ (Texture2D*) fromData:(NSData*)textureData GraphicsDevice:(GraphicsDevice*)graphicsDevice Width:(int)width Height:(int)height Zoom:(BOOL)zoom; ++ (Texture2D*) fromData:(NSData*)textureData graphicsDevice:(GraphicsDevice*)graphicsDevice; +//+ (Texture2D*) fromData:(NSData*)textureData graphicsDevice:(GraphicsDevice*)graphicsDevice width:(int)width height:(int)height zoom:(BOOL)zoom; // - (void) getDataTo:(void *)data; -// - (void) getDataTo:(void *)data StartIndex:(int)startIndex ElementCount:(int)elementCount; -// - (void) getDataFromLevel:(int)level SourceRectangle:(Rectangle*)rect To:(void *)data StartIndex:(int)startIndex ElementCount:(int)elementCount; +// - (void) getDataTo:(void *)data startIndex:(int)startIndex elementCount:(int)elementCount; +// - (void) getDataFromLevel:(int)level sourceRectangle:(Rectangle*)rect to:(void *)data StartIndex:(int)startIndex elementCount:(int)elementCount; - (void) setDataFrom:(void*)data; -- (void) setDataToLevel:(int)level SourceRectangle:(Rectangle*)rect From:(void *)data; +- (void) setDataToLevel:(int)level sourceRectangle:(Rectangle*)rect from:(void *)data; -// - (void) saveAsJpeg:(NSData*)textureData Width:(int)width Height:(int)height; -// - (void) saveAsPng:(NSData*)textureData Width:(int)width Height:(int)height; +// - (void) saveAsJpeg:(NSData*)textureData width:(int)width height:(int)height; +// - (void) saveAsPng:(NSData*)textureData width:(int)width height:(int)height; @end diff --git a/Classes/Retronator/Xni/Framework/Graphics/Texture2D.m b/Classes/Retronator/Xni/Framework/Graphics/Texture2D.m index 89771bd..6bea994 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/Texture2D.m +++ b/Classes/Retronator/Xni/Framework/Graphics/Texture2D.m @@ -15,15 +15,15 @@ @implementation Texture2D -- (id) initWithGraphicsDevice:(GraphicsDevice*)theGraphicsDevice Width:(int)theWidth Height:(int)theHeight { - return [self initWithGraphicsDevice:theGraphicsDevice Width:theWidth Height:theHeight MipMaps:NO Format:SurfaceFormatColor]; +- (id) initWithGraphicsDevice:(GraphicsDevice*)theGraphicsDevice width:(int)theWidth height:(int)theHeight { + return [self initWithGraphicsDevice:theGraphicsDevice width:theWidth height:theHeight mipMaps:NO format:SurfaceFormatColor]; } - (id) initWithGraphicsDevice:(GraphicsDevice *)theGraphicsDevice - Width:(int)theWidth - Height:(int)theHeight - MipMaps:(BOOL)generateMipMaps - Format:(SurfaceFormat)theFormat { + width:(int)theWidth + height:(int)theHeight + mipMaps:(BOOL)generateMipMaps + format:(SurfaceFormat)theFormat { int theLevelCount = 1; if (generateMipMaps) { int side = MIN(theWidth, theHeight); @@ -32,7 +32,7 @@ theLevelCount++; } } - if (self = [super initWithGraphicsDevice:theGraphicsDevice SurfaceFormat:theFormat LevelCount:theLevelCount]) { + if (self = [super initWithGraphicsDevice:theGraphicsDevice surfaceFormat:theFormat levelCount:theLevelCount]) { width = theWidth; height = theHeight; textureId = [graphicsDevice createTexture]; @@ -41,14 +41,14 @@ } - (Rectangle*) bounds { - return [Rectangle rectangleWithX:0 Y:0 Width:width Height:height]; + return [Rectangle rectangleWithX:0 y:0 width:width height:height]; } @synthesize width; @synthesize height; -+ (Texture2D*) fromData:(NSData*)textureData GraphicsDevice:(GraphicsDevice*)graphicsDevice { ++ (Texture2D*) fromData:(NSData*)textureData graphicsDevice:(GraphicsDevice*)graphicsDevice { if (graphicsDevice == nil) { [NSException raise:@"ArgumentNullException" format:@"The graphics device cannot be null."]; } @@ -71,7 +71,7 @@ CGContextTranslateCTM(textureContext, 0, 0); CGContextDrawImage(textureContext, CGRectMake(0, 0, width, height), image.CGImage); - Texture2D *texture = [[Texture2D alloc] initWithGraphicsDevice:graphicsDevice Width:(int)width Height:(int)height]; + Texture2D *texture = [[Texture2D alloc] initWithGraphicsDevice:graphicsDevice width:(int)width height:(int)height]; [texture setDataFrom:imageData]; CGContextRelease(textureContext); @@ -86,7 +86,7 @@ } -- (void) setDataToLevel:(int)level SourceRectangle:(Rectangle*)rect From:(void *)data { +- (void) setDataToLevel:(int)level sourceRectangle:(Rectangle*)rect from:(void *)data { [graphicsDevice setData:data toTexture2D:self SourceRectangle:rect level:level]; } diff --git a/Classes/Retronator/Xni/Framework/Graphics/TextureCollection.h b/Classes/Retronator/Xni/Framework/Graphics/TextureCollection.h new file mode 100644 index 0000000..f360e14 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/TextureCollection.h @@ -0,0 +1,22 @@ +// +// TextureCollection.h +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.Graphics.classes.h" + +@interface TextureCollection : NSObject { + NSMutableArray *collection; +} + +- (int) count; +- (Texture*)objectAtIndex:(NSUInteger)index; +- (void)addObject:(Texture*)anObject; +- (void)insertObject:(Texture*)anObject atIndex:(NSUInteger)index; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/TextureCollection.m b/Classes/Retronator/Xni/Framework/Graphics/TextureCollection.m new file mode 100644 index 0000000..d022263 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/TextureCollection.m @@ -0,0 +1,46 @@ +// +// TextureCollection.m +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "TextureCollection.h" + +#import "Retronator.Xni.Framework.Graphics.h" + +@implementation TextureCollection + +- (id) init +{ + self = [super init]; + if (self != nil) { + collection = [[NSMutableArray alloc] init]; + } + return self; +} + +- (int) count { + return [collection count]; +} + +- (Texture*)objectAtIndex:(NSUInteger)index { + return (Texture*)[collection objectAtIndex:index]; +} + +- (void)addObject:(Texture*)anObject { + [collection addObject:anObject]; +} + +- (void)insertObject:(Texture*)anObject atIndex:(NSUInteger)index { + [collection insertObject:anObject atIndex:index]; +} + +- (void) dealloc +{ + [collection dealloc]; + [super dealloc]; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/Vector4.h b/Classes/Retronator/Xni/Framework/Graphics/Vector4.h index fee59b1..7295bcb 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/Vector4.h +++ b/Classes/Retronator/Xni/Framework/Graphics/Vector4.h @@ -14,11 +14,11 @@ Vector4Struct data; } -- (id) initWithX:(float)x Y:(float)y Z:(float)z W:(float)w; +- (id) initWithX:(float)x y:(float)y z:(float)z w:(float)w; - (id) initWithStruct: (Vector4Struct*)vectorData; - (id) initWithVector: (Vector4*)vector; -+ (Vector4*) vectorWithX:(float)x Y:(float)y Z:(float)z W:(float)w; ++ (Vector4*) vectorWithX:(float)x y:(float)y z:(float)z w:(float)w; + (Vector4*) vectorWithStruct: (Vector4Struct*)vectorData; + (Vector4*) vectorWithVector: (Vector4*)vector; diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexArray.h b/Classes/Retronator/Xni/Framework/Graphics/VertexArray.h new file mode 100644 index 0000000..11c8e5c --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexArray.h @@ -0,0 +1,28 @@ +// +// VertexArray.h +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import +#import "System.classes.h" + +#import "Retronator.Xni.Framework.Graphics.classes.h" + +@interface VertexArray : NSObject { + AdaptiveArray *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) VertexDeclaration *vertexDeclaration; + +- (void) clear; +- (void) addVertex:(void*)vertex; + +@end \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexArray.m b/Classes/Retronator/Xni/Framework/Graphics/VertexArray.m new file mode 100644 index 0000000..3e64649 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexArray.m @@ -0,0 +1,50 @@ +// +// VertexArray.m +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "VertexArray.h" +#import "System.h" + +@implementation VertexArray + +- (id) initWithItemSize:(int)itemSize initialCapacity:(int)initialCapacity { + if (self = [super init]) { + array = [[AdaptiveArray alloc] initWithItemSize:itemSize initialCapacity:initialCapacity]; + } + return self; +} + +- (void *) array { + return array.array; +} + +- (int) count { + return array.count; +} + +- (int) sizeInBytes { + return array.count * array.itemSize; +} + +- (VertexDeclaration *) vertexDeclaration { return nil; } + +- (void) clear { + [array clear]; +} + +- (void) addVertex:(void *)vertex { + [array addItem:vertex]; +} + +- (void) dealloc +{ + [array release]; + [super dealloc]; +} + +@end + diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.h b/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.h new file mode 100644 index 0000000..1a5b123 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.h @@ -0,0 +1,21 @@ +// +// VertexBuffer.h +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "GraphicsResource.h" + +@interface VertexBuffer : GraphicsResource { + uint bufferId; + VertexDeclaration *vertexDeclaration; +} + +@property (nonatomic, readonly) uint bufferId; +@property (nonatomic, readonly) VertexDeclaration *vertexDeclaration; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.m b/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.m new file mode 100644 index 0000000..b7a514d --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexBuffer.m @@ -0,0 +1,17 @@ +// +// VertexBuffer.m +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "VertexBuffer.h" + + +@implementation VertexBuffer + +@synthesize bufferId; +@synthesize vertexDeclaration; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexBufferBinding.h b/Classes/Retronator/Xni/Framework/Graphics/VertexBufferBinding.h new file mode 100644 index 0000000..67259d5 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexBufferBinding.h @@ -0,0 +1,27 @@ +// +// VertexBufferBinding.h +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.Graphics.classes.h" + +@interface VertexBufferBinding : NSObject { + int instanceFrequency; + VertexBuffer *vertexBuffer; + int vertexOffset; +} + +- (id) initWithVertexBuffer:(VertexBuffer*)theVertexBuffer; +- (id) initWithVertexBuffer:(VertexBuffer*)theVertexBuffer vertexOffset:(int)theVertexOffset; +- (id) initWithVertexBuffer:(VertexBuffer*)theVertexBuffer vertexOffset:(int)theVertexOffset instanceFrequency:(int)theInstanceFrequency; + +@property (nonatomic, readonly) int instanceFrequency; +@property (nonatomic, readonly) VertexBuffer *vertexBuffer; +@property (nonatomic, readonly) int vertexOffset; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexBufferBinding.m b/Classes/Retronator/Xni/Framework/Graphics/VertexBufferBinding.m new file mode 100644 index 0000000..9c91bae --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexBufferBinding.m @@ -0,0 +1,43 @@ +// +// VertexBufferBinding.m +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "VertexBufferBinding.h" + +#import "Retronator.Xni.Framework.Graphics.h" + +@implementation VertexBufferBinding + +- (id) initWithVertexBuffer:(VertexBuffer *)theVertexBuffer { + return [self initWithVertexBuffer:theVertexBuffer vertexOffset:0 instanceFrequency:0]; +} + +- (id) initWithVertexBuffer:(VertexBuffer *)theVertexBuffer vertexOffset:(int)theVertexOffset { + return [self initWithVertexBuffer:theVertexBuffer vertexOffset:theVertexOffset instanceFrequency:0]; +} + +- (id) initWithVertexBuffer:(VertexBuffer *)theVertexBuffer vertexOffset:(int)theVertexOffset instanceFrequency:(int)theInstanceFrequency { + if (self = [super init]) { + vertexBuffer = [theVertexBuffer retain]; + vertexOffset = theVertexOffset; + instanceFrequency = theInstanceFrequency; + } + return self; +} + +@synthesize instanceFrequency; +@synthesize vertexBuffer; +@synthesize vertexOffset; + +- (void) dealloc +{ + [vertexBuffer release]; + [super dealloc]; +} + + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexDeclaration.h b/Classes/Retronator/Xni/Framework/Graphics/VertexDeclaration.h new file mode 100644 index 0000000..bb745d5 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexDeclaration.h @@ -0,0 +1,23 @@ +// +// VertexDeclaration.h +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "GraphicsResource.h" + +@interface VertexDeclaration : GraphicsResource { + NSArray *vertexElements; + int vertexStride; +} + +- (id) initWithElements:(NSArray*)theVertexElements; + +@property (nonatomic, readonly) NSArray *vertexElements; +@property (nonatomic, readonly) int vertexStride; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexDeclaration.m b/Classes/Retronator/Xni/Framework/Graphics/VertexDeclaration.m new file mode 100644 index 0000000..1943b83 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexDeclaration.m @@ -0,0 +1,37 @@ +// +// VertexDeclaration.m +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "VertexDeclaration.h" + +#import "Retronator.Xni.Framework.Graphics.h" + +@implementation VertexDeclaration + +- (id) initWithElements:(NSArray *)theVertexElements { + if (self = [super init]) { + vertexElements = [theVertexElements retain]; + + vertexStride = 0; + for (VertexElement* vertexElement in vertexElements) { + vertexStride += [vertexElement getSize]; + } + } + return self; +} + +@synthesize vertexElements; +@synthesize vertexStride; + +- (void) dealloc +{ + [vertexElements release]; + [super dealloc]; +} + +@end + diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexElement.h b/Classes/Retronator/Xni/Framework/Graphics/VertexElement.h new file mode 100644 index 0000000..39a5ec7 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexElement.h @@ -0,0 +1,39 @@ +// +// VertexElement.h +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "Retronator.Xni.Framework.Graphics.classes.h" + +@interface VertexElement : NSObject { + int offset; + int usageIndex; + VertexElementFormat vertexElementFormat; + VertexElementUsage vertexElementUsage; +} + +- (id) initWithOffset:(int)theOffset format:(VertexElementFormat)elementFormat + usage:(VertexElementUsage)elementUsage usageIndex:(Byte)theUsageIndex; + ++ (VertexElement*) vertexElementWithOffset:(int)theOffset format:(VertexElementFormat)elementFormat + usage:(VertexElementUsage)elementUsage usageIndex:(Byte)theUsageIndex; + +@property (nonatomic) int offset; +@property (nonatomic) int usageIndex; +@property (nonatomic) VertexElementFormat vertexElementFormat; +@property (nonatomic) VertexElementUsage vertexElementUsage; + ++ (int) getSizeForFormat:(VertexElementFormat)format; ++ (int) getValueDimensionsForFormat:(VertexElementFormat)format; ++ (DataType) getValueDataTypeForFormat:(VertexElementFormat)format; + +- (int) getSize; +- (int) getValueDimensions; +- (DataType) getValueDataType; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexElement.m b/Classes/Retronator/Xni/Framework/Graphics/VertexElement.m new file mode 100644 index 0000000..18ba7a0 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexElement.m @@ -0,0 +1,102 @@ +// +// VertexElement.m +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "VertexElement.h" + +#import "Retronator.Xni.Framework.Graphics.h" + +@implementation VertexElement + +- (id) initWithOffset:(int)theOffset format:(VertexElementFormat)elementFormat + usage:(VertexElementUsage)elementUsage usageIndex:(Byte)theUsageIndex { + if (self = [super init]) { + offset = theOffset; + vertexElementFormat = elementFormat; + vertexElementUsage = elementUsage; + usageIndex = theUsageIndex; + } + return self; +} + ++ (VertexElement*) vertexElementWithOffset:(int)theOffset format:(VertexElementFormat)elementFormat + usage:(VertexElementUsage)elementUsage usageIndex:(Byte)theUsageIndex { + return [[[VertexElement alloc] initWithOffset:theOffset format:elementFormat + usage:elementUsage usageIndex:theUsageIndex] autorelease]; +} + +@synthesize offset; +@synthesize usageIndex; +@synthesize vertexElementFormat; +@synthesize vertexElementUsage; + ++ (int) getSizeForFormat:(VertexElementFormat)format { + switch (format) { + case VertexElementFormatSingle: + return sizeof(float); + case VertexElementFormatVector2: + return sizeof(Vector2Struct); + case VertexElementFormatVector3: + return sizeof(Vector3Struct); + case VertexElementFormatVector4: + return sizeof(Vector4Struct); + case VertexElementFormatColor: + return sizeof(uint); + default: + [NSException raise:@"NotImplementedException" format:@"The vertex element format %i is not yet implemented.", format]; + return 0; + } +} + ++ (int) getValueDimensionsForFormat:(VertexElementFormat)format { + switch (format) { + case VertexElementFormatSingle: + return 1; + case VertexElementFormatVector2: + return 2; + case VertexElementFormatVector3: + return 3; + case VertexElementFormatVector4: + return 4; + case VertexElementFormatColor: + return 4; + default: + [NSException raise:@"NotImplementedException" format:@"The vertex element format %i is not yet implemented.", format]; + return 0; + } +} + ++ (DataType) getValueDataTypeForFormat:(VertexElementFormat)format { + switch (format) { + case VertexElementFormatSingle: + return DataTypeFloat; + case VertexElementFormatVector2: + return DataTypeFloat; + case VertexElementFormatVector3: + return DataTypeFloat; + case VertexElementFormatVector4: + return DataTypeFloat; + case VertexElementFormatColor: + return DataTypeUnsignedByte; + default: + [NSException raise:@"NotImplementedException" format:@"The vertex element format %i is not yet implemented.", format]; + return 0; + } +} + +- (int) getSize { + return [VertexElement getSizeForFormat:vertexElementFormat]; +} + +- (int) getValueDimensions { + return [VertexElement getValueDimensionsForFormat:vertexElementFormat]; +} + +- (DataType) getValueDataType { + return [VertexElement getValueDataTypeForFormat:vertexElementFormat]; +} +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.h b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.h new file mode 100644 index 0000000..b9c1044 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.h @@ -0,0 +1,19 @@ +// +// VertexPositionColor.h +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "VertexElement.h" + +@interface VertexPositionColor : VertexElement { + +} + ++ (VertexDeclaration*) vertexDeclaration; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.m b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.m new file mode 100644 index 0000000..275af20 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColor.m @@ -0,0 +1,35 @@ +// +// VertexPositionColor.m +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "VertexPositionColor.h" + +#import "Retronator.Xni.Framework.Graphics.h" + +@implementation VertexPositionColor + +VertexDeclaration *vertexDeclaration; + ++ (void) initialize { + NSArray *vertexElements = [NSArray arrayWithObjects: + [VertexElement vertexElementWithOffset:offsetof(VertexPositionColorStruct, position) + format:VertexElementFormatVector3 + usage:VertexElementUsagePosition + usageIndex:0], + [VertexElement vertexElementWithOffset:offsetof(VertexPositionColorStruct, color) + format:VertexElementFormatColor + usage:VertexElementUsageColor + usageIndex:0], nil]; + + vertexDeclaration = [[VertexDeclaration alloc] initWithElements:vertexElements]; +} + ++ (VertexDeclaration *) vertexDeclaration { + return vertexDeclaration; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorArray.h b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorArray.h new file mode 100644 index 0000000..83ab8e5 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorArray.h @@ -0,0 +1,21 @@ +// +// VertexPositionColorArray.h +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "VertexArray.h" + +@interface VertexPositionColorArray : VertexArray { + +} + +- (id) initWithInitialCapacity:(int)initialCapacity; + +- (void) addVertex:(VertexPositionColorStruct*)vertex; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorArray.m b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorArray.m new file mode 100644 index 0000000..dbd774c --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionColorArray.m @@ -0,0 +1,29 @@ +// +// VertexPositionColorArray.m +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "VertexPositionColorArray.h" + +#import "Retronator.Xni.Framework.Graphics.h" + +@implementation VertexPositionColorArray + +- (id) initWithInitialCapacity:(int)initialCapacity { + if (self = [super initWithItemSize:sizeof(VertexPositionColorStruct) initialCapacity:initialCapacity]) { + } + return self; +} + +- (VertexDeclaration *) vertexDeclaration { + return [VertexPositionColor vertexDeclaration]; +} + +- (void) addVertex:(VertexPositionColorStruct*)vertex { + [super addVertex:vertex]; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.h b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.h new file mode 100644 index 0000000..7d82137 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.h @@ -0,0 +1,19 @@ +// +// VertexPositionTexture.h +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "VertexElement.h" + +@interface VertexPositionTexture : VertexElement { + +} + ++ (VertexDeclaration*) vertexDeclaration; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.m b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.m new file mode 100644 index 0000000..ea1001e --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTexture.m @@ -0,0 +1,35 @@ +// +// VertexPositionTexture.m +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "VertexPositionTexture.h" + +#import "Retronator.Xni.Framework.Graphics.h" + +@implementation VertexPositionTexture + +VertexDeclaration *vertexDeclaration; + ++ (void) initialize { + NSArray *vertexElements = [NSArray arrayWithObjects: + [VertexElement vertexElementWithOffset:offsetof(VertexPositionTextureStruct, position) + format:VertexElementFormatVector3 + usage:VertexElementUsagePosition + usageIndex:0], + [VertexElement vertexElementWithOffset:offsetof(VertexPositionTextureStruct, 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/VertexPositionTextureArray.h b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTextureArray.h new file mode 100644 index 0000000..b519b9b --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTextureArray.h @@ -0,0 +1,21 @@ +// +// VertexPositionTextureArray.h +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import + +#import "VertexArray.h" + +@interface VertexPositionTextureArray : VertexArray { + +} + +- (id) initWithInitialCapacity:(int)initialCapacity; + +- (void) addVertex:(VertexPositionTextureStruct*)vertex; + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTextureArray.m b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTextureArray.m new file mode 100644 index 0000000..befd3b2 --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexPositionTextureArray.m @@ -0,0 +1,29 @@ +// +// VertexPositionTextureArray.m +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "VertexPositionTextureArray.h" + +#import "Retronator.Xni.Framework.Graphics.h" + +@implementation VertexPositionTextureArray + +- (id) initWithInitialCapacity:(int)initialCapacity { + if (self = [super initWithItemSize:sizeof(VertexPositionTextureStruct) initialCapacity:initialCapacity]) { + } + return self; +} + +- (VertexDeclaration *) vertexDeclaration { + return [VertexPositionTexture vertexDeclaration]; +} + +- (void) addVertex:(VertexPositionTextureStruct*)vertex { + [super addVertex:vertex]; +} + +@end diff --git a/Classes/Retronator/Xni/Framework/Graphics/VertexStructs.h b/Classes/Retronator/Xni/Framework/Graphics/VertexStructs.h new file mode 100644 index 0000000..5363c8f --- /dev/null +++ b/Classes/Retronator/Xni/Framework/Graphics/VertexStructs.h @@ -0,0 +1,29 @@ +#import "Retronator.Xni.Framework.classes.h" + +typedef struct { + Vector3Struct position; + uint color; +} VertexPositionColorStruct; + +typedef struct { + Vector3Struct position; + Vector2Struct texture; +} VertexPositionTextureStruct; + +typedef struct { + Vector3Struct position; + Vector3Struct normal; + Vector2Struct texture; +} VertexPositionNormalTextureStruct; + +typedef struct { + Vector3Struct position; + uint color; + float size; +} VertexPositionColorSizeStruct; + +typedef struct { + Vector3Struct position; + uint color; + Vector2Struct texture; +} VertexPositionColorTextureStruct; \ No newline at end of file diff --git a/Classes/Retronator/Xni/Framework/Matrix.h b/Classes/Retronator/Xni/Framework/Matrix.h index 6c04fb8..bed8a1b 100644 --- a/Classes/Retronator/Xni/Framework/Matrix.h +++ b/Classes/Retronator/Xni/Framework/Matrix.h @@ -17,7 +17,7 @@ - (id) initWithStruct: (MatrixStruct*)matrixData; - (id) initWithMatrix: (Matrix*)matrix; -+ (Matrix*) matrixWithData: (MatrixStruct*)matrixData; ++ (Matrix*) matrixWithStruct: (MatrixStruct*)matrixData; + (Matrix*) matrixWithMatrix: (Matrix*)matrix; + (Matrix*) translation:(Vector3*)position; diff --git a/Classes/Retronator/Xni/Framework/Matrix.m b/Classes/Retronator/Xni/Framework/Matrix.m index fbd2c46..b508c1b 100644 --- a/Classes/Retronator/Xni/Framework/Matrix.m +++ b/Classes/Retronator/Xni/Framework/Matrix.m @@ -8,7 +8,198 @@ #import "Matrix.h" +#import "Retronator.Xni.Framework.h" @implementation Matrix +- (id) initWithStruct: (MatrixStruct*)matrixStruct { + if (self = [super init]) { + data = *matrixStruct; + } + return self; +} + +- (id) initWithMatrix: (Matrix*)matrix { + return [self initWithStruct:matrix.data]; +} + ++ (Matrix*) matrixWithStruct: (MatrixStruct*)matrixStruct { + return [[[Matrix alloc] initWithStruct:matrixStruct] autorelease]; +} + ++ (Matrix*) matrixWithMatrix: (Matrix*)matrix { + return [[[Matrix alloc] initWithMatrix:matrix] autorelease]; +} + ++ (Matrix*) translation:(Vector3*)position { + Matrix *matrix = [Matrix identity]; + matrix.translation = position; + return matrix; +} + ++ (Matrix*) scale:(Vector3 *)scale { + Matrix *matrix = [Matrix identity]; + matrix.data->m11= scale.x; + matrix.data->m22= scale.y; + matrix.data->m33= scale.z; + return matrix; +} + ++ (Matrix*) rotationAround:(Vector3 *)axis for:(float)angle { + Vector3 *normalizedAxis = [[Vector3 vectorWithVector:axis] normalize]; + + float c = cosf(angle); + float s = sinf(angle); + float x = normalizedAxis.x; + float y = normalizedAxis.y; + float z = normalizedAxis.z; + + Matrix *matrix = [Matrix zero]; + matrix.data->m11 = (x * x) * (1 - c) + c; + matrix.data->m12 = (y * x) * (1 - c) + (z * s); + matrix.data->m13 = (x * z) * (1 - c) - (y * s); + matrix.data->m21 = (x * y) * (1 - c) - (z * s); + matrix.data->m22 = (y * y) * (1 - c) + c; + matrix.data->m23 = (y * z) * (1 - c) + (x * s); + matrix.data->m31 = (x * z) * (1 - c) + (y * s); + matrix.data->m32 = (y * z) * (1 - c) - (x * s); + matrix.data->m33 = (z * z) * (1 - c) + c; + matrix.data->m44 = 1; + return matrix; +} + ++ (Matrix*) rotationWithQuaternion:(Quaternion *)quaternion { + Quaternion *normalizedQuaternion = [[Quaternion quaternionWithQuaternion:quaternion] normalize]; + + float x = normalizedQuaternion.x; + float y = normalizedQuaternion.y; + float z = normalizedQuaternion.z; + float w = normalizedQuaternion.w; + + Matrix *matrix = [Matrix zero]; + matrix.data->m11 = 1 - 2 * ( y * y + z * z ); + matrix.data->m12 = 2 * ( x * y - z * w ); + matrix.data->m13 = 2 * ( x * z + y * w ); + matrix.data->m21 = 2 * ( x * y + z * w ); + matrix.data->m22 = 1 - 2 * ( x * x + z * z ); + matrix.data->m23 = 2 * ( y * z - x * w ); + matrix.data->m31 = 2 * ( x * z - y * w ); + matrix.data->m32 = 2 * ( y * z + x * w ); + matrix.data->m33 = 1 - 2 * ( x * x + y * y ); + matrix.data->m44 = 1; + return matrix; +} + ++ (Matrix*) lookAt:(Vector3*)target from:(Vector3*)position up:(Vector3*)up { + Vector3 *z = [[Vector3 subtract:position by:target] normalize]; + Vector3 *x = [[Vector3 crossProductOf:up with:z] normalize]; + Vector3 *y = [Vector3 crossProductOf:z with:x]; + Matrix *matrix = [Matrix zero]; + // First column + matrix.data->m11 = x.x; + matrix.data->m21 = x.y; + matrix.data->m31 = x.z; + // Second column + matrix.data->m12 = y.x; + matrix.data->m22 = y.y; + matrix.data->m32 = y.z; + // Third column + matrix.data->m13 = z.x; + matrix.data->m23 = z.y; + matrix.data->m33 = z.z; + // Translation + matrix.data->m41 = -[Vector3 dotProductOf:x with:position]; + matrix.data->m42 = -[Vector3 dotProductOf:y with:position]; + matrix.data->m43 = -[Vector3 dotProductOf:z with:position]; + matrix.data->m44 = 1; + return matrix; +} + ++ (Matrix*) perspectiveWithWidth:(float)width height:(float)height nearPlane:(float)nearPlane farPlane:(float)farPlane { + Matrix *matrix = [Matrix zero]; + matrix.data->m11 = (2 * nearPlane) / width; + matrix.data->m22 = (2 * nearPlane) / height; + matrix.data->m33 = farPlane / (nearPlane - farPlane); + matrix.data->m34 = -1; + matrix.data->m43 = nearPlane * farPlane / (nearPlane - farPlane); + return matrix; +} + ++ (Matrix*) perspectiveWithFieldOfView:(float)fieldOfView aspectRatio:(float)aspectRatio nearPlane:(float)nearPlane farPlane:(float)farPlane{ + float width = 2 * nearPlane * tanf(fieldOfView * 0.5f); + float height = width / aspectRatio; + return [Matrix perspectiveWithWidth:width height:height nearPlane:nearPlane farPlane:farPlane]; +} + ++ (Matrix*) worldAt:(Vector3 *)position forward:(Vector3 *)forward up:(Vector3 *)up { + Vector3 *z = [[Vector3 negate:forward] normalize]; + Vector3 *x = [[Vector3 crossProductOf:up with:z] normalize]; + Vector3 *y = [Vector3 crossProductOf:z with:x]; + Matrix *matrix = [Matrix identity]; + matrix.right = x; + matrix.up = y; + matrix.backward = z; + matrix.translation = position; + return matrix; +} + +// PROPERTIES + +- (MatrixStruct*) data {return &data;} + +// Main rows + +- (Vector3 *) right {return [Vector3 vectorWithX:data.m11 y:data.m12 z:data.m13];} +- (void) setRight:(Vector3 *)value {data.m11 = value.x; data.m12 = value.y; data.m13 = value.z;} + +- (Vector3 *) up {return [Vector3 vectorWithX:data.m21 y:data.m22 z:data.m23];} +- (void) setUp:(Vector3 *)value {data.m21 = value.x; data.m22 = value.y; data.m23 = value.z;} + +- (Vector3 *) backward {return [Vector3 vectorWithX:data.m31 y:data.m32 z:data.m33];} +- (void) setBackward:(Vector3 *)value {data.m31 = value.x; data.m32 = value.y; data.m33 = value.z;} + +- (Vector3 *) translation {return [Vector3 vectorWithX:data.m41 y:data.m42 z:data.m43];} +- (void) setTranslation:(Vector3 *)value {data.m41 = value.x; data.m42 = value.y; data.m43 = value.z;} + +// Negative rows + +- (Vector3 *) left {return [Vector3 vectorWithX:-data.m11 y:-data.m12 z:-data.m13];} +- (void) setLeft:(Vector3 *)value {data.m11 = -value.x; data.m12 = -value.y; data.m13 = -value.z;} + +- (Vector3 *) down {return [Vector3 vectorWithX:-data.m21 y:-data.m22 z:-data.m23];} +- (void) setDown:(Vector3 *)value {data.m21 = -value.x; data.m22 = -value.y; data.m23 = -value.z;} + +- (Vector3 *) forward {return [Vector3 vectorWithX:-data.m31 y:-data.m32 z:-data.m33];} +- (void) setForward:(Vector3 *)value {data.m31 = -value.x; data.m32 = -value.y; data.m33 = -value.z;} + +// METHODS + +- (Matrix*) transpose { + MatrixTranspose(self.data); + return self; +} + +- (Matrix*) inverse { + MatrixInverse(self.data); + return self; +} + +- (Matrix*) multiplyWith:(Matrix*)value { + MatrixStruct result; + MatrixMultiply(self.data, value.data, &result); + data = result; + return self; +} + +// CONSTANTS + ++ (id) zero { + MatrixStruct MatrixStruct = MatrixMake(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); + return [Matrix matrixWithStruct:&MatrixStruct]; +} ++ (id) identity { + MatrixStruct MatrixStruct = MatrixMake(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); + return [Matrix matrixWithStruct:&MatrixStruct]; +} + @end diff --git a/Classes/Retronator/Xni/Framework/Quaternion.h b/Classes/Retronator/Xni/Framework/Quaternion.h index 9614b5d..0f767ff 100644 --- a/Classes/Retronator/Xni/Framework/Quaternion.h +++ b/Classes/Retronator/Xni/Framework/Quaternion.h @@ -14,7 +14,7 @@ Vector4Struct data; } -- (id) initWithX:(float)x Y:(float)y Z:(float)z W:(float)w; +- (id) initWithX:(float)x y:(float)y z:(float)z w:(float)w; - (id) initWithVectorPart:(Vector3*)vector scalarPart:(float)scalar; - (id) initWithStruct: (Vector4Struct*)quaternionData; - (id) initWithQuaternion: (Quaternion*)quaternion; diff --git a/Classes/Retronator/Xni/Framework/Rectangle.h b/Classes/Retronator/Xni/Framework/Rectangle.h index b826045..3f37d6a 100644 --- a/Classes/Retronator/Xni/Framework/Rectangle.h +++ b/Classes/Retronator/Xni/Framework/Rectangle.h @@ -15,11 +15,11 @@ RectangleStruct data; } -- (id) initWithX:(int)x Y:(int)y Width:(int)width Height:(int)height; +- (id) initWithX:(int)x y:(int)y width:(int)width height:(int)height; - (id) initWithStruct:(RectangleStruct*) rectangleStruct; - (id) initWithRectangle:(Rectangle*) rectangle; -+ (Rectangle*) rectangleWithX:(int)x Y:(int)y Width:(int)width Height:(int)height; ++ (Rectangle*) rectangleWithX:(int)x y:(int)y width:(int)width height:(int)height; + (Rectangle*) rectangleWithStruct:(RectangleStruct*) rectangleStruct; + (Rectangle*) rectangleWithRectangle:(Rectangle*) rectangle; + (Rectangle*) rectangleWithCGRect:(CGRect) cgRect; diff --git a/Classes/Retronator/Xni/Framework/Rectangle.m b/Classes/Retronator/Xni/Framework/Rectangle.m index f4f425b..c75f1c4 100644 --- a/Classes/Retronator/Xni/Framework/Rectangle.m +++ b/Classes/Retronator/Xni/Framework/Rectangle.m @@ -13,7 +13,7 @@ // CONSTRUCTORS -- (id) initWithX:(int)x Y:(int)y Width:(int)width Height:(int)height { +- (id) initWithX:(int)x y:(int)y width:(int)width height:(int)height { if (self = [super init]) { data = RectangleMake(x, y, width, height); } @@ -31,8 +31,8 @@ return [self initWithStruct:rectangle.data]; } -+ (Rectangle*) rectangleWithX:(int)x Y:(int)y Width:(int)width Height:(int)height { - return [[[Rectangle alloc] initWithX:x Y:y Width:width Height:height] autorelease]; ++ (Rectangle*) rectangleWithX:(int)x y:(int)y width:(int)width height:(int)height { + return [[[Rectangle alloc] initWithX:x y:y width:width height:height] autorelease]; } + (Rectangle*) rectangleWithStruct:(RectangleStruct*) rectangleStruct { @@ -44,8 +44,8 @@ } + (Rectangle*) rectangleWithCGRect:(CGRect) cgRect { - return [Rectangle rectangleWithX:cgRect.origin.x Y:cgRect.origin.y - Width:cgRect.size.width Height:cgRect.size.height]; + return [Rectangle rectangleWithX:cgRect.origin.x y:cgRect.origin.y + width:cgRect.size.width height:cgRect.size.height]; } // PROPERTIES @@ -84,6 +84,6 @@ // CONSTANTS -+ (Rectangle*) empty {return [Rectangle rectangleWithX:0 Y:0 Width:0 Height:0];} ++ (Rectangle*) empty {return [Rectangle rectangleWithX:0 y:0 width:0 height:0];} @end diff --git a/Classes/Retronator/Xni/Framework/Vector2.h b/Classes/Retronator/Xni/Framework/Vector2.h index 3955dbc..b814ef7 100644 --- a/Classes/Retronator/Xni/Framework/Vector2.h +++ b/Classes/Retronator/Xni/Framework/Vector2.h @@ -14,11 +14,11 @@ Vector2Struct data; } -- (id) initWithX:(float)x Y:(float)y; +- (id) initWithX:(float)x y:(float)y; - (id) initWithStruct: (Vector2Struct*)vectorData; - (id) initWithVector: (Vector2*)vector; -+ (Vector2*) vectorWithX:(float)x Y:(float)y; ++ (Vector2*) vectorWithX:(float)x y:(float)y; + (Vector2*) vectorWithStruct: (Vector2Struct*)vectorData; + (Vector2*) vectorWithVector: (Vector2*)vector; diff --git a/Classes/Retronator/Xni/Framework/Vector3.h b/Classes/Retronator/Xni/Framework/Vector3.h index 40da667..991008d 100644 --- a/Classes/Retronator/Xni/Framework/Vector3.h +++ b/Classes/Retronator/Xni/Framework/Vector3.h @@ -14,11 +14,11 @@ Vector3Struct data; } -- (id) initWithX:(float)x Y:(float)y Z:(float)z; +- (id) initWithX:(float)x y:(float)y z:(float)z; - (id) initWithStruct: (Vector3Struct*)vectorData; - (id) initWithVector: (Vector3*)vector; -+ (Vector3*) vectorWithX:(float)x Y:(float)y Z:(float)z; ++ (Vector3*) vectorWithX:(float)x y:(float)y z:(float)z; + (Vector3*) vectorWithStruct: (Vector3Struct*)vectorData; + (Vector3*) vectorWithVector: (Vector3*)vector; diff --git a/Classes/Retronator/Xni/Framework/Vector3.m b/Classes/Retronator/Xni/Framework/Vector3.m index 7721460..3f95644 100644 --- a/Classes/Retronator/Xni/Framework/Vector3.m +++ b/Classes/Retronator/Xni/Framework/Vector3.m @@ -8,7 +8,167 @@ #import "Vector3.h" +#import "Retronator.Xni.Framework.h" @implementation Vector3 +// CONSTRUCTORS + +- (id) initWithX:(float)x y:(float)y z:(float)z { + if (self = [super init]) { + data = Vector3Make(x, y, z); + } + return self; +} + +- (id) initWithStruct: (Vector3Struct*)vectorData { + if (self = [super init]) { + data = *vectorData; + } + return self; +} + +- (id) initWithVector: (Vector3*)vector { + return [self initWithStruct:vector.data]; +} + ++ (Vector3*) vectorWithX:(float)x y:(float)y z:(float)z { + return [[[Vector3 alloc] initWithX:x y:y z:z] autorelease]; +} + ++ (Vector3*) vectorWithStruct: (Vector3Struct*)vectorData { + return [[[Vector3 alloc] initWithStruct:vectorData] autorelease]; +} + ++ (Vector3*) vectorWithVector: (Vector3*)vector { + return [[[Vector3 alloc] initWithVector:vector] autorelease]; +} + +// PROPERTIES + +- (float) x {return data.x;} +- (void) setX:(float)value {data.x = value;} + +- (float) y {return data.y;} +- (void) setY:(float)value {data.y = value;} + +- (float) z {return data.z;} +- (void) setZ:(float)value {data.z = value;} + +- (Vector3Struct*) data {return &data;} + +// METHODS + ++ (Vector3*) normalize:(Vector3*)value { + Vector3Struct resultData = *value.data; + Vector3Normalize(&resultData); + return [Vector3 vectorWithStruct:&resultData]; +} + ++ (Vector3*) negate:(Vector3*)value { + Vector3Struct resultData = *value.data; + Vector3Negate(&resultData); + return [Vector3 vectorWithStruct:&resultData]; +} + ++ (Vector3*) add:(Vector3*)value1 to:(Vector3*)value2 { + Vector3Struct resultData; + Vector3Add(value1.data, value2.data, &resultData); + return [Vector3 vectorWithStruct:&resultData]; +} + ++ (Vector3*) subtract:(Vector3*)value1 by:(Vector3*)value2 { + Vector3Struct resultData; + Vector3Subtract(value1.data, value2.data, &resultData); + return [Vector3 vectorWithStruct:&resultData]; +} + ++ (Vector3*) multiply:(Vector3*)value by:(float)scalar { + Vector3Struct resultData; + Vector3Multiply(value.data, scalar, &resultData); + return [Vector3 vectorWithStruct:&resultData]; +} + ++ (Vector3*) crossProductOf:(Vector3*)value1 with:(Vector3*)value2 { + Vector3Struct resultData; + Vector3CrossProduct(value1.data, value2.data, &resultData); + return [Vector3 vectorWithStruct:&resultData]; +} + ++ (float) dotProductOf:(Vector3*)value1 with:(Vector3*)value2 { + return Vector3DotProduct(value1.data, value2.data); +} + ++ (Vector3*) transform:(Vector3*)value with:(Matrix*)matrix { + Vector3Struct resultData; + Vector3Transform(value.data, matrix.data, &resultData); + return [Vector3 vectorWithStruct:&resultData]; +} + ++ (Vector3*) transformNormal:(Vector3*)value with:(Matrix*)matrix { + Vector3Struct resultData; + Vector3TransformNormal(value.data, matrix.data, &resultData); + return [Vector3 vectorWithStruct:&resultData]; +} + +- (float) length { + return Vector3Length(self.data); +} + +- (float) lengthSquared { + return Vector3LengthSquared(self.data); +} + +- (Vector3*) normalize { + Vector3Normalize(&data); + return self; +} +- (Vector3*) negate { + Vector3Negate(&data); + return self; +} + +- (Vector3*) add:(Vector3*)value { + Vector3Add(self.data, value.data, self.data); + return self; +} + +- (Vector3*) subtract:(Vector3*)value { + Vector3Subtract(self.data, value.data, self.data); + return self; +} + +- (Vector3*) multiplyBy:(float)scalar { + Vector3Multiply(self.data, scalar, self.data); + return self; +} + +- (Vector3*) transformWith:(Matrix*)matrix { + Vector3Transform(self.data, matrix.data, self.data); + return self; +} + +- (Vector3*) transformNormalWith:(Matrix*)matrix { + Vector3TransformNormal(self.data, matrix.data, self.data); + return self; +} + +- (NSString *) description { + return [NSString stringWithFormat:@"Vector(%f, %f, %f)", data.x, data.y, data.z]; +} + +// Constants + ++ (Vector3*) zero {return [Vector3 vectorWithX:0 y:0 z:0];} ++ (Vector3*) one {return [Vector3 vectorWithX:1 y:1 z:1];} ++ (Vector3*) unitX {return [Vector3 vectorWithX:1 y:0 z:0];} ++ (Vector3*) unitY {return [Vector3 vectorWithX:0 y:1 z:0];} ++ (Vector3*) unitZ {return [Vector3 vectorWithX:0 y:0 z:1];} ++ (Vector3*) up {return [Vector3 vectorWithX:0 y:1 z:0];} ++ (Vector3*) down {return [Vector3 vectorWithX:0 y:-1 z:0];} ++ (Vector3*) left {return [Vector3 vectorWithX:-1 y:0 z:0];} ++ (Vector3*) right {return [Vector3 vectorWithX:1 y:0 z:0];} ++ (Vector3*) forward {return [Vector3 vectorWithX:0 y:0 z:-1];} ++ (Vector3*) backward {return [Vector3 vectorWithX:0 y:0 z:1];} + @end diff --git a/Classes/System/AdaptiveArray.m b/Classes/System/AdaptiveArray.m new file mode 100644 index 0000000..0362f8a --- /dev/null +++ b/Classes/System/AdaptiveArray.m @@ -0,0 +1,50 @@ +// +// AdaptiveArray.m +// XNI +// +// Created by Matej Jan on 21.9.10. +// Copyright 2010 Retronator. All rights reserved. +// + +#import "AdaptiveArray.h" + +@implementation AdaptiveArray + +- (id) initWithItemSize:(int)theItemSize initialCapacity:(int)theCapacity { + if (self = [super init]) { + itemSize = theItemSize; + capacity = theCapacity; + array = malloc(capacity * itemSize); + } + return self; +} + +@synthesize itemSize; +@synthesize array; +@synthesize count; + +- (void) addItem:(void *)item { + if (count == capacity) { + // Resize array + void* newArray = malloc(capacity * 2 * itemSize); + memcpy(newArray, array, capacity * itemSize); + free(array); + array = newArray; + capacity *= 2; + } + memcpy(array + count * itemSize, item, itemSize); + count++; +} + +- (void) clear { + count = 0; +} + +- (void) dealloc +{ + free(array); + [super dealloc]; +} + +@end + diff --git a/Classes/System/System.classes.h b/Classes/System/System.classes.h index b7951e3..6c2829f 100644 --- a/Classes/System/System.classes.h +++ b/Classes/System/System.classes.h @@ -4,3 +4,6 @@ // Events @class Delegate, Event, EventArgs; + +// Arrays +@class AdaptiveArray; diff --git a/Classes/System/System.h b/Classes/System/System.h index 672d2cc..e0cb4d4 100644 --- a/Classes/System/System.h +++ b/Classes/System/System.h @@ -5,4 +5,7 @@ // Events #import "Delegate.h" #import "Event.h" -#import "EventArgs.h" \ No newline at end of file +#import "EventArgs.h" + +// Arrays +#import "AdaptiveArray.h" \ No newline at end of file