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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? d3dtextr.cpp

?? 傳奇3客戶端源代碼
?? CPP
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
//-----------------------------------------------------------------------------
// File: D3DTextr.cpp
//
// Desc: Functions to manage textures, including creating (loading from a
//       file), restoring lost surfaces, invalidating, and destroying.
//
//       Note: the implementation of these fucntions maintain an internal list
//       of loaded textures. After creation, individual textures are referenced
//       via their ASCII names.
//
// Copyright (c) 1996-1999 Microsoft Corporation. All rights reserved
//-----------------------------------------------------------------------------
//#define STRICT
#include "StdAfx.h"
//#include <tchar.h>
//#include <stdio.h>
//#include "D3DTextr.h"
//#include "D3DUtil.h"




//-----------------------------------------------------------------------------
// Macros, function prototypes and static variable
//-----------------------------------------------------------------------------
static TCHAR  g_strTexturePath[512] = _T(""); // Path for files




//-----------------------------------------------------------------------------
// Name: TextureContainer
// Desc: Linked list structure to hold info per texture
//-----------------------------------------------------------------------------
struct TextureContainer
{
    TextureContainer* m_pNext; // Linked list ptr

    TCHAR   m_strName[80];     // Name of texture (doubles as image filename)
    DWORD   m_dwWidth;
    DWORD   m_dwHeight;
    DWORD   m_dwStage;         // Texture stage (for multitexture devices)
    DWORD   m_dwBPP;
    DWORD   m_dwFlags;
    BOOL    m_bHasAlpha;

    LPDIRECTDRAWSURFACE7 m_pddsSurface; // Surface of the texture
    HBITMAP m_hbmBitmap;       // Bitmap containing texture image
    DWORD*  m_pRGBAData;

public:
    HRESULT LoadImageData();
    HRESULT LoadBitmapFile( TCHAR* strPathname );
    HRESULT LoadTargaFile( TCHAR* strPathname );
    HRESULT Restore( LPDIRECT3DDEVICE7 pd3dDevice );
    HRESULT CopyBitmapToSurface();
    HRESULT CopyRGBADataToSurface();

    TextureContainer( TCHAR* strName, DWORD dwStage, DWORD dwFlags );
    ~TextureContainer();
};

// Local list of textures
static TextureContainer* g_ptcTextureList = NULL;




//-----------------------------------------------------------------------------
// Name: CD3DTextureManager
// Desc: Class used to automatically construct and destruct the static
//       texture engine class.
//-----------------------------------------------------------------------------
class CD3DTextureManager
{
public:
    CD3DTextureManager() {}
    ~CD3DTextureManager() { if( g_ptcTextureList ) delete g_ptcTextureList; }
};

// Global instance
CD3DTextureManager g_StaticTextureEngine;




//-----------------------------------------------------------------------------
// Name: struct TEXTURESEARCHINFO
// Desc: Structure used to search for texture formats
//-----------------------------------------------------------------------------
struct TEXTURESEARCHINFO
{
    DWORD dwDesiredBPP;   // Input for texture format search
    BOOL  bUseAlpha;
    BOOL  bUsePalette;
    BOOL  bFoundGoodFormat;

    DDPIXELFORMAT* pddpf; // Output of texture format search
};




//-----------------------------------------------------------------------------
// Name: TextureSearchCallback()
// Desc: Enumeration callback routine to find a best-matching texture format.
//       The param data is the DDPIXELFORMAT of the best-so-far matching
//       texture. Note: the desired BPP is passed in the dwSize field, and the
//       default BPP is passed in the dwFlags field.
//-----------------------------------------------------------------------------
static HRESULT CALLBACK TextureSearchCallback( DDPIXELFORMAT* pddpf,
                                               VOID* param )
{
    if( NULL==pddpf || NULL==param )
        return DDENUMRET_OK;

    TEXTURESEARCHINFO* ptsi = (TEXTURESEARCHINFO*)param;

    // Skip any funky modes
    if( pddpf->dwFlags & (DDPF_LUMINANCE|DDPF_BUMPLUMINANCE|DDPF_BUMPDUDV) )
        return DDENUMRET_OK;

    // Check for palettized formats
    if( ptsi->bUsePalette )
    {
        if( !( pddpf->dwFlags & DDPF_PALETTEINDEXED8 ) )
            return DDENUMRET_OK;

        // Accept the first 8-bit palettized format we get
        memcpy( ptsi->pddpf, pddpf, sizeof(DDPIXELFORMAT) );
        ptsi->bFoundGoodFormat = TRUE;
        return DDENUMRET_CANCEL;
    }

    // Else, skip any paletized formats (all modes under 16bpp)
    if( pddpf->dwRGBBitCount < 16 )
        return DDENUMRET_OK;

    // Skip any FourCC formats
    if( pddpf->dwFourCC != 0 )
        return DDENUMRET_OK;

    // Skip any ARGB 4444 formats (which are best used for pre-authored
    // content designed speciafically for an ARGB 4444 format).
    if( pddpf->dwRGBAlphaBitMask == 0x0000f000 )
        return DDENUMRET_OK;

    // Make sure current alpha format agrees with requested format type
    if( (ptsi->bUseAlpha==TRUE) && !(pddpf->dwFlags&DDPF_ALPHAPIXELS) )
        return DDENUMRET_OK;
    if( (ptsi->bUseAlpha==FALSE) && (pddpf->dwFlags&DDPF_ALPHAPIXELS) )
        return DDENUMRET_OK;

    // Check if we found a good match
    if( pddpf->dwRGBBitCount == ptsi->dwDesiredBPP )
    {
        memcpy( ptsi->pddpf, pddpf, sizeof(DDPIXELFORMAT) );
        ptsi->bFoundGoodFormat = TRUE;
        return DDENUMRET_CANCEL;
    }

    return DDENUMRET_OK;
}




