读书人

无法打开源文件 d3dx9tex.h解决方法

发布时间: 2013-01-25 15:55:29 作者: rapoo

无法打开源文件 d3dx9tex.h
本帖最后由 jintuo 于 2012-07-19 10:17:52 编辑 刚开始研究beginning directx9
第一个引用d3dx9tex.h的代码就报这个错误。

我已经在项目-》属性-》配置属性-》连接器-》常规-》附加库目录里面添加了“C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include”文件夹。而且我看到这个文件夹下面有“d3dx9tex.h”这个文件。
可是在vs2010“解决方案资源管理器”中的“外部依赖项”就是没有“d3dx9tex.h”。

debug就报错。

网上找了好久也没找到为什么。有哪位清楚的帮帮忙好么?

源码如下


#include <windows.h>
#include <d3d9.h>
#include <d3dx9tex.h>
#include <string>

HINSTANCE hInst;
HWND wndHandle;

bool initWindow(HINSTANCE hInstance);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

// DirectX functions and global variables
HRESULT lastResult;
LPDIRECT3D9 pD3D;
LPDIRECT3DDEVICE9 pd3dDevice;
IDirect3DSurface9*bkgrd;

bool initDirect3D(HWND hwnd);
IDirect3DSurface9* getSurfaceFromBitmap(std::string filename);
void Render(void);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
if (!initWindow(hInstance))
return false;

if (!initDirect3D(wndHandle))
return false;

bkgrd = getSurfaceFromBitmap("./background.bmp");
if (bkgrd == NULL)
{
MessageBox(NULL, "Make sure the file background.bmp is in the current directory", "ERROR", MB_OK);
return 0;
}

// Main message loop:
// Enter the message loop
MSG msg;
ZeroMemory( &msg, sizeof(msg) );
while( msg.message!=WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
// call our render function
Render();
}
}

if( pd3dDevice != NULL)
{
pd3dDevice->Release();
pd3dDevice = NULL;
}
if( pD3D != NULL)
{
pD3D->Release();
pD3D = NULL;
}

return (int) msg.wParam;
}

bool initWindow(HINSTANCE hInstance)
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style= CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc= (WNDPROC)WndProc;
wcex.cbClsExtra= 0;
wcex.cbWndExtra= 0;
wcex.hInstance= hInstance;
wcex.hIcon= 0;
wcex.hCursor= LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName= NULL;
wcex.lpszClassName= "DirectXExample";
wcex.hIconSm= 0;
RegisterClassEx(&wcex);

wndHandle = CreateWindow("DirectXExample",


"DirectXExample",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
640,
480,
NULL,
NULL,
hInstance,
NULL);
if (!wndHandle)
return false;

ShowWindow(wndHandle, SW_SHOW);
UpdateWindow(wndHandle);

return true;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}

bool initDirect3D(HWND hwnd)
{
if( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
{
lastResult = E_FAIL;
return false;
}

D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.BackBufferCount = 1;
d3dpp.BackBufferHeight = 480;
d3dpp.BackBufferWidth = 640;
d3dpp.hDeviceWindow = hwnd;

if( FAILED( pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &pd3dDevice ) ) )
{
lastResult = E_FAIL;
return false;
}

return true;
}

IDirect3DSurface9* getSurfaceFromBitmap(std::string filename)
{
HRESULT hResult;
IDirect3DSurface9* surface = NULL;
D3DXIMAGE_INFO imageInfo;

// Get the width and height info from this bitmap
hResult = D3DXGetImageInfoFromFile(filename.c_str(), &imageInfo);
if FAILED (hResult)
return NULL;

hResult = pd3dDevice->CreateOffscreenPlainSurface(imageInfo.Width, imageInfo.Height, D3DFMT_X8R8G8B8, D3DPOOL_DEFAULT, &surface, NULL);
if (FAILED(hResult))
return NULL;

hResult = D3DXLoadSurfaceFromFile(surface, NULL, NULL, filename.c_str(), NULL, D3DX_DEFAULT, 0, NULL);
if (FAILED(hResult))
return NULL;

return surface;
}

void Render(void)
{
if( NULL == pd3dDevice )
return;

// Clear the backbuffer to a blue color
pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );



IDirect3DSurface9* backbuffer;
pd3dDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO, &backbuffer);

HRESULT hResult = pd3dDevice->StretchRect(bkgrd, NULL, backbuffer, NULL, D3DTEXF_NONE);
if (hResult != D3D_OK)
MessageBox(NULL,"failed", "error", MB_OK);

// Present the backbuffer contents to the display
pd3dDevice->Present( NULL, NULL, NULL, NULL );
}


[解决办法]
C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include
把这个目录在配置中从最下面移到最上面试试看

读书人网 >网络游戏

热点推荐