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

天行健 君子當自強而不息

創建游戲內核(9)【C風格版】

 

本篇是創建游戲內核(8)【C風格版】的續篇,關于該內核的細節說明請參考創建游戲內核(9)

 

接口:

BOOL load_texture_from_file(LPDIRECT3DTEXTURE9* texture, pcstr filename, DWORD transparent, D3DFORMAT format);
BOOL create_texture(LPDIRECT3DTEXTURE9* texture, DWORD width, DWORD height, D3DFORMAT format);
BOOL clone_texture(LPDIRECT3DTEXTURE9* dest_texture, 
const LPDIRECT3DTEXTURE9 src_texture);

long get_texture_width(const LPDIRECT3DTEXTURE9 texture);
long get_texture_height(const LPDIRECT3DTEXTURE9 texture);
long get_texture_format(const LPDIRECT3DTEXTURE9 texture);

BOOL draw_texture(ID3DXSprite* sprite, 
                  
const LPDIRECT3DTEXTURE9 texture,                   
                  
const RECT*       texture_src_rect,                 
                  
long dest_x,      long dest_y,
                  
float x_scale,    float y_scale,
                  D3DCOLOR color);

實現:

//-------------------------------------------------------------------
// Create texture object from specified file, you can specify transparent
// value and pixel format of the texture.
//-------------------------------------------------------------------
BOOL load_texture_from_file(LPDIRECT3DTEXTURE9* texture, pcstr filename, DWORD transparent, D3DFORMAT format)
{
    
// check condition first
    if(filename == NULL)
        
return FALSE;

    
// create a texture from file
    if(FAILED(D3DXCreateTextureFromFileEx(g_d3d_device, filename, D3DX_DEFAULT, D3DX_DEFAULT,
        D3DX_DEFAULT, 0, format, D3DPOOL_MANAGED, D3DX_FILTER_TRIANGLE, D3DX_FILTER_TRIANGLE,
        transparent, NULL, NULL, texture)))
    {
        
return FALSE;
    }

    
return TRUE;
}

//-------------------------------------------------------------------
// Creates a texture resource.
//-------------------------------------------------------------------
BOOL create_texture(LPDIRECT3DTEXTURE9* texture, DWORD width, DWORD height, D3DFORMAT format)
{
    
if(FAILED(g_d3d_device->CreateTexture(width, height, 0, 0, format, D3DPOOL_MANAGED, texture, NULL)))
        
return FALSE;

    
return TRUE;
}

//-------------------------------------------------------------------
// Clone d3d texture object from an existing IDirect3DTexture9 object 
// instance.
//-------------------------------------------------------------------
BOOL clone_texture(LPDIRECT3DTEXTURE9* dest_texture, const LPDIRECT3DTEXTURE9 src_texture)
{            
    
if(src_texture == NULL)
        
return FALSE;

    
// copy texture over, from source to dest.

    D3DSURFACE_DESC surface_desc;

    
if(FAILED(src_texture->GetLevelDesc(0, &surface_desc)))
        
return FALSE;    
    
    g_d3d_device->CreateTexture(surface_desc.Width, surface_desc.Height, 0, 0, 
                                surface_desc.Format, D3DPOOL_MANAGED, dest_texture, NULL);

    D3DLOCKED_RECT src_rect, dest_rect;

    
// locks a rectangle on a texture resource
    src_texture->LockRect(0, &src_rect, NULL, D3DLOCK_READONLY);
    (*dest_texture)->LockRect(0, &dest_rect, NULL, 0);

    memcpy(dest_rect.pBits, src_rect.pBits, src_rect.Pitch * surface_desc.Height);

    
// unlocks a rectangle on a texture resource
    src_texture->UnlockRect(0);
    (*dest_texture)->UnlockRect(0);

    
return TRUE;
}

//-------------------------------------------------------------------
// Get width of the texture.
//-------------------------------------------------------------------
long get_texture_width(const LPDIRECT3DTEXTURE9 texture)
{    
    
if(texture == NULL)
        
return 0;

    D3DSURFACE_DESC surface_desc;

    
if(FAILED(texture->GetLevelDesc(0, &surface_desc)))
        
return 0;

    
return surface_desc.Width;
}

