openvg/openvgrefimplementation/sfopenvg/sfopenvg/riMath.cpp
author Faisal Memon <faisal.memon@nokia.com>
Thu, 29 Jul 2010 19:13:12 +0100
branchNewGraphicsArchitecture
changeset 135 1c608d9c6c51
parent 66 9662a45141ef
permissions -rw-r--r--
Minor change in diagram
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
     1
/*------------------------------------------------------------------------
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
     2
 *
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
     3
 * OpenVG 1.1 Reference Implementation
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
     4
 * -----------------------------------
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
     5
 *
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
     6
 * Copyright (c) 2007 The Khronos Group Inc.
66
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
     7
 * Portions Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
6
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
     8
 *
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
     9
 * Permission is hereby granted, free of charge, to any person obtaining a
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    10
 * copy of this software and /or associated documentation files
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    11
 * (the "Materials "), to deal in the Materials without restriction,
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    12
 * including without limitation the rights to use, copy, modify, merge,
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    13
 * publish, distribute, sublicense, and/or sell copies of the Materials,
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    14
 * and to permit persons to whom the Materials are furnished to do so,
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    15
 * subject to the following conditions: 
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    16
 *
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    17
 * The above copyright notice and this permission notice shall be included 
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    18
 * in all copies or substantial portions of the Materials. 
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    19
 *
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    20
 * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    21
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    22
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    23
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    24
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    25
 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    26
 * THE USE OR OTHER DEALINGS IN THE MATERIALS.
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    27
 *
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    28
 *//**
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    29
 * \file
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    30
 * \brief	Implementation of non-inline matrix functions.
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    31
 * \note	
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    32
 *//*-------------------------------------------------------------------*/
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    33
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    34
#include "riDefs.h"
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    35
#include "riMath.h"
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    36
66
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    37
#if 0
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    38
#include <stdio.h>
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    39
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    40
static void printMatrix(const Matrix3x3& m)
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    41
{
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    42
    // For tracing a bug in matrix inverse in release-builds.
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    43
    for(int i = 0; i < 3; i++)
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    44
    {
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    45
        printf("[%.4f %.4f %.4f]\n", m[i][0], m[i][1], m[i][2]);
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    46
    }
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    47
}
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    48
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    49
#endif
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    50
6
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    51
namespace OpenVGRI
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    52
{
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    53
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    54
/*-------------------------------------------------------------------*//*!
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    55
* \brief	Inverts a 3x3 matrix. Returns false if the matrix is singular.
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    56
* \param	
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    57
* \return	
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    58
* \note		
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    59
*//*-------------------------------------------------------------------*/
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    60
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    61
bool Matrix3x3::invert()
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    62
{
66
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    63
    // \todo Save computation on affine matrices?
6
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    64
	bool affine = isAffine();
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    65
	RIfloat det00 = matrix[1][1]*matrix[2][2] - matrix[2][1]*matrix[1][2];
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    66
	RIfloat det01 = matrix[2][0]*matrix[1][2] - matrix[1][0]*matrix[2][2];
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    67
	RIfloat det02 = matrix[1][0]*matrix[2][1] - matrix[2][0]*matrix[1][1];
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    68
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    69
	RIfloat d = matrix[0][0]*det00 + matrix[0][1]*det01 + matrix[0][2]*det02;
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    70
	if( d == 0.0f ) return false;	//singular, leave the matrix unmodified and return false
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    71
	d = 1.0f / d;
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    72
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    73
	Matrix3x3 t;
66
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    74
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    75
    // \note There is some bug (in GCC?) in accessing matrix elements: If data
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    76
    // is accessed like: t[i][j], then the following will produce incorrect
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    77
    // resulst on optimized builds. If the data is accessed through t.matrix,
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    78
    // then the output is correct. Debug build works correctly, and if print
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    79
    // calls are inserted, the code also works correctly. The context to get
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    80
    // this bug appear are fill paints (linear and radial gradient test
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    81
    // functions).
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    82
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    83
	t.matrix[0][0] = d * det00;
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    84
	t.matrix[1][0] = d * det01;
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    85
	t.matrix[2][0] = d * det02;
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    86
    //printf("t\n");
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    87
    //printMatrix(t);
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    88
	t.matrix[0][1] = d * (matrix[2][1]*matrix[0][2] - matrix[0][1]*matrix[2][2]);
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    89
	t.matrix[1][1] = d * (matrix[0][0]*matrix[2][2] - matrix[2][0]*matrix[0][2]);
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    90
	t.matrix[2][1] = d * (matrix[2][0]*matrix[0][1] - matrix[0][0]*matrix[2][1]);
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    91
	t.matrix[0][2] = d * (matrix[0][1]*matrix[1][2] - matrix[1][1]*matrix[0][2]);
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    92
	t.matrix[1][2] = d * (matrix[1][0]*matrix[0][2] - matrix[0][0]*matrix[1][2]);
9662a45141ef Merge 2. Update math support to make available integer comparing, clamping and shifting.
Faisal Memon <faisal.memon@nokia.com>
parents: 6
diff changeset
    93
	t.matrix[2][2] = d * (matrix[0][0]*matrix[1][1] - matrix[1][0]*matrix[0][1]);
6
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    94
	if(affine)
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    95
		t[2].set(0,0,1);	//affine matrix stays affine
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    96
	*this = t;
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    97
	return true;
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    98
}
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
    99
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
   100
//==============================================================================================
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
   101
250ac10a3d98 transplant of the KhronosRI work done on the SFL repo until changeset 22d01ad3515c - Includes 'Bug 1394 - KhronosRI - armv5 def files missing', 'Bug 1395 - KhronosRI - RVCT doesn't like 'OpenVGRI' qualified helper function names', and the ongoing work on 'Bug 31 - OpenVG implementation is a stub, so no icons or window decorations are displayed.'
MattD <mattd@symbian.org>
parents:
diff changeset
   102
}	//namespace OpenVGRI