ULONG
NTAPI
XFORMOBJ_UpdateAccel(
- IN XFORMOBJ *pxo)
+ IN OUT XFORMOBJ *pxo)
{
PMATRIX pmx = XFORMOBJ_pmx(pxo);
ULONG
NTAPI
XFORMOBJ_iSetXform(
- OUT XFORMOBJ *pxo,
+ IN OUT XFORMOBJ *pxo,
IN const XFORML *pxform)
{
PMATRIX pmx = XFORMOBJ_pmx(pxo);
+ FLOATOBJ ef1, ef2, efTemp;
/* Check parameters */
if (!pxo || !pxform) return DDI_ERROR;
/* Check if the xform is valid */
- if ((pxform->eM11 == 0) || (pxform->eM22 == 0)) return DDI_ERROR;
+ /* M11 * M22 - M12 * M21 != 0 */
+ FLOATOBJ_SetFloat(&ef1, pxform->eM11);
+ FLOATOBJ_SetFloat(&efTemp, pxform->eM22);
+ FLOATOBJ_Mul(&ef1, &efTemp);
+ FLOATOBJ_SetFloat(&ef2, pxform->eM12);
+ FLOATOBJ_SetFloat(&efTemp, pxform->eM21);
+ FLOATOBJ_Mul(&ef2, &efTemp);
+ if (FLOATOBJ_Equal(&ef1, &ef2))
+ return DDI_ERROR;
/* Copy members */
FLOATOBJ_SetFloat(&pmx->efM11, pxform->eM11);
ULONG
NTAPI
XFORMOBJ_iCombine(
- IN XFORMOBJ *pxo,
+ IN OUT XFORMOBJ *pxo,
IN XFORMOBJ *pxo1,
IN XFORMOBJ *pxo2)
{
ULONG
NTAPI
XFORMOBJ_iCombineXform(
- IN XFORMOBJ *pxo,
+ IN OUT XFORMOBJ *pxo,
IN XFORMOBJ *pxo1,
IN XFORML *pxform,
IN BOOL bLeftMultiply)