graphicscomposition/openwfcompositionengine/common/src/owfimage.c
changeset 36 01a6848ebfd7
parent 0 5d03bc08d59c
child 152 9f1c3fea0f87
equal deleted inserted replaced
0:5d03bc08d59c 36:01a6848ebfd7
     1 /* Copyright (c) 2009 The Khronos Group Inc.
     1 /* Copyright (c) 2009-2010 The Khronos Group Inc.
     2  *
     2  *
     3  * Permission is hereby granted, free of charge, to any person obtaining a
     3  * Permission is hereby granted, free of charge, to any person obtaining a
     4  * copy of this software and/or associated documentation files (the
     4  * copy of this software and/or associated documentation files (the
     5  * "Materials"), to deal in the Materials without restriction, including
     5  * "Materials"), to deal in the Materials without restriction, including
     6  * without limitation the rights to use, copy, modify, merge, publish,
     6  * without limitation the rights to use, copy, modify, merge, publish,
  1412         srcPtr += srcLineDelta; \
  1412         srcPtr += srcLineDelta; \
  1413         dstPtr += dstLineDelta; \
  1413         dstPtr += dstLineDelta; \
  1414         maskPtr += maskLineDelta; \
  1414         maskPtr += maskLineDelta; \
  1415         --rowCount; \
  1415         --rowCount; \
  1416     }
  1416     }
       
  1417 	
       
  1418 #define BLENDER_INNER_LOOP_END_NO_MASK \
       
  1419                 DA = blend->destinationFullyOpaque ? OWF_FULLY_OPAQUE : DA; \
       
  1420             } /* end tsColor check */ \
       
  1421             srcPtr ++; \
       
  1422             dstPtr ++; \
       
  1423             --colCount; \
       
  1424         } \
       
  1425         srcPtr += srcLineDelta; \
       
  1426         dstPtr += dstLineDelta; \
       
  1427         --rowCount; \
       
  1428     }
  1417 
  1429 
  1418 #define TSC blend->tsColor->color
  1430 #define TSC blend->tsColor->color
  1419 #define SC srcPtr->color
  1431 #define SC srcPtr->color
  1420 
  1432 
  1421 /* Note: actually would be better to compare integer values
  1433 /* Note: actually would be better to compare integer values
  1550             BLENDER_INNER_LOOP_BEGIN;
  1562             BLENDER_INNER_LOOP_BEGIN;
  1551                 DR = SR;
  1563                 DR = SR;
  1552                 DG = SG;
  1564                 DG = SG;
  1553                 DB = SB;
  1565                 DB = SB;
  1554                 DA = OWF_FULLY_OPAQUE;
  1566                 DA = OWF_FULLY_OPAQUE;
  1555             BLENDER_INNER_LOOP_END;
  1567             BLENDER_INNER_LOOP_END_NO_MASK;
  1556             break;
  1568             break;
  1557         }
  1569         }
  1558 
  1570 
  1559         case OWF_TRANSPARENCY_GLOBAL_ALPHA:
  1571         case OWF_TRANSPARENCY_GLOBAL_ALPHA:
  1560         {
  1572         {
  1569                      OWF_ALPHA_MAX_VALUE;
  1581                      OWF_ALPHA_MAX_VALUE;
  1570                 DB = (SB * GA + DB * (OWF_FULLY_OPAQUE - GA) + OWF_BLEND_ROUNDING_VALUE) /
  1582                 DB = (SB * GA + DB * (OWF_FULLY_OPAQUE - GA) + OWF_BLEND_ROUNDING_VALUE) /
  1571                      OWF_ALPHA_MAX_VALUE;
  1583                      OWF_ALPHA_MAX_VALUE;
  1572                 DA = GA + (DA * (OWF_FULLY_OPAQUE - GA) + OWF_BLEND_ROUNDING_VALUE) / 
  1584                 DA = GA + (DA * (OWF_FULLY_OPAQUE - GA) + OWF_BLEND_ROUNDING_VALUE) / 
  1573                      OWF_ALPHA_MAX_VALUE;
  1585                      OWF_ALPHA_MAX_VALUE;
  1574             BLENDER_INNER_LOOP_END;
  1586             BLENDER_INNER_LOOP_END_NO_MASK;
  1575             break;
  1587             break;
  1576         }
  1588         }
  1577 
  1589 
  1578         case OWF_TRANSPARENCY_SOURCE_ALPHA:
  1590         case OWF_TRANSPARENCY_SOURCE_ALPHA:
  1579         {
  1591         {
  1584             BLENDER_INNER_LOOP_BEGIN;
  1596             BLENDER_INNER_LOOP_BEGIN;
  1585                 DR = SR + (DR * (OWF_FULLY_OPAQUE - SA) + OWF_BLEND_ROUNDING_VALUE) / OWF_ALPHA_MAX_VALUE;
  1597                 DR = SR + (DR * (OWF_FULLY_OPAQUE - SA) + OWF_BLEND_ROUNDING_VALUE) / OWF_ALPHA_MAX_VALUE;
  1586                 DG = SG + (DG * (OWF_FULLY_OPAQUE - SA) + OWF_BLEND_ROUNDING_VALUE) / OWF_ALPHA_MAX_VALUE;
  1598                 DG = SG + (DG * (OWF_FULLY_OPAQUE - SA) + OWF_BLEND_ROUNDING_VALUE) / OWF_ALPHA_MAX_VALUE;
  1587                 DB = SB + (DB * (OWF_FULLY_OPAQUE - SA) + OWF_BLEND_ROUNDING_VALUE) / OWF_ALPHA_MAX_VALUE;
  1599                 DB = SB + (DB * (OWF_FULLY_OPAQUE - SA) + OWF_BLEND_ROUNDING_VALUE) / OWF_ALPHA_MAX_VALUE;
  1588                 DA = SA + (DA * (OWF_FULLY_OPAQUE - SA) + OWF_BLEND_ROUNDING_VALUE) / OWF_ALPHA_MAX_VALUE;
  1600                 DA = SA + (DA * (OWF_FULLY_OPAQUE - SA) + OWF_BLEND_ROUNDING_VALUE) / OWF_ALPHA_MAX_VALUE;
  1589             BLENDER_INNER_LOOP_END;
  1601             BLENDER_INNER_LOOP_END_NO_MASK;
  1590             break;
  1602             break;
  1591         }
  1603         }
  1592 
  1604 
  1593         case OWF_TRANSPARENCY_MASK:
  1605         case OWF_TRANSPARENCY_MASK:
  1594         {
  1606         {
  1625                      OWF_ALPHA_MAX_VALUE;
  1637                      OWF_ALPHA_MAX_VALUE;
  1626                 DB = (SB * GA + DB * (OWF_FULLY_OPAQUE - SAEA) + OWF_BLEND_ROUNDING_VALUE) /
  1638                 DB = (SB * GA + DB * (OWF_FULLY_OPAQUE - SAEA) + OWF_BLEND_ROUNDING_VALUE) /
  1627                      OWF_ALPHA_MAX_VALUE;
  1639                      OWF_ALPHA_MAX_VALUE;
  1628                 DA = SAEA + (DA * (OWF_FULLY_OPAQUE - SAEA) + OWF_BLEND_ROUNDING_VALUE) /
  1640                 DA = SAEA + (DA * (OWF_FULLY_OPAQUE - SAEA) + OWF_BLEND_ROUNDING_VALUE) /
  1629                          OWF_ALPHA_MAX_VALUE;
  1641                          OWF_ALPHA_MAX_VALUE;
  1630             BLENDER_INNER_LOOP_END;
  1642             BLENDER_INNER_LOOP_END_NO_MASK;
  1631             break;
  1643             break;
  1632         }
  1644         }
  1633 
  1645 
  1634         case OWF_TRANSPARENCY_GLOBAL_ALPHA | OWF_TRANSPARENCY_MASK:
  1646         case OWF_TRANSPARENCY_GLOBAL_ALPHA | OWF_TRANSPARENCY_MASK:
  1635         {
  1647         {
  1807             padding = 4;
  1819             padding = 4;
  1808             break;
  1820             break;
  1809         }
  1821         }
  1810         default:
  1822         default:
  1811         {
  1823         {
       
  1824 			OWF_ASSERT(0);
  1812             break;
  1825             break;
  1813         }
  1826         }
  1814     }
  1827     }
  1815 
  1828 
  1816     OWF_ASSERT(padding);
       
  1817 
  1829 
  1818     return padding;
  1830     return padding;
  1819 }
  1831 }
  1820 
  1832 
  1821 /*----------------------------------------------------------------------------*/
  1833 /*----------------------------------------------------------------------------*/