mirror of
https://github.com/thes3m/XNI
synced 2024-12-26 13:26:06 +01:00
103 lines
3.2 KiB
Objective-C
103 lines
3.2 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.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
|