亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? d3dtextr.cpp

?? 傳奇3客戶端源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
        fseek( file, tga.IDLength, SEEK_CUR );

    m_dwWidth   = tga.ImageWidth;
    m_dwHeight  = tga.ImageHeight;
    m_dwBPP     = tga.PixelDepth;
    m_pRGBAData = new DWORD[m_dwWidth*m_dwHeight];

    if( m_pRGBAData == NULL )
    {
        fclose(file);
        return E_FAIL;
    }

    for( DWORD y=0; y<m_dwHeight; y++ )
    {
        DWORD dwOffset = y*m_dwWidth;

        if( 0 == ( tga.ImageDescriptor & 0x0010 ) )
            dwOffset = (m_dwHeight-y-1)*m_dwWidth;

        for( DWORD x=0; x<m_dwWidth; x )
        {
            if( tga.ImageType == 10 )
            {
                BYTE PacketInfo = getc( file );
                WORD PacketType = 0x80 & PacketInfo;
                WORD PixelCount = ( 0x007f & PacketInfo ) + 1;

                if( PacketType )
                {
                    DWORD b = getc( file );
                    DWORD g = getc( file );
                    DWORD r = getc( file );
                    DWORD a = 0xff;
                    if( m_dwBPP == 32 )
                        a = getc( file );

                    while( PixelCount-- )
                    {
                        m_pRGBAData[dwOffset+x] = (r<<24L)+(g<<16L)+(b<<8L)+(a);
                        x++;
                    }
                }
                else
                {
                    while( PixelCount-- )
                    {
                        BYTE b = getc( file );
                        BYTE g = getc( file );
                        BYTE r = getc( file );
                        BYTE a = 0xff;
                        if( m_dwBPP == 32 )
                            a = getc( file );

                        m_pRGBAData[dwOffset+x] = (r<<24L)+(g<<16L)+(b<<8L)+(a);
                        x++;
                    }
                }
            }
            else
            {
                BYTE b = getc( file );
                BYTE g = getc( file );
                BYTE r = getc( file );
                BYTE a = 0xff;
                if( m_dwBPP == 32 )
                    a = getc( file );

                m_pRGBAData[dwOffset+x] = (r<<24L)+(g<<16L)+(b<<8L)+(a);
                x++;
            }
        }
    }

    fclose( file );

    // Check for alpha content
    for( DWORD i=0; i<(m_dwWidth*m_dwHeight); i++ )
    {
        if( m_pRGBAData[i] & 0x000000ff != 0xff )
        {
            m_bHasAlpha = TRUE;
            break;
        }
    }
    
    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: Restore()
