青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

DXUT源碼分析 ---- 類CDXUTMesh(2)

函數CreateMaterials()用于創建網格模型中所需的材質和紋理,我們來看看CreateMaterials()的實現:

HRESULT CDXUTMesh::CreateMaterials( LPCWSTR strPath, IDirect3DDevice9 *pd3dDevice, 
                                    D3DXMATERIAL
* d3dxMtrls, DWORD dwNumMaterials )
{
    
// Get material info for the mesh, get the array of materials out of the buffer.

    m_dwNumMaterials 
= dwNumMaterials;

    
if( d3dxMtrls && m_dwNumMaterials > 0 )
    {
        
// Allocate memory for the materials and textures

        m_pMaterials 
= new D3DMATERIAL9[m_dwNumMaterials];
        
if( m_pMaterials == NULL )
            
return E_OUTOFMEMORY;

        m_pTextures 
= new LPDIRECT3DBASETEXTURE9[m_dwNumMaterials];
        
if( m_pTextures == NULL )
            
return E_OUTOFMEMORY;

        m_strMaterials 
= new CHAR[m_dwNumMaterials][MAX_PATH];
        
if( m_strMaterials == NULL )
            
return E_OUTOFMEMORY;

        
// Copy each material and create its texture
        for( DWORD i=0; i<m_dwNumMaterials; i++ )
        {
            
// Copy the material
            m_pMaterials[i]         = d3dxMtrls[i].MatD3D;
            m_pMaterials[i].Ambient 
= m_pMaterials[i].Diffuse;    // add by me

            m_pTextures[i]          
= NULL;

            
// Create a texture
            if( d3dxMtrls[i].pTextureFilename )
            {
                StringCchCopyA( m_strMaterials[i], MAX_PATH, d3dxMtrls[i].pTextureFilename );

                WCHAR strTexture[MAX_PATH];
                WCHAR strTextureTemp[MAX_PATH];
                D3DXIMAGE_INFO ImgInfo;

                
// First attempt to look for texture in the same folder as the input folder.

                MultiByteToWideChar( CP_ACP, 
0, d3dxMtrls[i].pTextureFilename, -1, strTextureTemp, MAX_PATH );
                strTextureTemp[MAX_PATH
-1= 0;

                StringCchCopy( strTexture, MAX_PATH, strPath );
                StringCchCat( strTexture, MAX_PATH, strTextureTemp );

                
// Inspect the texture file to determine the texture type.
                if( FAILED( D3DXGetImageInfoFromFile( strTexture, &ImgInfo ) ) )
                {
                    
// Search the media folder
                    if( FAILED( DXUTFindDXSDKMediaFileCch( strTexture, MAX_PATH, strTextureTemp ) ) )
                        
continue;  // Can't find. Skip.

                    D3DXGetImageInfoFromFile( strTexture, 
&ImgInfo );
                }

                
// Call the appropriate loader according to the texture type.
                switch( ImgInfo.ResourceType )
                {
                    
case D3DRTYPE_TEXTURE:
                    {
                        IDirect3DTexture9 
*pTex;

                        
if( SUCCEEDED( D3DXCreateTextureFromFileW( pd3dDevice, strTexture, &pTex ) ) )
                        {
                            
// Obtain the base texture interface
                            pTex->QueryInterface( IID_IDirect3DBaseTexture9, (LPVOID*)&m_pTextures[i] );

                            
// Release the specialized instance
                            pTex->Release();
                        }

                        
break;
                    }

                    
case D3DRTYPE_CUBETEXTURE:
                    {
                        IDirect3DCubeTexture9 
*pTex;

                        
if( SUCCEEDED( D3DXCreateCubeTextureFromFile( pd3dDevice, strTexture, &pTex ) ) )
                        {
                            
// Obtain the base texture interface
                            pTex->QueryInterface( IID_IDirect3DBaseTexture9, (LPVOID*)&m_pTextures[i] );

                            
// Release the specialized instance
                            pTex->Release();
                        }

                        
break;
                    }

                    
case D3DRTYPE_VOLUMETEXTURE:
                    {
                        IDirect3DVolumeTexture9 
*pTex;

                        
if( SUCCEEDED( D3DXCreateVolumeTextureFromFile( pd3dDevice, strTexture, &pTex ) ) )
                        {
                            
// Obtain the base texture interface
                            pTex->QueryInterface( IID_IDirect3DBaseTexture9, (LPVOID*)&m_pTextures[i] );

                            
// Release the specialized instance
                            pTex->Release();
                        }

                        
break;
                    }
                }
            }
        }
    }

    
return S_OK;
}

 

函數首先根據材質數來創建相應的材質緩存、紋理緩存、紋理文件名緩存:
    m_dwNumMaterials = dwNumMaterials;
    if( d3dxMtrls && m_dwNumMaterials > 0 )
{
// Allocate memory for the materials and textures
        m_pMaterials = new D3DMATERIAL9[m_dwNumMaterials];
if( m_pMaterials == NULL )
return E_OUTOFMEMORY;
        m_pTextures = new LPDIRECT3DBASETEXTURE9[m_dwNumMaterials];
if( m_pTextures == NULL )
return E_OUTOFMEMORY;
        m_strMaterials = new CHAR[m_dwNumMaterials][MAX_PATH];
if( m_strMaterials == NULL )
return E_OUTOFMEMORY;

接下來復制材質數據:

        // Copy each material and create its texture
for( DWORD i=0; i<m_dwNumMaterials; i++ )
{
// Copy the material
m_pMaterials[i] = d3dxMtrls[i].MatD3D;
m_pMaterials[i].Ambient = m_pMaterials[i].Diffuse; // add by me
            m_pTextures[i]          = NULL;

如果模型中指定紋理文件名則創建紋理緩存,首先將pTextureFilename復制到m_strMaterials中,接著根據strPath和strTextureTemp生成紋理圖的完整路徑(可能是絕對路徑也可能是相對路徑):

            // Create a texture
if( d3dxMtrls[i].pTextureFilename )
{
StringCchCopyA( m_strMaterials[i], MAX_PATH, d3dxMtrls[i].pTextureFilename );
                WCHAR strTexture[MAX_PATH];
WCHAR strTextureTemp[MAX_PATH];
D3DXIMAGE_INFO ImgInfo;
                // First attempt to look for texture in the same folder as the input folder.
                MultiByteToWideChar( CP_ACP, 0, d3dxMtrls[i].pTextureFilename, -1, strTextureTemp, MAX_PATH );
strTextureTemp[MAX_PATH-1] = 0;
                StringCchCopy( strTexture, MAX_PATH, strPath );
StringCchCat( strTexture, MAX_PATH, strTextureTemp );

StringCchCat()的聲明如下:

StringCchCat is a replacement for strcat. The size, in characters, of the destination buffer is provided to the function to ensure that StringCchCat does not write past the end of this buffer.

Syntax

HRESULT StringCchCat(      

    LPTSTR pszDest,
    size_t cchDest,
    LPCTSTR pszSrc
);

Parameters

pszDest
[in, out] Pointer to a buffer containing the string to which pszSrc is concatenated, and which contains the entire resultant string. The string at pszSrc is added to the end of the string at pszDest.
cchDest
[in] Size of the destination buffer, in characters. This value must equal the length of pszSrc plus the length of pszDest plus 1 to account for both strings and the terminating null character. The maximum number of characters allowed is STRSAFE_MAX_CCH.
pszSrc
[in] Pointer to a buffer containing the source string that is concatenated to the end of pszDest. This source string must be null-terminated.

Return Value

Note that this function returns an HRESULT as opposed to strcat, which returns a pointer. It is strongly recommended that you use the SUCCEEDED and FAILED macros to test the return value of this function.

S_OK Source data was present, the strings were fully concatenated without truncation, and the resultant destination buffer is null-terminated.
STRSAFE_E_INVALID_PARAMETER The value in cchDest is either 0 or larger than STRSAFE_MAX_CCH, or the destination buffer is already full.
STRSAFE_E_INSUFFICIENT_BUFFER The concatenation operation failed due to insufficient buffer space. The destination buffer contains a truncated, null-terminated version of the intended result. In situations where truncation is acceptable, this may not necessarily be seen as a failure condition.

Remarks

StringCchCat provides additional processing for proper buffer handling in your code. Poor buffer handling is implicated in many security issues that involve buffer overruns. StringCchCat always null-terminates a non-zero-length destination buffer.

StringCchCat can be used in its generic form, or specifically as StringCchCatA (for ANSI strings) or StringCchCatW (for Unicode strings). The form to use is determined by your data.

String Data Type String Literal Function
char "string" StringCchCatA
TCHAR TEXT("string") StringCchCat
WCHAR L"string" StringCchCatW
 

StringCchCat and its ANSI and Unicode variants are replacements for these functions:

  • strcat
  • wcscat
  • lstrcat
  • strcat
  • StrCatBuff
  • _tcscat
  • _ftcscat

Behavior is undefined if the strings pointed to by pszSrc and pszDest overlap.

Neither pszSrc nor pszDest should be NULL. See StringCchCatEx if you require the handling of null string pointer values.

 

接下來調用D3DXGetImageInfoFromFile()從文件中獲取圖像數據,如果獲取失敗,則在搜索路徑中增加一層目錄media來搜索:

                // Inspect the texture file to determine the texture type.
if( FAILED( D3DXGetImageInfoFromFile( strTexture, &ImgInfo ) ) )
{
// Search the media folder
if( FAILED( DXUTFindDXSDKMediaFileCch( strTexture, MAX_PATH, strTextureTemp ) ) )
continue; // Can't find. Skip.
                    D3DXGetImageInfoFromFile( strTexture, &ImgInfo );
}

D3DXGetImageInfoFromFile()的聲明如下:

Retrieves information about a given image file.

HRESULT D3DXGetImageInfoFromFile(
LPCSTR pSrcFile,
D3DXIMAGE_INFO * pSrcInfo
);

Parameters

pSrcFile
[in] File name of image to retrieve information about. If UNICODE or _UNICODE are defined, this parameter type is LPCWSTR, otherwise, the type is LPCSTR.
pSrcInfo
[in] Pointer to a D3DXIMAGE_INFO structure to be filled with the description of the data in the source file.

Return Values

If the function succeeds, the return value is D3D_OK. If the function fails, the return value can be the following: D3DERR_INVALIDCALL

Remarks

This function supports both Unicode and ANSI strings.

D3DXIMAGE_INFO

Returns a description of the original contents of an image file.

typedef struct D3DXIMAGE_INFO {
UINT Width;
UINT Height;
UINT Depth;
UINT MipLevels;
D3DFORMAT Format;
D3DRESOURCETYPE ResourceType;
D3DXIMAGE_FILEFORMAT ImageFileFormat;
} D3DXIMAGE_INFO, *LPD3DXIMAGE_INFO;

Members

Width
Width of original image in pixels.
Height
Height of original image in pixels.
Depth
Depth of original image in pixels.
MipLevels
Number of mip levels in original image.
Format
A value from the D3DFORMAT enumerated type that most closely describes the data in the original image.
ResourceType
Represents the type of the texture stored in the file. It is either D3DRTYPE_TEXTURE, D3DRTYPE_VOLUMETEXTURE, or D3DRTYPE_CubeTexture.
ImageFileFormat
Represents the format of the image file.

D3DXIMAGE_FILEFORMAT

Describes the supported image file formats. See Remarks for descriptions of these formats.

typedef enum D3DXIMAGE_FILEFORMAT
{
D3DXIFF_BMP = 0,
D3DXIFF_JPG = 1,
D3DXIFF_TGA = 2,
D3DXIFF_PNG = 3,
D3DXIFF_DDS = 4,
D3DXIFF_PPM = 5,
D3DXIFF_DIB = 6,
D3DXIFF_HDR = 7,
D3DXIFF_PFM = 8,
D3DXIFF_FORCE_DWORD = 0x7fffffff,
} D3DXIMAGE_FILEFORMAT, *LPD3DXIMAGE_FILEFORMAT;

Constants

D3DXIFF_BMP
Windows bitmap (BMP) file format.
D3DXIFF_JPG
Joint Photographics Experts Group (JPEG) compressed file format.
D3DXIFF_TGA
Truevision (Targa, or TGA) image file format.
D3DXIFF_PNG
Portable Network Graphics (PNG) file format.
D3DXIFF_DDS
DirectDraw surface (DDS) file format.
D3DXIFF_PPM
Portable pixmap (PPM) file format.
D3DXIFF_DIB
Windows device-independent bitmap (DIB) file format.
D3DXIFF_HDR
High dynamic range (HDR) file format.
D3DXIFF_PFM
Portable float map file format.
D3DXIFF_FORCE_DWORD
Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.

Remarks

Functions that begin with D3DXLoadxxx support all of the formats listed. Functions that begin with D3DXSavexxx support all but the Truevision (.tga) and portable pixmap (.ppm) formats.

The following table lists the available input and output formats.

File Extension Description
.bmp Windows bitmap format. Contains a header that describes the resolution of the device on which the rectangle of pixels was created, the dimensions of the rectangle, the size of the array of bits, a logical palette, and an array of bits that defines the relationship between pixels in the bitmapped image and entries in the logical palette.
.dds DirectDraw Surface file format. Stores textures, volume textures, and cubic environment maps, with or without mipmap levels, and with or without pixel compression. See DDS File Reference.
.dib Windows DIB. Contains an array of bits combined with structures that specify width and height of the bitmapped image, color format of the device where the image was created, and resolution of the device used to create that image.
.hdr HDR format. Encodes each pixel as an RGBE 32-bit color, with 8 bits of mantissa for red, green, and blue, and a shared 8-bit exponent. Each channel is separately compressed with run-length encoding (RLE).
.jpg JPEG standard. Specifies variable compression of 24-bit RGB color and 8-bit gray-scale Tagged Image File Format (TIFF) image document files.
.pfm Portable float map format. A raw floating point image format, without any compression. The file header specifies image width, height, monochrome or color, and machine word order. Pixel data is stored as 32-bit floating point values, with 3 values per pixel for color, and one value per pixel for monochrome.
.png PNG format. A non-proprietary bitmap format using lossless compression.
.ppm Portable Pixmap format. A binary or ASCII file format for color images that includes image height and width and the maximum color component value.
.tga Targa or Truevision Graphics Adapter format. Supports depths of 8, 15, 16, 24, and 32 bits, including 8-bit gray scale, and contains optional color palette data, image (x, y) origin and size data, and pixel data.

See Types of Bitmaps (GDI+) for more information on some of these formats.

接下來根據圖像的資源類型來創建紋理,如果是紋理資源,則調用D3DXCreateTextureFromFile()來創建紋理,并調用QueryInterface()來請求該類型的接口:

                // Call the appropriate loader according to the texture type.
switch( ImgInfo.ResourceType )
{
case D3DRTYPE_TEXTURE:
{
IDirect3DTexture9 *pTex;
                        if( SUCCEEDED( D3DXCreateTextureFromFileW( pd3dDevice, strTexture, &pTex ) ) )
{
// Obtain the base texture interface
pTex->QueryInterface( IID_IDirect3DBaseTexture9, (LPVOID*)&m_pTextures[i] );
                            // Release the specialized instance
pTex->Release();
}
                        break;
}

QueryInterface()的聲明如下:

Determines whether the object supports a particular COM interface. If it does, the system increases the object's reference count, and the application can use that interface immediately.

HRESULT QueryInterface(
REFIID riid,
LPVOID * ppvObj
);

Parameters

riid
Reference identifier of the interface being requested.
ppvObj
Address of a pointer to fill with the interface pointer if the query succeeds.

Return Values

If the method succeeds, the return value is S_OK.

If the method fails, the return value may be E_NOINTERFACE. Some components also have their own definitions of these error values in their header files.

Remarks

If the application does not need to use the interface retrieved by a call to this method, it must call the IUnknown::Release method for that interface to free it. The IUnknown::QueryInterface method makes it possible to extend objects without interfering with functionality.

如果立方體紋理資源則調用D3DXCreateCubeTextureFromFile()來創建立方體紋理緩存,如果是D3DRTYPE_VOLUMETEXTURE類型的資源,則調用D3DXCreateVolumeTextureFromFile()來創建該類型的紋理資源:

                    case D3DRTYPE_CUBETEXTURE:
{
IDirect3DCubeTexture9 *pTex;
                        if( SUCCEEDED( D3DXCreateCubeTextureFromFile( pd3dDevice, strTexture, &pTex ) ) )
{
// Obtain the base texture interface
pTex->QueryInterface( IID_IDirect3DBaseTexture9, (LPVOID*)&m_pTextures[i] );
                            // Release the specialized instance
pTex->Release();
}
                        break;
}
                    case D3DRTYPE_VOLUMETEXTURE:
{
IDirect3DVolumeTexture9 *pTex;
                        if( SUCCEEDED( D3DXCreateVolumeTextureFromFile( pd3dDevice, strTexture, &pTex ) ) )
{
// Obtain the base texture interface
pTex->QueryInterface( IID_IDirect3DBaseTexture9, (LPVOID*)&m_pTextures[i] );
                            // Release the specialized instance
pTex->Release();
}
                        break;
}

D3DXCreateCubeTextureFromFile()的聲明如下:

Creates a cube texture from a file.

HRESULT D3DXCreateCubeTextureFromFile(
LPDIRECT3DDEVICE9 pDevice,
LPCTSTR pSrcFile,
LPDIRECT3DCUBETEXTURE9 * ppCubeTexture
);

Parameters

pDevice
[in] Pointer to an IDirect3DDevice9 interface, representing the device to be associated with the cube texture.
pSrcFile
[in] Pointer to a string that specifies the filename. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.
ppCubeTexture
[out] Address of a pointer to an IDirect3DCubeTexture9 interface, representing the created cube texture object.

Return Values

If the function succeeds, the return value is D3D_OK. If the function fails, the return value can be one of the following values: D3DERR_INVALIDCALL.

D3DERR_NOTAVAILABLED3DERR_OUTOFVIDEOMEMORYD3DXERR_INVALIDDATAE_OUTOFMEMORY

Remarks

The compiler setting also determines the function version. If Unicode is defined, the function call resolves to D3DXCreateCubeTextureFromFileW. Otherwise, the function call resolves to D3DXCreateCubeTextureFromFileA because ANSI strings are being used.

The function is equivalent to D3DXCreateCubeTextureFromFileEx(pDevice, pSrcFile, D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL, ppCubeTexture).

This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See D3DXIMAGE_FILEFORMAT.

Note that a resource created with this function will be placed in the memory class denoted by D3DPOOL_MANAGED.

Filtering is automatically applied to a texture created using this method. The filtering is equivalent to D3DX_FILTER_TRIANGLE | D3DX_FILTER_DITHER in D3DX_FILTER.

D3DXCreateCubeTextureFromFile uses the DirectDraw surface (DDS) file format. The DirectX Texture Editor (dxtex.exe) enables you to generate a cube map from other file formats and save it in the DDS file format.

D3DXCreateVolumeTextureFromFile()的聲明如下:

Creates a volume texture from a file.

HRESULT D3DXCreateVolumeTextureFromFile(
LPDIRECT3DDEVICE9 pDevice,
LPCTSTR pSrcFile,
LPDIRECT3DVOLUMETEXTURE9 * ppVolumeTexture
);

Parameters

pDevice
[in] Pointer to an IDirect3DDevice9 interface, representing the device to be associated with the volume texture.
pSrcFile
[in] Pointer to a string that specifies the file name. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.
ppVolumeTexture
[out] Address of a pointer to an IDirect3DVolumeTexture9 interface representing the created texture object.

Return Values

If the function succeeds, the return value is D3D_OK. If the function fails, the return value can be one of the following:

D3DERR_NOTAVAILABLED3DERR_OUTOFVIDEOMEMORYD3DERR_INVALIDCALLD3DXERR_INVALIDDATAE_OUTOFMEMORY

Remarks

The compiler setting also determines the function version. If Unicode is defined, the function call resolves to D3DXCreateVolumeTextureFromFileW. Otherwise, the function call resolves to D3DXCreateVolumeTextureFromFileA because ANSI strings are being used.

The function is equivalent to D3DXCreateVolumeTextureFromFileEx(pDevice, pSrcFile, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL, ppVolumeTexture).

This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See D3DXIMAGE_FILEFORMAT.

Mipmapped textures automatically have each level filled with the loaded texture.

When loading images into mipmapped textures, some devices are unable to go to a 1x1 image and this function will fail. If this happens, then the images need to be loaded manually.

Note that a resource created with this function will be placed in the memory class denoted by D3DPOOL_MANAGED.

Filtering is automatically applied to a texture created using this method. The filtering is equivalent to D3DX_FILTER_TRIANGLE | D3DX_FILTER_DITHER in D3DX_FILTER.


posted on 2008-05-31 09:42 lovedday 閱讀(1556) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区二区三区四区五区黄| 国产精品伦一区| 日韩一区二区福利| 亚洲电影在线看| 久久亚洲私人国产精品va| 久久国产婷婷国产香蕉| 欧美一区二区在线看| 欧美中文字幕在线视频| 久久久久国产精品厨房| 蜜桃av一区二区三区| 亚洲国产91色在线| 亚洲精品国产欧美| 9久草视频在线视频精品| 一区二区三区.www| 久久久精品视频成人| 欧美福利电影在线观看| 欧美性猛交一区二区三区精品| 国产欧美一级| 一本色道久久综合狠狠躁篇的优点| 亚洲欧美日韩一区二区三区在线 | 亚洲三级免费| 欧美日本二区| 欧美日韩免费一区| 国产在线欧美日韩| 亚洲九九九在线观看| 欧美在线观看天堂一区二区三区| 久久影视精品| 中日韩美女免费视频网址在线观看| 午夜精品久久久久久久男人的天堂| 久久亚洲春色中文字幕| 欧美三日本三级三级在线播放| 国产欧美日韩91| 99re热这里只有精品免费视频| 欧美一区二区三区电影在线观看| 欧美激情视频一区二区三区在线播放 | 欧美激情第六页| 国产欧美一区二区白浆黑人| 亚洲黄色在线视频| 欧美一区二区三区喷汁尤物| 亚洲激情在线观看| 久久久国产精品亚洲一区| 国产精品乱码人人做人人爱| 亚洲精品久久久蜜桃 | 亚洲第一二三四五区| 欧美一区二区三区视频在线观看| 亚洲国产成人精品久久久国产成人一区 | 欧美成人高清视频| 午夜精品亚洲| 国产精品mv在线观看| 亚洲国产日韩欧美在线动漫| 久久综合激情| 欧美在线视频导航| 国产精品热久久久久夜色精品三区| 日韩天天综合| 欧美超级免费视 在线| 久久久综合网| 伊人婷婷欧美激情| 久久青青草原一区二区| 亚洲自拍偷拍网址| 国产精品一二一区| 西瓜成人精品人成网站| 亚洲视频图片小说| 欧美日韩免费观看一区三区| 一区二区三区精品视频在线观看| 欧美国产先锋| 欧美老女人xx| 亚洲欧美激情视频| 亚洲男人天堂2024| 国内成人自拍视频| 免播放器亚洲| 欧美成人小视频| 日韩视频在线播放| 亚洲老司机av| 国产日韩欧美电影在线观看| 国内精品久久久久影院色 | 国产精品你懂得| 久久国产99| 久久久久久一区二区三区| 亚洲国产精品成人精品| 欧美激情综合色| 欧美日韩一区二区视频在线| 亚洲视频专区在线| 亚洲一区二区精品| 伊人天天综合| 亚洲精品久久嫩草网站秘色 | 国产精品成人观看视频免费 | 亚洲人成网站在线播| 91久久精品日日躁夜夜躁国产| 免费成人性网站| 中文一区在线| 久久久99久久精品女同性| 日韩午夜激情电影| 亚洲免费一在线| 亚洲欧洲另类| 亚洲女爱视频在线| 亚洲精品免费在线观看| 亚洲资源av| 亚洲国产精品久久人人爱蜜臀| 91久久精品日日躁夜夜躁国产| 国产精品私房写真福利视频| 免费在线观看一区二区| 欧美日韩一区二区视频在线| 久久免费午夜影院| 国产精品久久久久久久久免费| 免费成人小视频| 国产精品户外野外| 欧美ed2k| 国产女主播一区二区| 亚洲第一区色| 国外成人在线视频网站| 艳妇臀荡乳欲伦亚洲一区| 依依成人综合视频| 亚洲欧美一区二区精品久久久| 亚洲黄色在线视频| 久久国产精品网站| 午夜精品一区二区三区电影天堂| 能在线观看的日韩av| 久久裸体艺术| 国产精品丝袜91| 一本一本a久久| 亚洲三级影院| 麻豆精品精华液| 久久国产精品亚洲va麻豆| 欧美午夜精品理论片a级大开眼界| 欧美国产一区视频在线观看| 黄色日韩网站视频| 亚洲影院污污.| 亚洲影视在线播放| 欧美日韩一区二区三| 亚洲人成网站777色婷婷| 国产一区在线免费观看| 亚洲一区免费在线观看| 亚洲一区二区三区高清| 亚洲欧美另类在线观看| 99在线精品视频在线观看| 久久久综合激的五月天| 久久国产视频网站| 国产深夜精品福利| 欧美一二三视频| 欧美一区亚洲| 国产农村妇女精品一二区| 午夜精品一区二区三区在线播放| 午夜精品一区二区三区在线播放 | 欧美一区二区视频免费观看| 欧美一区二区三区四区视频| 国产精品第一区| 亚洲专区一二三| 久久精品麻豆| 国产亚洲精品bt天堂精选| 欧美一级淫片aaaaaaa视频| 久久福利视频导航| 黄网动漫久久久| 久久精品国产77777蜜臀| 久久伊人一区二区| 亚洲精品国产精品国自产观看浪潮 | 久久香蕉国产线看观看网| 免费成人网www| 亚洲精品一二三| 欧美视频一区| 一区二区日本视频| 久久久久国产精品一区二区| 伊大人香蕉综合8在线视| 久久亚洲捆绑美女| 亚洲美女在线看| 午夜在线精品偷拍| 精久久久久久| 欧美精品1区2区| 亚洲图中文字幕| 久久成人免费网| 亚洲人成人一区二区三区| 欧美亚洲第一页| 久久久久久久尹人综合网亚洲| 亚洲国产高清自拍| 午夜精品久久久久久久99水蜜桃| 国内精品伊人久久久久av一坑 | 国内成人精品2018免费看| 欧美成人a∨高清免费观看| 亚洲一区二区三区四区在线观看| 美女国产精品| 亚洲一区在线免费观看| 在线播放亚洲| 国产精品高清免费在线观看| 久久久久久伊人| 亚洲香蕉视频| 亚洲国产精品久久久久秋霞不卡| 午夜精品在线看| 亚洲精品在线一区二区| 国产日产欧美一区| 欧美日韩第一区| 久久网站免费| 亚洲影院免费| 亚洲美女色禁图| 欧美国产91| 久久精品二区亚洲w码| 亚洲婷婷在线| 亚洲巨乳在线| 在线观看日韩| 国模私拍一区二区三区| 欧美在线啊v一区| 亚洲久久一区二区|