Overview
| Comment: | Add initial OF4x4Matrix |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | 3d-affine-transforms |
| Files: | files | file ages | folders |
| SHA3-256: |
831ce309297c376fc85ca6beea929c89 |
| User & Date: | js on 2021-09-24 01:35:26 |
| Other Links: | branch diff | manifest | tags |
Context
|
2021-09-26
| ||
| 20:48 | OF4x4Matrix: Add -[multiplyWithMatrix:] (check-in: 42b5eee531 user: js tags: 3d-affine-transforms) | |
|
2021-09-24
| ||
| 01:35 | Add initial OF4x4Matrix (check-in: 831ce30929 user: js tags: 3d-affine-transforms) | |
|
2021-09-05
| ||
| 20:19 | Don't automatically run tests (check-in: be8865bcd2 user: js tags: trunk) | |
Changes
Modified src/Makefile from [89f588f854] to [c22506806a].
1 2 3 4 5 6 7 8 9 10 11 12 |
include ../extra.mk
SUBDIRS = ${RUNTIME} exceptions encodings forwarding
SUBDIRS_AFTER = ${BRIDGE}
DISTCLEAN = Info.plist objfw-defs.h
SHARED_LIB = ${OBJFW_SHARED_LIB}
STATIC_LIB = ${OBJFW_STATIC_LIB}
FRAMEWORK = ${OBJFW_FRAMEWORK}
LIB_MAJOR = ${OBJFW_LIB_MAJOR}
LIB_MINOR = ${OBJFW_LIB_MINOR}
| > | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
include ../extra.mk
SUBDIRS = ${RUNTIME} exceptions encodings forwarding
SUBDIRS_AFTER = ${BRIDGE}
DISTCLEAN = Info.plist objfw-defs.h
SHARED_LIB = ${OBJFW_SHARED_LIB}
STATIC_LIB = ${OBJFW_STATIC_LIB}
FRAMEWORK = ${OBJFW_FRAMEWORK}
LIB_MAJOR = ${OBJFW_LIB_MAJOR}
LIB_MINOR = ${OBJFW_LIB_MINOR}
SRCS = OF4x4Matrix.m \
OFASPrintF.m \
OFApplication.m \
OFArray.m \
OFBase64.m \
OFBlock.m \
OFCRC16.m \
OFCRC32.m \
OFCharacterSet.m \
|
| ︙ | ︙ |
Added src/OF4x4Matrix.h version [f31b2162fa].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
/*
* Copyright (c) 2008-2021 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#import "OFObject.h"
OF_ASSUME_NONNULL_BEGIN
/**
* @brief A 4x4 matrix of floats.
*/
OF_SUBCLASSING_RESTRICTED
@interface OF4x4Matrix: OFObject
{
float _values[16];
}
#ifdef OF_HAVE_CLASS_PROPERTIES
@property (readonly, class) OF4x4Matrix *identity;
#endif
/**
* @brief An array of the 16 floats of the 4x4 matrix in column-major format.
*
* These may be modified directly.
*/
@property (readonly, nonatomic) float *values;
/**
* @brief Returns the 4x4 identity matrix.
*/
+ (OF4x4Matrix *)identity;
/**
* @brief Creates a new 4x4 matrix with the specified values.
*
* @param values An array of 16 floats in column-major format
* @return A new, autoreleased OF4x4Matrix
*/
+ (instancetype)matrixWithValues: (const float [_Nonnull 16])values;
/**
* @brief Initializes an already allocated 4x4 matrix with the specified values.
*
* @param values An array of 16 floats in column-major format
* @return An initialized OF4x4Matrix
*/
- (instancetype)initWithValues: (const float [_Nonnull 16])values;
/**
* @brief Transposes the matrix.
*/
- (void)transpose;
@end
OF_ASSUME_NONNULL_END
|
Added src/OF4x4Matrix.m version [070da82233].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
/*
* Copyright (c) 2008-2021 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#import "OF4x4Matrix.h"
#import "OFString.h"
static const float identityValues[16] = {
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
};
static OF4x4Matrix *identity;
@implementation OF4x4Matrix
+ (void)initialize
{
if (self != [OF4x4Matrix class])
return;
identity = [[OF4x4Matrix alloc] initWithValues: identityValues];
}
+ (OF4x4Matrix *)identity
{
return identity;
}
+ (instancetype)matrixWithValues: (const float [16])values
{
return [[[self alloc] initWithValues: values] autorelease];
}
- (instancetype)initWithValues: (const float [16])values
{
self = [super init];
memcpy(_values, values, 16 * sizeof(float));
return self;
}
- (float *)values
{
return _values;
}
- (bool)isEqual: (OF4x4Matrix *)matrix
{
if (![matrix isKindOfClass: [OF4x4Matrix class]])
return false;
return (memcmp(_values, matrix->_values, 16 * sizeof(float)) == 0);
}
- (unsigned long)hash
{
unsigned long hash;
OFHashInit(&hash);
for (size_t i = 0; i < 16; i++)
OFHashAddHash(&hash, OFFloatToRawUInt32(_values[i]));
OFHashFinalize(&hash);
return hash;
}
- (void)transpose
{
float copy[16];
memcpy(copy, _values, 16 * sizeof(float));
_values[1] = copy[4];
_values[2] = copy[8];
_values[3] = copy[12];
_values[4] = copy[1];
_values[6] = copy[9];
_values[7] = copy[13];
_values[8] = copy[2];
_values[9] = copy[6];
_values[11] = copy[14];
_values[12] = copy[3];
_values[13] = copy[7];
_values[14] = copy[11];
}
- (OFString *)description
{
return [OFString stringWithFormat:
@"<OF4x4Matrix: {\n"
@"\t%g %g %g %g\n"
@"\t%g %g %g %g\n"
@"\t%g %g %g %g\n"
@"\t%g %g %g %g\n"
@"}>",
_values[0], _values[4], _values[8], _values[12],
_values[1], _values[5], _values[9], _values[13],
_values[2], _values[6], _values[10], _values[14],
_values[3], _values[7], _values[11], _values[15]];
}
@end
|
Modified src/ObjFW.h from [304cf44661] to [090568b11f].
| ︙ | ︙ | |||
124 125 126 127 128 129 130 131 132 133 134 135 136 137 | #import "OFApplication.h" #import "OFSystemInfo.h" #import "OFLocale.h" #import "OFOptionsParser.h" #import "OFTimer.h" #import "OFRunLoop.h" #ifdef OF_WINDOWS # import "OFWindowsRegistryKey.h" #endif #import "OFAllocFailedException.h" #import "OFException.h" | > > | 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | #import "OFApplication.h" #import "OFSystemInfo.h" #import "OFLocale.h" #import "OFOptionsParser.h" #import "OFTimer.h" #import "OFRunLoop.h" #import "OF4x4Matrix.h" #ifdef OF_WINDOWS # import "OFWindowsRegistryKey.h" #endif #import "OFAllocFailedException.h" #import "OFException.h" |
| ︙ | ︙ |
Modified tests/Makefile from [aa8c0b4a05] to [ecc310e44e].
| ︙ | ︙ | |||
9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
${PROG_NOINST}.arm9 \
${PROG_NOINST}.nds
DISTCLEAN = Info.plist
PROG_NOINST = tests${PROG_SUFFIX}
STATIC_LIB_NOINST = ${TESTS_STATIC_LIB}
SRCS = ForwardingTests.m \
OFArrayTests.m \
${OF_BLOCK_TESTS_M} \
OFCharacterSetTests.m \
OFDataTests.m \
OFDateTests.m \
OFDictionaryTests.m \
OFInvocationTests.m \
| > | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
${PROG_NOINST}.arm9 \
${PROG_NOINST}.nds
DISTCLEAN = Info.plist
PROG_NOINST = tests${PROG_SUFFIX}
STATIC_LIB_NOINST = ${TESTS_STATIC_LIB}
SRCS = ForwardingTests.m \
OF4x4MatrixTests.m \
OFArrayTests.m \
${OF_BLOCK_TESTS_M} \
OFCharacterSetTests.m \
OFDataTests.m \
OFDateTests.m \
OFDictionaryTests.m \
OFInvocationTests.m \
|
| ︙ | ︙ |
Added tests/OF4x4MatrixTests.m version [e6c6082b2d].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
/*
* Copyright (c) 2008-2021 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#import "TestsAppDelegate.h"
static OFString *const module = @"OF4x4MatrixTests";
@implementation TestsAppDelegate (OF4x4MatrixTests)
- (void)_4x4MatrixTests
{
void *pool = objc_autoreleasePoolPush();
OF4x4Matrix *matrix;
TEST(@"+[identity]",
memcmp([[OF4x4Matrix identity] values], (float [16]){
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
}, 16 * sizeof(float)) == 0)
TEST(@"+[matrixWithValues:]",
(matrix = [OF4x4Matrix matrixWithValues: (float [16]){
1, 2, 3, 4,
5, 6, 7, 8,
9, 10, 11, 12,
13, 14, 15, 16
}]))
TEST(@"-[description]",
[matrix.description isEqual: @"<OF4x4Matrix: {\n"
@"\t1 5 9 13\n"
@"\t2 6 10 14\n"
@"\t3 7 11 15\n"
@"\t4 8 12 16\n"
@"}>"])
TEST(@"-[transpose]",
R([matrix transpose]) && memcmp(matrix.values, (float [16]){
1, 5, 9, 13,
2, 6, 10, 14,
3, 7, 11, 15,
4, 8, 12, 16
}, 16 * sizeof(float)) == 0)
TEST(@"-[isEqual:]", [[OF4x4Matrix identity] isEqual:
[OF4x4Matrix matrixWithValues: (float [16]){
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
}]])
objc_autoreleasePoolPop(pool);
}
@end
|
Modified tests/TestsAppDelegate.h from [36680e2682] to [b159be6a3f].
| ︙ | ︙ | |||
54 55 56 57 58 59 60 61 62 63 64 65 66 67 | int _fails; } - (void)outputTesting: (OFString *)test inModule: (OFString *)module; - (void)outputSuccess: (OFString *)test inModule: (OFString *)module; - (void)outputFailure: (OFString *)test inModule: (OFString *)module; @end @interface TestsAppDelegate (OFArrayTests) - (void)arrayTests; @end @interface TestsAppDelegate (OFBlockTests) - (void)blockTests; | > > > > | 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | int _fails; } - (void)outputTesting: (OFString *)test inModule: (OFString *)module; - (void)outputSuccess: (OFString *)test inModule: (OFString *)module; - (void)outputFailure: (OFString *)test inModule: (OFString *)module; @end @interface TestsAppDelegate (OF4x4MatrixTests) - (void)_4x4MatrixTests; @end @interface TestsAppDelegate (OFArrayTests) - (void)arrayTests; @end @interface TestsAppDelegate (OFBlockTests) - (void)blockTests; |
| ︙ | ︙ |
Modified tests/TestsAppDelegate.m from [1130ab2e6c] to [654f876616].
| ︙ | ︙ | |||
372 373 374 375 376 377 378 379 380 381 382 383 384 385 | [self XMLNodeTests]; [self XMLElementBuilderTests]; #ifdef OF_HAVE_FILES [self serializationTests]; #endif [self JSONTests]; [self propertyListTests]; #if defined(OF_HAVE_PLUGINS) [self pluginTests]; #endif #ifdef OF_WINDOWS [self windowsRegistryKeyTests]; #endif | > > | 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 | [self XMLNodeTests]; [self XMLElementBuilderTests]; #ifdef OF_HAVE_FILES [self serializationTests]; #endif [self JSONTests]; [self propertyListTests]; [self _4x4MatrixTests]; #if defined(OF_HAVE_PLUGINS) [self pluginTests]; #endif #ifdef OF_WINDOWS [self windowsRegistryKeyTests]; #endif |
| ︙ | ︙ |