Nanashi-softプ ログラマ専用DirectX11開発


◇DirectX11プログラミング -VC++2010 Expressでテクスチャをリソースに格納する-

タイトルどうしようかと思ったが,私がこの情報を欲しい時にググったワードにしてみた(*'-')
無償版の Microsoft Visual C++ 2010 Expressには,リソースエディタが付いていません

色々調べてみると,自分で定義ファイルを作ればいい。ということがわかりました


●rcファイルを作る
プロジェクト生成方法によっては,プロジェクト名.rcファイルがありますのでそれを開いて下さい
無い場合は,テキストエディタで resource.rcファイルを,UTF-16改行コード CR+LFで生成して下さい(全部英字で書くのが一番です)

中身は,1行1ファイルで,以下のように記述します
指標 フォーマット "ファイル名"

例)
eye2.png PNG "C:\\systemgc\\resource\\reshi\\eye2.png"
例のように指標部分をファイル名にしておくと違和感無く使えます(使用できない文字がありますが)

このファイルを,VCを起動してソリューションエクスプローラーの『リソースファイル』の所に,ドロップします
ただそれだけで,ビルド時に実行ファイルに埋め込んでくれます
間違えてソースファイルの方に入れてしまってエラーを出している人がいたので注意をw

この状態でビルドすると,記述が正しければ exeファイルが大きくなります

【注意】指標部分には,『 』スペースや『_』アンダーバーは使用できません


●リソースからテクスチャーを読み込む(DirectX11用)
上の例のpngテクスチャーを読み込んでみます
//リソースファイル読み込み
char filename2[256];
strcpy(filename2, "eye2.png");
HRSRC hRs=FindResource(NULL, filename2, "PNG");
HANDLE hTest = LoadResource(NULL, hRs);
LPBYTE lpTest = (LPBYTE)LockResource(hTest);
DWORD size=SizeofResource(NULL, hRs);

//テクスチャー生成
D3DX11_IMAGE_LOAD_INFO LoadInfo;
LoadInfo.Width = 0;
LoadInfo.Height = 0;
LoadInfo.Depth = 0;
LoadInfo.FirstMipLevel = 0;
LoadInfo.MipLevels = D3DX11_DEFAULT,
LoadInfo.Usage = D3D11_USAGE_DEFAULT;
LoadInfo.BindFlags = D3D11_BIND_SHADER_RESOURCE;
LoadInfo.CpuAccessFlags = 0;
LoadInfo.MiscFlags = 0;
LoadInfo.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
LoadInfo.Filter = D3DX11_FILTER_LINEAR;
LoadInfo.MipFilter = D3DX11_FILTER_POINT;
LoadInfo.pSrcInfo = NULL;
ID3D11ShaderResourceView *texSRV;
D3DX11CreateShaderResourceViewFromMemory(hpDevice, lpTest, size, &LoadInfo, NULL, texSRV, NULL)

//テクスチャーをピクセルシェーダーにセット
ID3D11ShaderResourceView* hpShaderResourceViews[] = { texSRV };
hpDeviceContext->PSSetShaderResources(0, 1, hpShaderResourceViews);
こんな感じになります('-'*)


TOPプログラマ 専用DirectX11開発