Re-enable VisualEffect.scale() but reallocate the mesh vertex lists properly this time.

git-svn-id: http://svn.berlios.de/svnroot/repos/oolite-linux/trunk@5264 127b21dd-08f5-0310-b4b7-95ae10353056
This commit is contained in:
Chris Morris 2012-08-27 17:30:30 +00:00
parent c217d53c8a
commit a2a5b0f8b8
3 changed files with 23 additions and 4 deletions

View File

@ -170,6 +170,7 @@ typedef struct
- (BoundingBox) findSubentityBoundingBoxWithPosition:(Vector)position rotMatrix:(OOMatrix)rotMatrix;
- (OOMesh *) meshRescaledBy:(GLfloat)scaleFactor;
- (void) copyVertexArray;
@end

View File

@ -753,11 +753,29 @@ static NSString *NormalModeDescription(OOMeshNormalMode mode)
- (OOMesh *)meshRescaledBy:(GLfloat)scaleFactor
{
OOMesh *result = [self mutableCopy];
[result copyVertexArray];
[result rescaleByFactor:scaleFactor];
return [result autorelease];
}
// create copies of the vertex arrays for safe scaling
- (void) copyVertexArray
{
NSData *prevData = [_retainedObjects objectForKey:@"vertices"];
NSData *vertData = [[NSData alloc] initWithData:prevData];
[self setRetainedObject:vertData forKey:@"vertices"];
_vertices = (Vector *)[vertData bytes];
[vertData release];
NSData *prevVArray = [_retainedObjects objectForKey:@"vertexArray"];
NSData *vertArray = [[NSData alloc] initWithData:prevVArray];
[self setRetainedObject:vertArray forKey:@"vertexArray"];
_displayLists.vertexArray = (Vector *)[vertArray bytes];
[vertArray release];
}
- (void)setBindingTarget:(id<OOWeakReferenceSupport>)target
{
unsigned i;

View File

@ -39,7 +39,7 @@ static JSBool VisualEffectGetProperty(JSContext *context, JSObject *this, jsid p
static JSBool VisualEffectSetProperty(JSContext *context, JSObject *this, jsid propID, JSBool strict, jsval *value);
static JSBool VisualEffectRemove(JSContext *context, uintN argc, jsval *vp);
//static JSBool VisualEffectScale(JSContext *context, uintN argc, jsval *vp);
static JSBool VisualEffectScale(JSContext *context, uintN argc, jsval *vp);
static JSBool VisualEffectGetShaders(JSContext *context, uintN argc, jsval *vp);
static JSBool VisualEffectSetShaders(JSContext *context, uintN argc, jsval *vp);
static JSBool VisualEffectGetMaterials(JSContext *context, uintN argc, jsval *vp);
@ -105,7 +105,7 @@ static JSFunctionSpec sVisualEffectMethods[] =
{ "getMaterials", VisualEffectGetMaterials, 0 },
{ "getShaders", VisualEffectGetShaders, 0 },
{ "remove", VisualEffectRemove, 0 },
// { "scale", VisualEffectScale, 1 },
{ "scale", VisualEffectScale, 1 },
{ "setMaterials", VisualEffectSetMaterials, 1 },
{ "setShaders", VisualEffectSetShaders, 2 },
@ -356,7 +356,7 @@ static JSBool VisualEffectRemove(JSContext *context, uintN argc, jsval *vp)
}
/* // doesn't work as meshes are shared
// doesn't work as meshes are shared
static JSBool VisualEffectScale(JSContext *context, uintN argc, jsval *vp)
{
OOJS_NATIVE_ENTER(context)
@ -385,7 +385,7 @@ static JSBool VisualEffectScale(JSContext *context, uintN argc, jsval *vp)
return YES;
OOJS_NATIVE_EXIT
} */
}