// Desc: Rebuilds the texture surface using the new device.
//-----------------------------------------------------------------------------
HRESULT TextureContainer::Restore( LPDIRECT3DDEVICE7 pd3dDevice )
{
    // Release any previously created objects
    SAFE_RELEASE( m_pddsSurface );

    // Check params
    if( NULL == pd3dDevice )
        return DDERR_INVALIDPARAMS;

    // Get the device caps
    D3DDEVICEDESC7 ddDesc;
    if( FAILED( pd3dDevice->GetCaps( &ddDesc) ) )
        return E_FAIL;

    // Setup the new surface desc
    DDSURFACEDESC2 ddsd;
    D3DUtil_InitSurfaceDesc( ddsd );
    ddsd.dwFlags         = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|
                           DDSD_PIXELFORMAT|DDSD_TEXTURESTAGE;
    ddsd.ddsCaps.dwCaps  = DDSCAPS_TEXTURE;
    ddsd.dwTextureStage  = m_dwStage;
    ddsd.dwWidth         = m_dwWidth;
    ddsd.dwHeight        = m_dwHeight;

    // Turn on texture management for hardware devices
    if( ddDesc.deviceGUID == IID_IDirect3DHALDevice )
        ddsd.ddsCaps.dwCaps2 = DDSCAPS2_TEXTUREMANAGE;
    else if( ddDesc.deviceGUID == IID_IDirect3DTnLHalDevice )
        ddsd.ddsCaps.dwCaps2 = DDSCAPS2_TEXTUREMANAGE;
    else
        ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY;

    // Adjust width and height to be powers of 2, if the device requires it
    if( ddDesc.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_POW2 )
    {
        for( ddsd.dwWidth=1;  m_dwWidth>ddsd.dwWidth;   ddsd.dwWidth<<=1 );
        for( ddsd.dwHeight=1; m_dwHeight>ddsd.dwHeight; ddsd.dwHeight<<=1 );
    }

    // Limit max texture sizes, if the driver can't handle large textures
    DWORD dwMaxWidth  = ddDesc.dwMaxTextureWidth;
    DWORD dwMaxHeight = ddDesc.dwMaxTextureHeight;
    ddsd.dwWidth  = min( ddsd.dwWidth,  ( dwMaxWidth  ? dwMaxWidth  : 256 ) );
    ddsd.dwHeight = min( ddsd.dwHeight, ( dwMaxHeight ? dwMaxHeight : 256 ) );

    // Make the texture square, if the driver requires it
    if( ddDesc.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_SQUAREONLY )
    {
        if( ddsd.dwWidth > ddsd.dwHeight ) ddsd.dwHeight = ddsd.dwWidth;
        else                               ddsd.dwWidth  = ddsd.dwHeight;
    }

    // Setup the structure to be used for texture enumration.
    TEXTURESEARCHINFO tsi;
    tsi.bFoundGoodFormat = FALSE;
    tsi.pddpf            = &ddsd.ddpfPixelFormat;
    tsi.dwDesiredBPP     = m_dwBPP;
    tsi.bUsePalette      = ( m_dwBPP <= 8 );
    tsi.bUseAlpha        = m_bHasAlpha;
    if( m_dwFlags & D3DTEXTR_16BITSPERPIXEL )
        tsi.dwDesiredBPP = 16;
    else if( m_dwFlags & D3DTEXTR_32BITSPERPIXEL )
        tsi.dwDesiredBPP = 32;

    if( m_dwFlags & (D3DTEXTR_TRANSPARENTWHITE|D3DTEXTR_TRANSPARENTBLACK) )
    {
        if( tsi.bUsePalette )
        {
            if( ddDesc.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_ALPHAPALETTE )
            {
                tsi.bUseAlpha   = TRUE;
                tsi.bUsePalette = TRUE;
            }
            else
            {
                tsi.bUseAlpha   = TRUE;
                tsi.bUsePalette = FALSE;
            }
        }
    }

    // Enumerate the texture formats, and find the closest device-supported
    // texture pixel format
    pd3dDevice->EnumTextureFormats( TextureSearchCallback, &tsi );

    // If we couldn't find a format, let's try a default format
    if( FALSE == tsi.bFoundGoodFormat )
    {
        tsi.bUsePalette  = FALSE;
        tsi.dwDesiredBPP = 16;
        pd3dDevice->EnumTextureFormats( TextureSearchCallback, &tsi );

        // If we still fail, we cannot create this texture
        if( FALSE == tsi.bFoundGoodFormat )
            return E_FAIL;
    }

    // Get the DirectDraw interface for creating surfaces
    LPDIRECTDRAW7        pDD;
    LPDIRECTDRAWSURFACE7 pddsRender;
    pd3dDevice->GetRenderTarget( &pddsRender );
    pddsRender->GetDDInterface( (VOID**)&pDD );
    pddsRender->Release();

    // Create a new surface for the texture
    HRESULT hr = pDD->CreateSurface( &ddsd, &m_pddsSurface, NULL );

    // Done with DDraw
    pDD->Release();

    if( FAILED(hr) )
        return hr;

    // For bitmap-based textures, copy the bitmap image.
    if( m_hbmBitmap )
        return CopyBitmapToSurface();

    if( m_pRGBAData )
        return CopyRGBADataToSurface();

    // At this point, code can be added to handle other file formats (such as
    // .dds files, .jpg files, etc.).
    return S_OK;
}