//-------------------------------------------------------------------
// Get height of the texture.
//-------------------------------------------------------------------
long get_texture_height(const LPDIRECT3DTEXTURE9 texture)
{    
    
if(texture == NULL)
        
return 0;

    D3DSURFACE_DESC surface_desc;

    
if(FAILED(texture->GetLevelDesc(0, &surface_desc)))
        
return 0;

    
return surface_desc.Height;
}

//-------------------------------------------------------------------
// Get texture storage format.
//-------------------------------------------------------------------
long get_texture_format(const LPDIRECT3DTEXTURE9 texture)
{    
    
if(texture == NULL)
        
return D3DFMT_UNKNOWN;

    D3DSURFACE_DESC surface_desc;

    
if(FAILED(texture->GetLevelDesc(0, &surface_desc)))
        
return D3DFMT_UNKNOWN;

    
return surface_desc.Format;
}

//-------------------------------------------------------------------
// Draw a 2D portion of texture to device.
//-------------------------------------------------------------------
BOOL draw_texture(ID3DXSprite* sprite, 
                  
const LPDIRECT3DTEXTURE9 texture,                   
                  
const RECT*       texture_src_rect,                  
                  
long dest_x,      long dest_y,
                  
float x_scale,    float y_scale,
                  D3DCOLOR color)
{
    
// check condition
    if(texture == NULL || sprite == NULL)
        
return FALSE;    

    
// set the portion of the source texture

    D3DXMATRIX transform_matrix(x_scale,    0,          0,  0,
                                0,          y_scale,    0,  0,
                                0,          0,          1,  0,
                                0,          0,          0,  1);

    
// sets the sprite transforma
    sprite->SetTransform(&transform_matrix);

    D3DXVECTOR3 dest_pos = D3DXVECTOR3((
float)dest_x, (float)dest_y, 0);

    
// adds a sprite to the list of batched sprites
    if(FAILED(sprite->Draw(texture, texture_src_rect, NULL, &dest_pos, color)))
        
return FALSE;

    
return TRUE;
}

測試代碼:
/***********************************************************************************
PURPOSE:
    Test D3D texture function.
***********************************************************************************/


#include "core_common.h"
#include "core_framework.h"
#include "core_graphics.h"
#include "core_tool.h"

typedef 
struct DATA
{    
    ID3DXSprite*        sprite;
    IDirect3DTexture9*  texture;

    RECT                texture_rect;    
} *DATA_PTR;

//--------------------------------------------------------------------------------
// Initialize data for game.
//--------------------------------------------------------------------------------
BOOL game_init(void* data)
{
    DATA_PTR in_data = (DATA_PTR) data;

    
// Create Direct3D and Direct3DDevice object
    if(! create_display(g_hwnd, get_client_width(g_hwnd), get_client_height(g_hwnd), 16, TRUE, FALSE))
        
return FALSE;   

    
// load the texture map
    if(! load_texture_from_file(&in_data->texture, "tiger1.jpg", 0, D3DFMT_UNKNOWN))
        
return FALSE;

    g_d3d_device->SetTexture(0, in_data->texture);

    RECT& rect = in_data->texture_rect;

    rect.left   = 0;
    rect.top    = 0;
    rect.right  = get_window_width(g_hwnd);
    rect.bottom = get_window_height(g_hwnd);
   
    
// create sprite
    if(FAILED(D3DXCreateSprite(g_d3d_device, &in_data->sprite)))
        
return FALSE;

    
return TRUE;
}

//--------------------------------------------------------------------------------
// Render every game frame.
//--------------------------------------------------------------------------------
BOOL game_frame(void* data)
{
    DATA_PTR in_data = (DATA_PTR) data;

    clear_display_buffer(D3DCOLOR_RGBA(0, 0, 0, 255));

    IDirect3DTexture9* texture = in_data->texture;

    
if(SUCCEEDED(g_d3d_device->BeginScene()))
    {
        ID3DXSprite* sprite = in_data->sprite;

        
if(SUCCEEDED(sprite->Begin(0)))
        {
            draw_texture(sprite, texture, &in_data->texture_rect, 0, 0, 1, 1, 0xFFFFFFFF);

            sprite->End();
        }        

        g_d3d_device->EndScene();
    }

    present_display();

    
return TRUE;
}