//-----------------------------------------------------------------------------
// Name: FindTexture()
// Desc: Searches the internal list of textures for a texture specified by
//       its name. Returns the structure associated with that texture.
//-----------------------------------------------------------------------------
static TextureContainer* FindTexture( TCHAR* strTextureName )
{
    TextureContainer* ptcTexture = g_ptcTextureList;

    while( ptcTexture )
    {
        if( !lstrcmpi( strTextureName, ptcTexture->m_strName ) )
            return ptcTexture;
        ptcTexture = ptcTexture->m_pNext;
    }

    return NULL;
}




//-----------------------------------------------------------------------------
// Name: TextureContainer()
// Desc: Constructor for a texture object
//-----------------------------------------------------------------------------
TextureContainer::TextureContainer( TCHAR* strName, DWORD dwStage,
                                    DWORD dwFlags )
{
    lstrcpy( m_strName, strName );
    m_dwWidth     = 0;
    m_dwHeight    = 0;
    m_dwStage     = dwStage;
    m_dwBPP       = 0;
    m_dwFlags     = dwFlags;
    m_bHasAlpha   = 0;

    m_pddsSurface = NULL;
    m_hbmBitmap   = NULL;
    m_pRGBAData   = NULL;

    // Add the texture to the head of the global texture list
    m_pNext = g_ptcTextureList;
    g_ptcTextureList = this;

}




//-----------------------------------------------------------------------------
// Name: ~TextureContainer()
// Desc: Destructs the contents of the texture container
//-----------------------------------------------------------------------------
TextureContainer::~TextureContainer()
{
    SAFE_RELEASE( m_pddsSurface );
    SAFE_DELETE(  m_pRGBAData );
    DeleteObject( m_hbmBitmap );

    // Remove the texture container from the global list
    if( g_ptcTextureList == this )
        g_ptcTextureList = m_pNext;
    else
    {
        for( TextureContainer* ptc=g_ptcTextureList; ptc; ptc=ptc->m_pNext )
            if( ptc->m_pNext == this )
                ptc->m_pNext = m_pNext;
    }
}




//-----------------------------------------------------------------------------
// Name: LoadImageData()
// Desc: Loads the texture map's image data
//-----------------------------------------------------------------------------
HRESULT TextureContainer::LoadImageData()
{
    TCHAR* strExtension;
    TCHAR  strPathname[256];
    FILE*  file;

    // Check the executable's resource. If it's there, we're done!
    m_hbmBitmap = (HBITMAP)LoadImage( GetModuleHandle(NULL), m_strName,
                                      IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION );
    if( m_hbmBitmap )
        return S_OK;

    // First check if the file exists in the global texture path
    lstrcpy( strPathname, g_strTexturePath );
    lstrcat( strPathname, m_strName );
    if( NULL == ( file = fopen( strPathname, "rb" ) ) )
    {
        // Then check if the file exists in the DirectX SDK media path
        lstrcpy( strPathname, D3DUtil_GetDXSDKMediaPath() );
        lstrcat( strPathname, m_strName );
        if( NULL == ( file = fopen( strPathname, "rb" ) ) )
            return DDERR_NOTFOUND;
    }
    fclose( file );

    // Get the filename extension
    if( NULL == ( strExtension = _tcsrchr( m_strName, _T('.') ) ) )
        return DDERR_UNSUPPORTED;

    // Load bitmap files
    if( !lstrcmpi( strExtension, _T(".bmp") ) )
        return LoadBitmapFile( strPathname );

    // Load targa files
    if( !lstrcmpi( strExtension, _T(".tga") ) )
        return LoadTargaFile( strPathname );

    // Can add code here to check for other file formats before failing
    return DDERR_UNSUPPORTED;
}




