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

天行健 君子當自強而不息

創(chuàng)建游戲內(nèi)核(9)【C風格版】

 

本篇是創(chuàng)建游戲內(nèi)核(8)【C風格版】的續(xù)篇,關于該內(nèi)核的細節(jié)說明請參考創(chuàng)建游戲內(nèi)核(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);

實現(xiàn):

//-------------------------------------------------------------------
// 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 閱讀(738) 評論(0)  編輯 收藏 引用


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


公告

導航

統(tǒng)計

常用鏈接

隨筆分類(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>
            亚洲精品在线视频| 久久免费国产| 久久久国产一区二区三区| 日韩写真在线| 在线视频欧美一区| 亚洲性感美女99在线| 夜夜嗨av一区二区三区四季av | 日韩一本二本av| 夜夜躁日日躁狠狠久久88av| 一区二区三区日韩精品| 性欧美暴力猛交69hd| 久久精品水蜜桃av综合天堂| 欧美国产精品劲爆| 国产精品亚洲一区| 伊人成年综合电影网| 亚洲日本aⅴ片在线观看香蕉| 99精品国产一区二区青青牛奶| 中文网丁香综合网| 久久久91精品国产一区二区精品| 欧美国产免费| 99re6热只有精品免费观看 | 久久精品官网| 亚洲国产精品99久久久久久久久| 一区二区三区三区在线| 亚洲欧美精品在线观看| 久久躁狠狠躁夜夜爽| 亚洲乱码国产乱码精品精天堂 | 久久免费视频这里只有精品| 欧美精品二区| 国产在线不卡视频| 亚洲一区二区精品| 欧美大片在线看免费观看| 中文国产成人精品久久一| 久久久中精品2020中文| 午夜精品久久久99热福利| 另类尿喷潮videofree| 国产精品三级久久久久久电影| 韩国一区二区三区在线观看| 亚洲视频中文| 欧美风情在线| 久久大综合网| 国产精品日韩电影| 一区二区三区国产精华| 国产一区二区丝袜高跟鞋图片| 在线观看av一区| 久久不见久久见免费视频1| 亚洲美女精品久久| 欧美高清日韩| ●精品国产综合乱码久久久久| 午夜视黄欧洲亚洲| 99国产精品99久久久久久| 免费日韩成人| **欧美日韩vr在线| 久久久久久高潮国产精品视| 亚洲深夜福利在线| 欧美午夜剧场| 亚洲午夜精品视频| 9人人澡人人爽人人精品| 欧美国产综合一区二区| 亚洲国语精品自产拍在线观看| 久久综合九色九九| 久久国产日韩欧美| 韩日精品视频| 老司机一区二区| 久久九九久精品国产免费直播| 国产欧美在线观看| 久久精品日韩欧美| 久久精品日韩欧美| 在线免费观看一区二区三区| 久久综合电影一区| 久久夜色精品国产亚洲aⅴ| 在线国产日韩| 欧美91视频| 欧美国产日韩一区二区| 亚洲免费精品| 在线视频亚洲| 国产一区二区欧美| 免费在线看一区| 欧美激情综合五月色丁香| 中日韩午夜理伦电影免费| 一区二区三区四区精品| 国产日产欧产精品推荐色 | 日韩午夜在线播放| 亚洲人成在线观看一区二区| 欧美日本在线看| 亚洲影院色在线观看免费| 亚洲自拍电影| 永久免费视频成人| 亚洲人在线视频| 国产九九精品视频| 欧美大片一区二区| 欧美视频精品在线| 久久久国产成人精品| 欧美v亚洲v综合ⅴ国产v| 亚洲视频二区| 久久九九热re6这里有精品| 亚洲精品偷拍| 午夜欧美理论片| 亚洲毛片在线看| 亚洲欧美日韩精品久久奇米色影视| 一区二区三区我不卡| 亚洲美女av黄| 狠狠色综合日日| 日韩一区二区精品| 欧美成人按摩| 久久精品国产精品 | 国语精品一区| 99国产精品国产精品毛片| 国产综合精品一区| 亚洲剧情一区二区| 黄色成人片子| 亚洲欧美日韩国产一区| 91久久久久| 欧美专区18| 亚洲欧美日本伦理| 欧美a级片网站| 久久九九免费| 国产精品一卡| 99精品国产热久久91蜜凸| **网站欧美大片在线观看| 欧美一级一区| 新67194成人永久网站| 欧美日韩亚洲天堂| 亚洲国产精品国自产拍av秋霞| 韩国在线视频一区| 欧美一区二区三区免费视| 亚洲一区二区动漫| 欧美日本一区二区高清播放视频| 欧美freesex交免费视频| 国产欧美一区二区三区国产幕精品| 99re热这里只有精品视频| 亚洲另类在线视频| 欧美成人免费一级人片100| 免费成人在线视频网站| 国模大胆一区二区三区| 午夜精品国产精品大乳美女| 亚洲欧美乱综合| 国产精品成人aaaaa网站| 亚洲高清不卡一区| 在线观看亚洲专区| 免费中文字幕日韩欧美| 欧美成年人视频网站欧美| 在线成人中文字幕| 久久视频这里只有精品| 久久视频在线视频| 狠狠色2019综合网| 久久婷婷国产麻豆91天堂| 免费av成人在线| 亚洲欧洲午夜| 欧美日韩高清区| 中文欧美在线视频| 欧美亚洲一区二区在线观看| 国产欧美一区视频| 欧美伊人久久大香线蕉综合69| 午夜欧美精品久久久久久久| 国产日韩成人精品| 久久精品日产第一区二区| 欧美大片免费久久精品三p| 91久久久在线| 欧美午夜精品久久久| 亚洲一区二区综合| 久久人人97超碰精品888| 亚洲黄色精品| 欧美日韩中文字幕在线视频| 亚洲一级特黄| 久久综合狠狠综合久久激情| 亚洲经典在线| 国产精品成人免费精品自在线观看| 午夜久久资源| 欧美成人免费va影院高清| 一本一本大道香蕉久在线精品| 国产精品推荐精品| 久久久久综合网| 亚洲三级毛片| 欧美一区二区三区日韩| 永久555www成人免费| 欧美人与性动交α欧美精品济南到| 亚洲天堂黄色| 欧美国产高清| 午夜一级久久| 亚洲国产一区在线观看| 国产精品美女久久久久久免费| 久久美女性网| 一区二区三区欧美在线| 久久综合免费视频影院| 一区二区三区四区国产精品| 国产综合视频在线观看| 欧美日韩精品一二三区| 久久精品av麻豆的观看方式| 亚洲六月丁香色婷婷综合久久| 久久精品一级爱片| 亚洲一品av免费观看| 亚洲韩国青草视频| 国内精品一区二区三区| 国产精品99免费看| 欧美诱惑福利视频| 日韩午夜激情电影| 日韩亚洲欧美一区| 狠狠狠色丁香婷婷综合久久五月| 国产精品福利久久久|