//--------------------------------------------------------------------------------
// Release all game resources.
//--------------------------------------------------------------------------------
BOOL game_shutdown(void* data)
{
    DATA_PTR in_data = (DATA_PTR) data;

    release_com(in_data->sprite);
    release_com(in_data->texture);
    
    destroy_display();

    
return TRUE;
}

//--------------------------------------------------------------------------------
// Main function, routine entry.
//--------------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE inst, HINSTANCE pre_inst, LPSTR cmd_line, int cmd_show)
{    
    DWORD client_width  = 800;
    DWORD client_height = 520;
    DWORD x_pos = (get_screen_width()  - client_width) / 2;
    DWORD y_pos = (get_screen_height() - client_height) / 4;

    
if(! build_window(inst, "texture class", "texture test", WS_OVERLAPPEDWINDOW,
                      x_pos, y_pos, client_width, client_height))
    {
        
return -1;
    }

    DATA data;

    memset(&data, 0, 
sizeof(data));
    
    run_game(game_init, game_frame, game_shutdown, &data);
    
    
return 0;
}

截圖:


posted on 2007-10-25 23:29 lovedday 閱讀(740) 評論(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>
            欧美日韩亚洲一区二区三区在线 | 久久精品国产一区二区三区| 国产精品成人国产乱一区| 亚洲视频在线看| 亚洲一区二区动漫| 国产色产综合色产在线视频| 久久久91精品国产一区二区三区| 欧美在线综合视频| 在线观看一区二区视频| 91久久精品国产91性色tv| 欧美破处大片在线视频| 亚洲一区制服诱惑| 欧美一级专区免费大片| **性色生活片久久毛片| 最近中文字幕日韩精品| 欧美亚州一区二区三区| 久久黄色级2电影| 免费精品99久久国产综合精品| 9国产精品视频| 亚洲一区二区三区激情| 尤物精品国产第一福利三区 | 欧美在线视频一区二区| 久久久国产精彩视频美女艺术照福利 | 日韩亚洲国产欧美| 国产亚洲精品久| 欧美国产另类| 欧美日韩综合在线免费观看| 欧美一区日韩一区| 久久伊伊香蕉| 欧美一区91| 欧美激情一二三区| 久久久久一区二区| 欧美网站大全在线观看| 欧美www视频| 国产精品一区一区| 亚洲精品日韩在线| 有坂深雪在线一区| 亚洲一区视频在线| 在线视频日本亚洲性| 久久久久国产精品www| 亚洲男人影院| 欧美区高清在线| 欧美成在线视频| 国产人久久人人人人爽| 一本色道久久综合| 亚洲精品中文字幕女同| 久久久精品国产免大香伊| 亚洲欧美国产一区二区三区| 欧美激情一区二区三区蜜桃视频 | 亚洲精品中文字幕女同| 在线精品国产成人综合| 亚洲欧美一区二区原创| 亚洲一二区在线| 欧美韩日精品| 亚洲国产日韩综合一区| 好吊一区二区三区| 久久av资源网站| 欧美在线视频日韩| 国产欧美韩国高清| 亚洲欧美日韩国产| 欧美一级视频精品观看| 国产精品国产三级国产普通话三级| 亚洲人成网站777色婷婷| 亚洲精品乱码视频 | 一区二区不卡在线视频 午夜欧美不卡在 | 狠久久av成人天堂| 欧美一区日韩一区| 久久精品导航| 韩日精品视频一区| 久久亚洲综合色| 欧美国产日韩一二三区| 亚洲激情校园春色| 欧美精品一区二区高清在线观看| 亚洲国产精品久久久久秋霞蜜臀| 亚洲国产你懂的| 欧美黄色aa电影| 日韩视频精品| 性欧美1819性猛交| 国产一区在线免费观看| 久久国产夜色精品鲁鲁99| 老司机精品导航| 亚洲精品免费观看| 欧美视频在线一区二区三区| 亚洲一区三区视频在线观看| 久久国内精品自在自线400部| 国自产拍偷拍福利精品免费一| 久久亚洲精品一区| 亚洲欧洲一区二区三区在线观看| 亚洲五月婷婷| 国产一区二区欧美| 你懂的视频欧美| 一区二区三区视频在线观看| 欧美在线视频日韩| 亚洲精品久久| 国产精品青草综合久久久久99 | 欧美福利电影网| 亚洲天堂成人| 欧美sm视频| 亚洲影院免费| 亚洲国产美国国产综合一区二区| 欧美性猛交视频| 久久精品日产第一区二区三区| 亚洲国产日韩欧美一区二区三区| 亚洲欧美另类在线| 亚洲欧洲偷拍精品| 国产精品一区二区久久精品| 免播放器亚洲| 欧美一区在线看| 99xxxx成人网| 亚洲大片免费看| 久久黄色级2电影| 中文欧美日韩| 91久久精品国产91久久| 国产在线麻豆精品观看| 欧美日韩另类综合| 欧美3dxxxxhd| 久久久久国产一区二区三区四区 | 亚洲久久成人| 免费成人在线视频网站| 香蕉国产精品偷在线观看不卡| 亚洲国产精品激情在线观看| 国产乱子伦一区二区三区国色天香| 欧美刺激性大交免费视频| 欧美呦呦网站| 亚洲在线视频一区| 夜夜夜久久久| 亚洲精品视频啊美女在线直播| 欧美高清一区二区| 欧美69wwwcom| 老鸭窝亚洲一区二区三区| 欧美尤物巨大精品爽| 午夜精品在线观看| 亚洲欧美日韩一区二区三区在线 | 亚洲二区视频在线| 在线观看91精品国产入口| 狠狠噜噜久久| 国产在线视频不卡二| 国产精品亚洲不卡a| 国产精品免费小视频| 国产精品久久久久三级| 欧美日韩第一区| 欧美日韩三级视频| 欧美日韩亚洲一区二区三区四区| 欧美日韩国产bt| 欧美日韩在线看| 国产精品九九| 国产欧美一区二区精品秋霞影院| 国产欧美短视频| 国产一区二区中文| 一区在线免费| 亚洲欧洲精品一区二区三区| 亚洲人午夜精品免费| 99精品国产在热久久婷婷| 国产精品99久久久久久久久| 亚洲欧美日本国产有色| 欧美在线一级va免费观看| 久久精品国产视频| 免费一级欧美片在线播放| 欧美国产综合一区二区| 亚洲人成网站999久久久综合| 99ri日韩精品视频| 亚洲在线视频免费观看| 久久黄金**| 欧美激情一区二区三级高清视频| 欧美日韩免费一区二区三区视频| 国产精品久久久久毛片大屁完整版 | 亚欧成人在线| 久久综合五月天婷婷伊人| 欧美国产成人精品| 99伊人成综合| 久久精品国产一区二区三区| 欧美国产一区视频在线观看| 国产精品国产自产拍高清av| 国产自产精品| 一区二区三区不卡视频在线观看| 欧美一级视频免费在线观看| 女仆av观看一区| 亚洲视频一区二区| 久久久中精品2020中文| 欧美日韩精品三区| 好吊妞这里只有精品| 在线亚洲自拍| 免费看黄裸体一级大秀欧美| 一区二区三区国产盗摄| 久久天天狠狠| 国产精品卡一卡二卡三| 亚洲国产日韩欧美在线动漫| 午夜精品久久久久久久99水蜜桃| 欧美成人在线免费视频| 香蕉国产精品偷在线观看不卡| 欧美大成色www永久网站婷| 国产欧美日本在线| 一区二区三区 在线观看视频| 久久久亚洲欧洲日产国码αv| 亚洲美女中文字幕| 另类尿喷潮videofree| 国产精品资源在线观看| 亚洲最新色图| 亚洲高清一区二| 久久久91精品国产|