1
0
mirror of https://github.com/thes3m/XNI synced 2024-12-26 13:26:06 +01:00
Matej Jan d5b2897d8b Added 3D Model support.
git-svn-id: http://xni.googlecode.com/svn/XNI@42 ac433895-eea3-a490-d80a-17149a75e588
2010-11-30 23:26:03 +00:00

119 lines
3.7 KiB
Objective-C

//
// VertexElement.m
// XNI
//
// Created by Matej Jan on 21.9.10.
// Copyright 2010 Retronator. All rights reserved.
//
#import "VertexElement.h"
#import "Retronator.Xni.Framework.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;
+ (VertexElementFormat) getElementFormatForType:(Class)type {
if (type == [NSNumber class]) {
return VertexElementFormatSingle;
} else if (type == [Vector2 class]) {
return VertexElementFormatVector2;
} else if (type == [Vector3 class]) {
return VertexElementFormatVector3;
} else if (type == [Vector4 class]) {
return VertexElementFormatVector4;
} else {
[NSException raise:@"NotImplementedException" format:@"The type %@ is not a valid vertex element format.", type];
return 0;
}
}
+ (int) getSizeForFormat:(VertexElementFormat)format {
switch (format) {
case VertexElementFormatSingle:
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