//-----------------------------------------------------------------------------
// Name: CopyBitmapToSurface()
// Desc: Copies the image of a bitmap into a surface
//-----------------------------------------------------------------------------
HRESULT TextureContainer::CopyBitmapToSurface()
{
    // Get a DDraw object to create a temporary surface
    LPDIRECTDRAW7 pDD;
    m_pddsSurface->GetDDInterface( (VOID**)&pDD );

    // Get the bitmap structure (to extract width, height, and bpp)
    BITMAP bm;
    GetObject( m_hbmBitmap, sizeof(BITMAP), &bm );

    // Setup the new surface desc
    DDSURFACEDESC2 ddsd;
    ddsd.dwSize = sizeof(ddsd);
    m_pddsSurface->GetSurfaceDesc( &ddsd );
    ddsd.dwFlags          = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT|
                            DDSD_TEXTURESTAGE;
    ddsd.ddsCaps.dwCaps   = DDSCAPS_TEXTURE|DDSCAPS_SYSTEMMEMORY;
    ddsd.ddsCaps.dwCaps2  = 0L;
    ddsd.dwWidth          = bm.bmWidth;
    ddsd.dwHeight         = bm.bmHeight;

    // Create a new surface for the texture
    LPDIRECTDRAWSURFACE7 pddsTempSurface;
    HRESULT hr;
    if( FAILED( hr = pDD->CreateSurface( &ddsd, &pddsTempSurface, NULL ) ) )
    {
        pDD->Release();
        return hr;
    }

    // Get a DC for the bitmap
    HDC hdcBitmap = CreateCompatibleDC( NULL );
    if( NULL == hdcBitmap )
    {
        pddsTempSurface->Release();
        pDD->Release();
        return hr;
    }
    SelectObject( hdcBitmap, m_hbmBitmap );

    // Handle palettized textures. Need to attach a palette
    if( ddsd.ddpfPixelFormat.dwRGBBitCount == 8 )
    {
        LPDIRECTDRAWPALETTE  pPalette;
        DWORD dwPaletteFlags = DDPCAPS_8BIT|DDPCAPS_ALLOW256;
        DWORD pe[256];
        WORD  wNumColors     = GetDIBColorTable( hdcBitmap, 0, 256, (RGBQUAD*)pe );

        // Create the color table
        for( WORD i=0; i<wNumColors; i++ )
        {
            pe[i] = RGB( GetBValue(pe[i]), GetGValue(pe[i]), GetRValue(pe[i]) );

            // Handle textures with transparent pixels
            if( m_dwFlags & (D3DTEXTR_TRANSPARENTWHITE|D3DTEXTR_TRANSPARENTBLACK) )
            {
                // Set alpha for opaque pixels
                if( m_dwFlags & D3DTEXTR_TRANSPARENTBLACK )
                {
                    if( pe[i] != 0x00000000 )
                        pe[i] |= 0xff000000;
                }
                else if( m_dwFlags & D3DTEXTR_TRANSPARENTWHITE )
                {
                    if( pe[i] != 0x00ffffff )
                        pe[i] |= 0xff000000;
                }
            }
        }
        // Add DDPCAPS_ALPHA flag for textures with transparent pixels
        if( m_dwFlags & (D3DTEXTR_TRANSPARENTWHITE|D3DTEXTR_TRANSPARENTBLACK) )
            dwPaletteFlags |= DDPCAPS_ALPHA;

        // Create & attach a palette
        pDD->CreatePalette( dwPaletteFlags, (PALETTEENTRY*)pe, &pPalette, NULL );
        pddsTempSurface->SetPalette( pPalette );
        m_pddsSurface->SetPalette( pPalette );
        SAFE_RELEASE( pPalette );
    }

    // Copy the bitmap image to the surface.
    HDC hdcSurface;
    if( SUCCEEDED( pddsTempSurface->GetDC( &hdcSurface ) ) )
    {
        BitBlt( hdcSurface, 0, 0, bm.bmWidth, bm.bmHeight, hdcBitmap, 0, 0,
                SRCCOPY );
        pddsTempSurface->ReleaseDC( hdcSurface );
    }
    DeleteDC( hdcBitmap );

    // Copy the temp surface to the real texture surface
    m_pddsSurface->Blt( NULL, pddsTempSurface, NULL, DDBLT_WAIT, NULL );

    // Done with the temp surface
    pddsTempSurface->Release();

    // For textures with real alpha (not palettized), set transparent bits
    if( ddsd.ddpfPixelFormat.dwRGBAlphaBitMask )
    {
        if( m_dwFlags & (D3DTEXTR_TRANSPARENTWHITE|D3DTEXTR_TRANSPARENTBLACK) )
        {
            // Lock the texture surface
            DDSURFACEDESC2 ddsd;
            ddsd.dwSize = sizeof(ddsd);
            while( m_pddsSurface->Lock( NULL, &ddsd, 0, NULL ) ==
                   DDERR_WASSTILLDRAWING );

            DWORD dwAlphaMask = ddsd.ddpfPixelFormat.dwRGBAlphaBitMask;
            DWORD dwRGBMask   = ( ddsd.ddpfPixelFormat.dwRBitMask |
                                  ddsd.ddpfPixelFormat.dwGBitMask |
                                  ddsd.ddpfPixelFormat.dwBBitMask );
            DWORD dwColorkey  = 0x00000000; // Colorkey on black
            if( m_dwFlags & D3DTEXTR_TRANSPARENTWHITE )
                dwColorkey = dwRGBMask;     // Colorkey on white

            // Add an opaque alpha value to each non-colorkeyed pixel

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品中文字幕一区二区三区| 日韩一区二区三区三四区视频在线观看 | gogogo免费视频观看亚洲一| 国产真实乱偷精品视频免| 日本不卡一区二区| 奇米精品一区二区三区在线观看| 日韩精品午夜视频| 久久精品国产秦先生| 国内精品在线播放| 国产一区二区免费视频| 狠狠色狠狠色合久久伊人| 国产一区二区三区高清播放| 国产一区二区美女| 99久久久久久| 欧美综合亚洲图片综合区| 制服丝袜成人动漫| 日韩午夜av一区| 国产欧美一区二区三区沐欲| 国产精品成人一区二区艾草 | 视频一区中文字幕国产| 美女一区二区在线观看| 国产精品一区二区男女羞羞无遮挡| 国产自产视频一区二区三区| 成人深夜在线观看| 在线观看视频一区| 日韩女优毛片在线| 国产欧美一区二区精品性| 日韩一区在线看| 天天综合网 天天综合色| 九九热在线视频观看这里只有精品| 精品影视av免费| av影院午夜一区| 精品视频999| 久久九九久久九九| 一区二区三区中文字幕在线观看| 日日夜夜免费精品视频| 国产成人精品www牛牛影视| 精品电影一区二区| 亚洲一区二区不卡免费| 日韩精品成人一区二区三区| 国产精品久久久久久久久久久免费看| 亚洲日本乱码在线观看| 亚洲成人综合视频| 国产一区二区免费看| 97aⅴ精品视频一二三区| 亚洲国产精品久久人人爱蜜臀| 制服丝袜成人动漫| 中文字幕av一区二区三区高| 久久99精品久久久久久国产越南| 在线国产亚洲欧美| 亚洲欧美aⅴ...| 高清视频一区二区| 国产亚洲综合性久久久影院| 美日韩一区二区三区| 欧美精品一卡二卡| 亚洲成人在线免费| 欧美日韩在线免费视频| 一区二区三区中文字幕在线观看| www.日韩大片| 国产精品久久夜| av高清久久久| 国产精品久久久久久久蜜臀| 国产成人在线视频免费播放| 精品动漫一区二区三区在线观看| 奇米精品一区二区三区在线观看| 在线播放一区二区三区| 亚洲国产精品视频| 欧美日韩三级视频| 亚洲成人黄色影院| 7777精品久久久大香线蕉| 婷婷综合另类小说色区| 欧美日韩精品专区| 天天综合网 天天综合色| 91精品在线麻豆| 美女视频一区在线观看| 日韩欧美123| 国产精品自拍毛片| 日本一区免费视频| 成人教育av在线| 亚洲欧洲另类国产综合| 91在线视频免费观看| 亚洲人一二三区| 精品视频免费看| 蜜桃av噜噜一区| 精品国产髙清在线看国产毛片| 美腿丝袜亚洲一区| 精品国产99国产精品| 日本成人在线不卡视频| 欧美精品一区二区三区很污很色的 | 国产美女一区二区| 国产欧美一区二区三区网站 | 综合分类小说区另类春色亚洲小说欧美| 9色porny自拍视频一区二区| 亚洲欧美日韩国产综合| av在线不卡观看免费观看| 国产精品短视频| aaa欧美大片| 欧美国产日韩精品免费观看| 成人伦理片在线| 国产精品嫩草99a| 国产成人亚洲综合色影视| 国产色产综合色产在线视频| 国产精品一区在线| 国产欧美日韩亚州综合 | 一区二区在线观看免费| 欧美亚洲动漫精品| 日本不卡一区二区| 欧美激情一区在线| 欧美视频三区在线播放| 精品一区二区三区在线观看| 一本一道久久a久久精品综合蜜臀| 国产女主播在线一区二区| 91国偷自产一区二区开放时间| 日韩成人午夜精品| 国产欧美一区二区精品仙草咪| 色激情天天射综合网| 美日韩黄色大片| 亚洲欧洲综合另类| 欧美不卡一二三| 91蜜桃传媒精品久久久一区二区| 天涯成人国产亚洲精品一区av| 久久久久久**毛片大全| 欧美午夜一区二区三区| 国产精品88av| 午夜精品久久久久久| 国产欧美精品一区二区色综合| 欧美性感一类影片在线播放| 国产精品一区专区| 日韩精品每日更新| 亚洲欧洲国产日本综合| 日韩一区二区三区在线观看| 91麻豆免费看| 国产精品影视在线观看| 日韩影院精彩在线| 亚洲欧美日韩国产中文在线| 久久尤物电影视频在线观看| 欧美日韩五月天| 盗摄精品av一区二区三区| 亚洲福利一区二区三区| 亚洲欧洲av另类| 精品国产一区二区三区不卡 | 国产精品久久久久久户外露出 | 亚洲va欧美va人人爽午夜| 日本一区二区免费在线观看视频| 欧美日韩和欧美的一区二区| 成人国产亚洲欧美成人综合网| 亚洲国产另类av| 精品国产伦一区二区三区免费| 日韩—二三区免费观看av| 国产精品视频在线看| 欧美日韩一区二区三区视频| 另类综合日韩欧美亚洲| 国产精品国产三级国产普通话99| 91麻豆精品国产91久久久久 | 欧美一区二区成人| 成人精品一区二区三区四区| 亚洲国产精品欧美一二99| 国产亚洲成av人在线观看导航 | 久久久精品综合| 欧美精品乱码久久久久久按摩| 99精品久久只有精品| 国产在线精品一区二区三区不卡| 日本麻豆一区二区三区视频| 亚洲午夜三级在线| 亚洲天堂2016| 国产精品久久久久一区| 国产欧美日韩另类一区| 精品久久久网站| 91精品国产高清一区二区三区 | 亚洲地区一二三色| 亚洲美女淫视频| 中文字幕一区av| 国产精品久久午夜夜伦鲁鲁| 国产三级精品三级| 精品美女一区二区| 欧美xxxxx牲另类人与| 欧美大片顶级少妇| 欧美一卡二卡三卡| 91精品国产综合久久久蜜臀粉嫩| 欧美日韩高清一区二区三区| 欧美日韩一区二区三区在线看| 欧美在线影院一区二区| 欧美在线一二三| 欧美日韩综合不卡| 欧美精品乱码久久久久久| 在线不卡欧美精品一区二区三区| 欧美电影在哪看比较好| 911精品国产一区二区在线| 欧美视频在线播放| 5858s免费视频成人| 欧美一级理论性理论a| 欧美一区二区三区视频在线观看| 777色狠狠一区二区三区| 日韩一区二区三区在线观看| 日韩美女一区二区三区| 久久综合色播五月| 国产日韩欧美激情| 国产精品夫妻自拍| 亚洲午夜久久久久久久久电影院 | 欧美精品乱人伦久久久久久|