游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2807|回复: 3

D3D9还是不忘HDC

[复制链接]

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-7-7 18:16:00 | 显示全部楼层 |阅读模式
// 这是微软的一个例子,用来生成一个3D的字体Mesh

HRESULT CreateD3DXTextMesh( IDirect3DDevice9* pd3dDevice,
                            LPD3DXMESH* ppMesh,
                            TCHAR* pstrFont, DWORD dwSize,
                            BOOL bBold, BOOL bItalic )
{
    HRESULT hr;
    LPD3DXMESH pMeshNew = NULL;
    HDC hdc = CreateCompatibleDC( NULL );
    if( hdc == NULL )
        return E_OUTOFMEMORY;
    INT nHeight = -MulDiv( dwSize, GetDeviceCaps(hdc, LOGPIXELSY), 72 );
    HFONT hFont;
    HFONT hFontOld;

    hFont = CreateFont(nHeight, 0, 0, 0, bBold ? FW_BOLD : FW_NORMAL, bItalic, FALSE, FALSE, DEFAULT_CHARSET,
        OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, pstrFont);
   
    hFontOld = (HFONT)SelectObject(hdc, hFont);

    hr = D3DXCreateText( pd3dDevice, hdc, L"This is calling D3DXCreateText",
                         0.001f, 0.4f, &pMeshNew, NULL, NULL);

    SelectObject(hdc, hFontOld);
    DeleteObject( hFont );
    DeleteDC( hdc );

    if( SUCCEEDED( hr ) )
        *ppMesh = pMeshNew;

    return hr;
}

2

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
QQ
发表于 2005-7-10 12:19:00 | 显示全部楼层

Re:D3D9还是不忘HDC

没错阿 这个接口本来就是用GDI的 当然还有其它的字体接口

23

主题

515

帖子

552

积分

高级会员

Rank: 4

积分
552
发表于 2005-7-10 18:30:00 | 显示全部楼层

Re:D3D9还是不忘HDC

?我不明白HDC有问题吗??

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
 楼主| 发表于 2005-7-11 10:20:00 | 显示全部楼层

Re:D3D9还是不忘HDC

HDC用起来当然没有问题,问题在于,HDC属于GDI的范畴,DX本来自己有能力去访问图形底层和系统底层,偏偏绕着弯使用GDI接口来处理这个问题,这就意味着你不能过度频繁的在你的渲染序列中使用它。

上面的例子是在程序初始化的时候生成了一个3维的文字Mesh,如果你在渲染过程中频繁动态的生成这个东西,我想效率会大打折扣,不知道有没有人测试一下(微软的东西有时候很难想当然,也许我说的不对)。

但有一点,还记得DX9b吗,微软也是有这么一个类似的例子,当时不是生成字体Mesh,而是生成字体Texure,微软的解释是IDXFont使用了GDI,性能有问题,建议大家初始化的时候生成字体Texure而不是使用IDXFont。

我想这个也差不多把,不过这回跟上次不同,不是如何显示字体的问题,而是如何显示3D字体的问题,微软提供了这么一个临时的方法(我认为微软应该会改进的)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-26 08:29

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表