Changeset 2174 for trunk/src/ddraw/OS2SURFACE.CPP
- Timestamp:
- Dec 21, 1999, 2:28:20 AM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/ddraw/OS2SURFACE.CPP
r1752 r2174 1 /* $Id: OS2SURFACE.CPP,v 1.21 1999-12-21 01:28:16 hugh Exp $ */ 2 3 /* 4 * Direct/X Surface class implementaion 5 * 6 * Copyright 1999 Markus Montkowski 7 * 8 * Project Odin Software License can be found in LICENSE.TXT 9 * 10 */ 11 1 12 #include <stdlib.h> 2 13 #include <string.h> … … 17 28 #include "asmutil.h" 18 29 #include "bltFunc.h" 30 #include "colorconv.h" 31 #include "fillfunc.h" 19 32 #include <winerror.h> 20 33 #include <os2win.h> … … 284 297 285 298 WORD wDefaultPalete16[256]; 299 DWORD dwDefaultPalete24[256]; 286 300 BOOL fPalInit=FALSE; 287 301 … … 730 744 { 731 745 case 8: 732 BltSolid = &BltSolid8to8; 746 BltSolid = &BltSolid8to8; 747 ColorConv = NULL; 748 ColorFill = &Fill8on8; 733 749 break; 734 750 case 16: 735 BltSolid = &BltSolid8to16; 751 BltSolid = &BltSolid8to16; 752 ColorConv = &Conv8to16; 753 ColorFill = &Fill8on16; 736 754 break; 737 755 case 24: 738 BltSolid = &BltSolid8to24; 756 BltSolid = &BltSolid8to24; 757 ColorConv = &Conv8to24; 758 ColorFill = &Fill8on24; 739 759 break; 740 760 case 32: 741 BltSolid = &BltSolid8to32; 761 BltSolid = &BltSolid8to32; 762 ColorConv = &Conv8to32; 763 ColorFill = &Fill8on32; 742 764 break; 743 765 default: 744 766 dprintf(("DDRAW: Unsupported System ColorDeapth %d",lpDraw->dCaps.ulDepth)); 745 BltSolid = NULL; 767 BltSolid = NULL; 768 ColorConv = NULL; 769 ColorFill = NULL; 746 770 break; 747 771 } 748 772 break; 749 case 16:773 case 16: 750 774 switch(lpDraw->dCaps.ulDepth) 751 775 { 752 776 case 8: 753 777 BltSolid = &BltSolid16to8; 778 ColorConv = &Conv16to8; 779 ColorFill = &Fill16on8; 754 780 break; 755 781 case 16: 756 BltSolid = &BltSolid16to16; 782 BltSolid = &BltSolid16to16; 783 ColorConv = NULL; 784 ColorFill = &Fill16on16; 757 785 break; 758 786 case 24: 759 BltSolid = &BltSolid16to24; 787 BltSolid = &BltSolid16to24; 788 ColorConv = &Conv16to24; 789 ColorFill = &Fill16on24; 760 790 break; 761 791 case 32: 762 BltSolid = &BltSolid16to32; 792 BltSolid = &BltSolid16to32; 793 ColorConv = &Conv16to32; 794 ColorFill = &Fill16on32; 763 795 break; 764 796 default: 765 797 dprintf(("DDRAW: Unsupported System ColorDeapth %d",lpDraw->dCaps.ulDepth)); 766 BltSolid = NULL; 798 BltSolid = NULL; 799 ColorConv = NULL; 800 ColorFill = NULL; 767 801 break; 768 802 } 769 803 break; 770 case 24:804 case 24: 771 805 switch(lpDraw->dCaps.ulDepth) 772 806 { 773 807 case 8: 774 BltSolid = &BltSolid24to8; 808 BltSolid = &BltSolid24to8; 809 ColorConv = &Conv24to8; 810 ColorFill = &Fill24on8; 775 811 break; 776 812 case 16: 777 BltSolid = &BltSolid24to16; 813 BltSolid = &BltSolid24to16; 814 ColorConv = &Conv24to16; 815 ColorFill = &Fill24on16; 778 816 break; 779 817 case 24: 780 BltSolid = &BltSolid24to24; 818 BltSolid = &BltSolid24to24; 819 ColorConv = NULL; 820 ColorFill = &Fill24on24; 781 821 break; 782 822 case 32: 783 BltSolid = &BltSolid24to32; 823 BltSolid = &BltSolid24to32; 824 ColorConv = &Conv24to32; 825 ColorFill = &Fill24on32; 784 826 break; 785 827 default: 786 828 dprintf(("DDRAW: Unsupported System ColorDeapth %d",lpDraw->dCaps.ulDepth)); 787 BltSolid = NULL; 829 BltSolid = NULL; 830 ColorConv = NULL; 831 ColorFill = NULL; 788 832 break; 789 833 } 790 834 break; 791 case 32:835 case 32: 792 836 switch(lpDraw->dCaps.ulDepth) 793 837 { 794 838 case 8: 795 BltSolid = &BltSolid32to8; 839 BltSolid = &BltSolid32to8; 840 ColorConv = &Conv32to8; 841 ColorFill = &Fill32on8; 796 842 break; 797 843 case 16: 798 BltSolid = &BltSolid32to16; 844 BltSolid = &BltSolid32to16; 845 ColorConv = &Conv32to16; 846 ColorFill = &Fill32on16; 799 847 break; 800 848 case 24: 801 BltSolid = &BltSolid32to24; 849 BltSolid = &BltSolid32to24; 850 ColorConv = &Conv32to24; 851 ColorFill = &Fill32on24; 802 852 break; 803 853 case 32: 804 BltSolid = &BltSolid32to32; 854 BltSolid = &BltSolid32to32; 855 ColorConv = NULL; 856 ColorFill = &Fill32on32; 805 857 break; 806 858 default: 807 859 dprintf(("DDRAW: Unsupported System ColorDeapth %d",lpDraw->dCaps.ulDepth)); 808 BltSolid = NULL; 860 BltSolid = NULL; 861 ColorConv = NULL; 862 ColorFill = NULL; 809 863 break; 810 864 } … … 812 866 default: 813 867 dprintf(("DDRAW: Unsupported DX ColorDeapth %d",lpDraw->GetScreenBpp())); 814 BltSolid = NULL; 868 BltSolid = NULL; 869 ColorConv = NULL; 870 ColorFill = NULL; 815 871 break; 816 872 } … … 1402 1458 //****************************************************************************** 1403 1459 //****************************************************************************** 1404 HRESULT OS2IDirectDrawSurface:: ColorFill(LPRECT lpDestRect,DWORD dwFillColor)1405 { 1406 1407 int i, j, FillWidth, FillHeight;1408 char *pLine, *pFillPos;1409 1410 DWORD *pColor, dwColor,y;1460 HRESULT OS2IDirectDrawSurface::DoColorFill(LPRECT lpDestRect,DWORD dwFillColor) 1461 { 1462 1463 int i, FillWidth, FillHeight, Top, Left; 1464 //char *pLine, *pFillPos; 1465 1466 //DWORD *pColor, dwColor,y; 1411 1467 DWORD *pPal24; 1412 1468 WORD *pPal16; … … 1421 1477 FillWidth = lpDestRect->right - lpDestRect->left; 1422 1478 FillHeight = lpDestRect->bottom - lpDestRect->top -1; 1423 pLine = pDiveBuffer + 1424 (lpDestRect->top*dwPitchDB) + 1425 (lpDestRect->left*dwBytesPPDive); 1479 Top = lpDestRect->top; 1480 Left = lpDestRect->left; 1426 1481 } 1427 1482 else 1428 1483 { 1429 1484 dprintf(("DDRAW: Fill all at addr ")); 1485 Top = 0; 1486 Left = 0; 1430 1487 FillWidth = width; 1431 1488 FillHeight = height -1; 1432 pLine = pDiveBuffer;1433 } 1434 dprintf(("DDRAW: 0x%08X (%d/%d) at\n", pLine,FillWidth,FillHeight));1489 //pLine = pDiveBuffer; 1490 } 1491 //dprintf(("DDRAW: 0x%08X (%d/%d) at\n", pLine,FillWidth,FillHeight)); 1435 1492 1436 1493 // Better safe then sorry … … 1450 1507 ((DefaultPalette[i*3+1]>>2) <<5) + 1451 1508 ((DefaultPalette[i*3]>>3) << 11); 1509 dwDefaultPalete24[i]= ((DefaultPalette[i*3+2]>>3) <<8)+ 1510 ((DefaultPalette[i*3+1]>>2) <<16) + 1511 ((DefaultPalette[i*3]>>3) << 24); 1452 1512 dprintf(( " # %d : RGB=%02X/%02X/%02X => %04X\n", 1453 1513 i, … … 1463 1523 } 1464 1524 pPal16 = &wDefaultPalete16[0]; 1525 pPal24 = &dwDefaultPalete24[0]; 1465 1526 } 1466 1527 else … … 1471 1532 } 1472 1533 1534 if(NULL!=ColorFill) 1535 ColorFill( pDiveBuffer, pFrameBuffer, Top, Left, 1536 FillWidth, FillHeight, dwPitchDB,dwPitchFB, 1537 dwFillColor,(16==lpDraw->dCaps.ulDepth)?(VOID*)pPal16:(VOID*)pPal24); 1538 else 1539 { 1540 dprintf(("DDRAW: ColorFill function is NULL!!")); 1541 } 1542 /* 1473 1543 switch(dwBytesPPDive) 1474 1544 { … … 1634 1704 } 1635 1705 } 1636 1706 */ 1637 1707 return(DD_OK); 1638 1708 } … … 1641 1711 void OS2IDirectDrawSurface::ColorConversion(LPRECT lpRect) 1642 1712 { 1643 char *pSrc,*pDst,*pSLine,*pDLine;1713 //char *pSrc,*pDst,*pSLine,*pDLine; 1644 1714 DWORD CCwidth,CCheight,x,y; 1645 1715 DWORD *pPal24; … … 1656 1726 ((DefaultPalette[i*3+1]>>2) <<5) + 1657 1727 ((DefaultPalette[i*3]>>3) << 11); 1728 dwDefaultPalete24[i]= ((DefaultPalette[i*3+2]>>3) <<8)+ 1729 ((DefaultPalette[i*3+1]>>2) <<16) + 1730 ((DefaultPalette[i*3]>>3) << 24); 1658 1731 dprintf(( " # %d : RGB=%02X/%02X/%02X => %04X\n", 1659 1732 i, … … 1669 1742 } 1670 1743 pPal16 = &wDefaultPalete16[0]; 1744 pPal24 = &dwDefaultPalete24[0]; 1671 1745 } 1672 1746 else … … 1678 1752 if(NULL==lpRect) 1679 1753 { 1680 pSrc = pFrameBuffer;1681 pDst = pDiveBuffer;1754 //pSrc = pFrameBuffer; 1755 //pDst = pDiveBuffer; 1682 1756 CCwidth = width; 1683 1757 CCheight = height; 1758 x = 0; 1759 y = 0; 1684 1760 } 1685 1761 else … … 1691 1767 lpRect->bottom = y; 1692 1768 // end of hack 1769 #if 0 1693 1770 pSrc = pFrameBuffer + 1694 1771 (lpRect->top * dwPitchFB) + … … 1697 1774 (lpRect->top * dwPitchDB) + 1698 1775 (lpRect->left* dwBytesPPDive); 1776 #endif 1777 y = lpRect->top; 1778 x = lpRect->left; 1699 1779 CCwidth = lpRect->right - lpRect->left; 1700 1780 CCheight = lpRect->bottom - lpRect->top; … … 1702 1782 } 1703 1783 1704 dprintf( ("H: %d W: %d\n SRC @ %08X\n DST @ %08X\n", 1705 CCheight, CCwidth, pSrc,pDst)); 1706 1784 // dprintf( ("H: %d W: %d\n SRC @ %08X\n DST @ %08X\n", 1785 // CCheight, CCwidth, pSrc,pDst)); 1786 if(NULL!=ColorConv) 1787 ColorConv( pDiveBuffer, pFrameBuffer, y, x, 1788 CCwidth, CCheight, dwPitchDB,dwPitchFB, 1789 16==lpDraw->dCaps.ulDepth?(VOID*)pPal16:(VOID*)pPal24); 1790 else 1791 { 1792 dprintf(("DDRAW: ColorConv function is NULL!!")); 1793 } 1794 1795 /* 1707 1796 pSLine = pSrc; 1708 1797 pDLine = pDst; … … 1739 1828 { 1740 1829 dprintf(("DDRAW: 8->24Bit CC")); 1830 for(y=0;CCheight;CCheight--,y++) 1831 { 1832 char *pIter; 1833 for(x=0,pIter=pDLine;x<width;x++,pIter=pDLine) 1834 { 1835 *((DWORD*)pIter) = pPal24[pSLine[x]]; 1836 pIter+=3; 1837 } 1838 pSLine += dwPitchFB; 1839 pDLine += dwPitchDB; 1840 } 1741 1841 } 1742 1842 else … … 1749 1849 { 1750 1850 dprintf(("DDRAW: 8->32Bit CC")); 1851 for(y=0;CCheight;CCheight--,y++) 1852 { 1853 for(x=0;x<width;x++) 1854 { 1855 *(((DWORD*)pDLine)+x) = pPal24[pSLine[x]]; 1856 1857 } 1858 pSLine += dwPitchFB; 1859 pDLine += dwPitchDB; 1860 } 1751 1861 } 1752 1862 else … … 1762 1872 break; 1763 1873 } 1764 1765 /*1766 SETUP_BLITTER sBlt;1767 ULONG ulDN1, ulDN2;1768 ULONG rc;1769 ulDN1 = ulDN2 = 0;1770 1771 memset(&sBlt,0,sizeof(sBlt));1772 sBlt.ulStructLen = sizeof(sBlt);1773 sBlt.fccSrcColorFormat = (FOURCC) DDSurfaceDesc.ddpfPixelFormat.dwFourCC;1774 if (NULL!=lpRect)1775 {1776 sBlt.ulSrcWidth = lpRect->right - lpRect->left;1777 sBlt.ulSrcHeight = lpRect->top - lpRect->bottom;1778 sBlt.ulSrcPosX = lpRect->left;1779 sBlt.ulSrcPosY = height - lpRect->top;1780 }1781 else1782 {1783 sBlt.ulSrcWidth = width;1784 sBlt.ulSrcHeight = height;1785 sBlt.ulSrcPosX = 0;1786 sBlt.ulSrcPosY = 0;1787 }1788 sBlt.fccDstColorFormat = FOURCC_SCRN;1789 sBlt.ulDstWidth = sBlt.ulSrcWidth;1790 sBlt.ulDstHeight = sBlt.ulSrcHeight;1791 sBlt.lDstPosX = sBlt.ulSrcPosX;1792 sBlt.lDstPosY = sBlt.ulSrcPosY;1793 sBlt.ulNumDstRects = DIVE_FULLY_VISIBLE;1794 1795 dprintf( ("Colorconversion:\n FCC SRC %08X\n FCC DST %08X\n",1796 sBlt.fccSrcColorFormat,1797 sBlt.fccDstColorFormat ));1798 1799 rc = DiveAllocImageBuffer( hDiveCC,1800 &ulDN1,1801 sBlt.fccSrcColorFormat,1802 width,1803 height,1804 dwPitchFB,1805 (PBYTE)pFrameBuffer);1806 dprintf("AllocDiveSrc Buffer rc= 0x%08X\n",rc);1807 1808 rc = DiveAllocImageBuffer( hDiveCC,1809 &ulDN2,1810 sBlt.fccDstColorFormat,1811 width,1812 height,1813 dwPitchDB,1814 (PBYTE)pDiveBuffer);1815 dprintf(("DDRAW: AllocDiveDst Buffer rc= 0x%08X\n",rc));1816 1817 rc = DiveSetupBlitter( hDiveCC,1818 &sBlt);1819 dprintf(("DDRAW: SetupBlitter rc= %X\n",rc));1820 1821 rc = DiveBlitImage( hDiveCC,1822 ulDN1,1823 ulDN2);1824 1825 dprintf(("DDRAW: Blit rc= %X\n",rc));1826 1827 rc = DiveFreeImageBuffer( hDiveCC,1828 ulDN1);1829 dprintf(("DDRAW: Free Src rc= %X\n",rc));1830 1831 rc = DiveFreeImageBuffer( hDiveCC,1832 ulDN2);1833 1834 dprintf(("DDRAW: Free dst rc= %X\n",rc));1835 1874 */ 1836 1875 } … … 2488 2527 return DDERR_INVALIDPARAMS; 2489 2528 2490 // ToDo : as we fill the DiveBuffer check if we need to convert the 2491 // specified color 2492 2493 dest->ColorFill(lpDestRect,lpDDBltFx->dwFillColor); 2529 dest->DoColorFill(lpDestRect,lpDDBltFx->dwFillColor); 2494 2530 2495 2531 return(DD_OK); // according to the M$ DDK only one flag shall/can be set. … … 2530 2566 { 2531 2567 // ToDo: Realy implement code to get the correct index for black in 8 Bitmode 2532 dest-> ColorFill(lpDestRect, 0 );2568 dest->DoColorFill(lpDestRect, 0 ); 2533 2569 } 2534 2570 else 2535 dest-> ColorFill(lpDestRect, 0);2571 dest->DoColorFill(lpDestRect, 0); 2536 2572 return DD_OK; 2537 2573 } … … 2541 2577 if(1==dest->dwBytesPPDive) 2542 2578 { 2543 // ToDo: Realy implement code to get the correct index for blackin 8 Bitmode2544 dest-> ColorFill(lpDestRect, 0xFFFFFFFF );2579 // ToDo: Realy implement code to get the correct index for white in 8 Bitmode 2580 dest->DoColorFill(lpDestRect, 0xFFFFFFFF ); 2545 2581 } 2546 2582 else 2547 dest-> ColorFill(lpDestRect, 0xFFFFFFFF);2548 return DD_OK;2583 dest->DoColorFill(lpDestRect, 0xFFFFFFFF); 2584 return (DD_OK); 2549 2585 } 2550 2586
Note:
See TracChangeset
for help on using the changeset viewer.