//-----------------------------------------------------------------------------
// Name: LoadBitmapFile()
// Desc: Loads data from a .bmp file, and stores it in a bitmap structure.
//-----------------------------------------------------------------------------
HRESULT TextureContainer::LoadBitmapFile( TCHAR* strPathname )
{
    // Try to load the bitmap as a file
    m_hbmBitmap = (HBITMAP)LoadImage( NULL, strPathname, IMAGE_BITMAP, 0, 0,
                                      LR_LOADFROMFILE|LR_CREATEDIBSECTION );
    if( m_hbmBitmap )
        return S_OK;
    
    return DDERR_NOTFOUND;
}




//-----------------------------------------------------------------------------
// Name: LoadTargaFile()
// Desc: Loads RGBA data from a .tga file, and stores it in allocated memory
//       for the specified texture container
//-----------------------------------------------------------------------------
HRESULT TextureContainer::LoadTargaFile( TCHAR* strPathname )
{
    FILE* file = fopen( strPathname, "rb" );
    if( NULL == file )
        return E_FAIL;

    struct TargaHeader
    {
        BYTE IDLength;
        BYTE ColormapType;
        BYTE ImageType;
        BYTE ColormapSpecification[5];
        WORD XOrigin;
        WORD YOrigin;
        WORD ImageWidth;
        WORD ImageHeight;
        BYTE PixelDepth;
        BYTE ImageDescriptor;
    } tga;

    fread( &tga, sizeof(TargaHeader), 1, file );

    // Only true color, non-mapped images are supported
    if( ( 0 != tga.ColormapType ) || 
        ( tga.ImageType != 10 && tga.ImageType != 2 ) )
    {
        fclose( file );
        return E_FAIL;
    }

    // Skip the ID field. The first byte of the header is the length of this field
    if( tga.IDLength )

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产视频一区在线播放| 精品一区二区三区蜜桃| 亚洲精品综合在线| 中文字幕五月欧美| 亚洲欧美偷拍卡通变态| 亚洲视频一区二区免费在线观看| 亚洲欧美一区二区在线观看| 日本一区二区三区四区在线视频| 国产蜜臀av在线一区二区三区| 久久久久综合网| 国产精品网站一区| 国产精品盗摄一区二区三区| 亚洲啪啪综合av一区二区三区| 亚洲区小说区图片区qvod| 一区二区三区在线看| 亚洲黄一区二区三区| 亚洲国产日韩在线一区模特| 婷婷六月综合亚洲| 久久精品国产亚洲a| 国产美女在线观看一区| 成人激情免费网站| 欧美中文字幕一区二区三区| 欧美日韩美少妇| 日韩欧美国产三级| 亚洲国产精品成人综合色在线婷婷 | 国产成人欧美日韩在线电影| 成人午夜av在线| 色先锋资源久久综合| 欧美视频一区二区三区在线观看| 欧美一区二区国产| 久久久国产一区二区三区四区小说 | 欧美一级艳片视频免费观看| 欧美大度的电影原声| 中文字幕免费观看一区| 亚洲永久精品大片| 蓝色福利精品导航| 99在线视频精品| 欧美高清激情brazzers| 久久影院电视剧免费观看| 中文字幕欧美一区| 日韩影院在线观看| 国产69精品一区二区亚洲孕妇| 色婷婷精品久久二区二区蜜臂av| 91精品国产91久久久久久最新毛片 | 久久久一区二区| 亚洲人成亚洲人成在线观看图片 | 欧美日韩免费一区二区三区视频| 日韩一卡二卡三卡| 最好看的中文字幕久久| 免费观看一级特黄欧美大片| 福利91精品一区二区三区| 欧美日韩美女一区二区| 久久精品人人做人人爽97| 亚洲国产视频一区二区| 成人妖精视频yjsp地址| 91精品国产综合久久福利| 国产精品欧美一级免费| 久久精品国产**网站演员| 99re在线视频这里只有精品| 日韩精品一区二区三区中文不卡| 亚洲丝袜制服诱惑| 国内精品国产成人| 欧美性色黄大片| 国产精品欧美久久久久无广告| 免费国产亚洲视频| 欧美在线观看视频在线| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 成人丝袜视频网| 91精品蜜臀在线一区尤物| 最新成人av在线| 国产乱妇无码大片在线观看| 制服丝袜中文字幕一区| 一区二区三区在线免费视频 | 精品成人一区二区三区四区| 18成人在线观看| 国产黄色精品网站| 日韩一区二区免费高清| 亚洲成av人**亚洲成av**| 色综合天天视频在线观看| 日本一区二区三级电影在线观看 | 国产精品88av| 91精品国产91久久久久久一区二区| 日韩一区在线免费观看| 国产成人精品一区二区三区网站观看| 日韩片之四级片| 性做久久久久久免费观看| 91色乱码一区二区三区| 一区在线中文字幕| 成人av综合在线| 国产精品久久久久影院| 国产成人精品免费看| 久久久亚洲国产美女国产盗摄 | 国产精品小仙女| 精品国产乱码久久久久久久久| 天天综合网 天天综合色| 欧洲亚洲精品在线| 洋洋av久久久久久久一区| 97se狠狠狠综合亚洲狠狠| 亚洲视频一二区| 91丨九色porny丨蝌蚪| 中文字幕佐山爱一区二区免费| 粉嫩绯色av一区二区在线观看| 久久伊人蜜桃av一区二区| 国产揄拍国内精品对白| 精品久久久久久久久久久久包黑料| 日本视频免费一区| 日韩亚洲国产中文字幕欧美| 久久精品久久99精品久久| 亚洲自拍偷拍图区| 欧美三级电影在线看| 视频一区二区欧美| 日韩一区二区三| 国产精品白丝jk白祙喷水网站| 国产欧美一二三区| 成人av片在线观看| 亚洲乱码国产乱码精品精可以看| 91视频在线观看| 亚洲成人激情社区| 欧美一区二区大片| 国产一区二区三区免费在线观看| 国产日韩欧美亚洲| 91美女精品福利| 亚洲成人动漫精品| 精品国产人成亚洲区| 豆国产96在线|亚洲| 中文字幕在线不卡国产视频| 在线看日韩精品电影| 日日欢夜夜爽一区| 国产亚洲欧美日韩日本| 99re在线视频这里只有精品| 亚洲综合区在线| 欧美大片在线观看| 成人小视频在线| 亚洲一区二区免费视频| 日韩欧美二区三区| 不卡的av在线| 午夜精品一区二区三区电影天堂| 2021中文字幕一区亚洲| jiyouzz国产精品久久| 亚洲高清一区二区三区| 日韩欧美国产小视频| 91丨porny丨首页| 奇米色一区二区| 国产精品免费久久| 欧美丰满美乳xxx高潮www| 国产九色sp调教91| 亚洲精品日韩综合观看成人91| 日韩一级高清毛片| 99热在这里有精品免费| 日本不卡一区二区| 亚洲人成网站精品片在线观看| 91精品国产综合久久久久久漫画| 成人免费的视频| 日韩专区一卡二卡| 国产精品久久久久久久裸模| 91麻豆精品久久久久蜜臀| 国产成人免费在线观看不卡| 亚洲成a人v欧美综合天堂| 国产精品天干天干在线综合| 91精品国产欧美一区二区18 | 日韩欧美精品在线视频| 91视频你懂的| 国产精品一区二区三区网站| 亚洲一区二区在线免费观看视频| 精品国免费一区二区三区| 91丨porny丨中文| 国产精品亚洲一区二区三区在线| 亚洲一级在线观看| 亚洲国产精品99久久久久久久久 | 国产日韩欧美一区二区三区乱码| 欧美日韩精品福利| 97久久人人超碰| 国产成人在线视频网站| 天天操天天综合网| 一区二区三区在线看| 国产精品全国免费观看高清| 精品国产伦一区二区三区观看体验 | 久久不见久久见中文字幕免费| 依依成人精品视频| 国产欧美精品一区aⅴ影院| 精品福利视频一区二区三区| 欧美精品成人一区二区三区四区| 91麻豆123| av一区二区三区四区| 国产成人午夜电影网| 欧美日本一区二区在线观看| 成人国产精品视频| 国产高清亚洲一区| 国产中文字幕一区| 久久精品久久综合| 久久成人av少妇免费| 美女网站一区二区| 日本中文字幕一区二区视频| 亚洲r级在线视频| 亚洲一二三区不卡| 夜夜精品视频一区二区| 亚洲欧美一区二区三区久本道91| 中文字幕在线不卡一区| 亚洲欧洲色图综合| 亚洲三级在线观看|