游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2631|回复: 2

d3d各种纹理创建方式比较

[复制链接]

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2011-5-25 23:09:00 | 显示全部楼层 |阅读模式

  1. // CreateTexture()方式
  2. // 若显卡不支持非2的次幂,则创建非2的次幂尺寸图像将失败
  3. hr = m_pD3DDevice->CreateTexture(300, 300, 0, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &m_pTexture, NULL);


  4. // D3DXCreateTexture()方式
  5. // 若显卡不支持非2的次幂,则创建非2的次幂图像将被扩充成2的次幂
  6. hr = D3DXCreateTexture(m_pD3DDevice, 300, 300, 0, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &m_pTexture);


  7. // D3DXCreateTextureFromFileEx()方式
  8. // 若显卡不支持非2的次幂,则创建非2的次幂图像不会失败,且不会被扩充成2的次幂
  9. hr = D3DXCreateTextureFromFileEx(m_pD3DDevice, szFile, D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT_NONPOW2,
  10.                         D3DFMT_FROM_FILE, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_FILTER_NONE,
  11. D3DX_DEFAULT, 0, &imageInfo, NULL, &m_pTexture);


  12. // D3DXCreateTextureFromFileInMemoryEx()方式
  13. // 若显卡不支持非2的次幂,则创建非2的次幂图像将会无视D3DX_DEFAULT_NONPOW2,进而将图像尺寸扩充成2的次幂
  14. FILE* pFile = fopen(szFile, "rb");
  15. fseek(pFile, 0, SEEK_END);
  16. int size = ftell(pFile);
  17. fseek(pFile, 0, SEEK_SET);

  18. BYTE* pData = new BYTE[size];
  19. fread(pData, size, 1, pFile);
  20. fclose(pFile);

  21. hr = D3DXCreateTextureFromFileInMemoryEx(m_pD3DDevice, pData, size, D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT_NONPOW2, 0, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_DEFAULT,
  22. 0, &imageInfo, NULL, &m_pTexture);
复制代码


很奇怪的是,通过D3DXCreateTextureFromFileEx()创建的纹理即使显卡不支持非2的次幂,也能创建成功,并且通过GetLevelDesc()函数获得的尺寸仍然是原尺寸,且通过LockRect()得到的pitch也是非2的次幂,而D3DXCreateTextureFromFileInMemoryEx()却不行,非常奇怪.
我在想,既然D3DXCreateTextureFromFileEx()可以实现非2的次幂图像的顺利加载,为什么其他函数却不可以,特别是D3DXCreateTexture()和CreateTexture(),而恰恰是通过填充像素来创建纹理的方式更频繁些.很可能D3D这些方式也都可以实现,就是我还没找到那个方法..
D3D这水真是深..

0

主题

275

帖子

676

积分

高级会员

Rank: 4

积分
676
发表于 2011-5-25 23:49:00 | 显示全部楼层

Re:d3d各种纹理创建方式比较

1.不要??造有非2的次幂的??D 自己?展一套可以?入有非2的次幂的策略
  切?D合?阒?h
2.不要使用D3DXCreateTextureFromFileEx D3DXCreateTextureFromFileInMemoryEx ??造??D
因?檫@是D3DX API 模??常???其??是包?D3D API?Ψ?的次幂有一套自己的策略而且非常得蠢

3,使用?D3D API D3DDevice->CreateTexture();

??铀?氐乃?秃?\了....

1

主题

49

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2011-5-26 23:08:00 | 显示全部楼层

Re:d3d各种纹理创建方式比较

d3dx能被算作图形设备api里面的东西么..
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-8 06:16

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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