質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

Q&A

解決済

1回答

3907閲覧

DirectX12のWICTextureについて

ryo19

総合スコア32

DirectX

DirectX(ダイレクトエックス)は、 マイクロソフトが開発したゲーム・マルチメディア処理用のAPIの集合です。

0グッド

0クリップ

投稿2018/04/14 15:18

編集2018/05/03 11:32

前提・実現したいこと

・DirectX12でpngなどのデータを読み込みたい
・WICTextureというやつを使えばWIndows限定になるが便利とのこと

[ここに質問の内容を詳しく書いてください。]

WICTextureを使ってテクスチャマッピングをpngなどにも対応させたいと思い利用したいと思っているのですがさっぱりわかりません

http://go.microsoft.com/fwlink/?LinkId=248926 こちらでWICTextureをダウンロードできます

該当のソースコード

一部抜粋

Use_decl_annotations
HRESULT DirectX::LoadWICTextureFromFile(
ID3D12Device* d3dDevice,
const wchar_t* fileName,
ID3D12Resource** texture,
std::unique_ptr<uint8_t[]>& wicData, //ここがわかりません
D3D12_SUBRESOURCE_DATA& subresource,
size_t maxsize)
{
return LoadWICTextureFromFileEx(
d3dDevice,
fileName,
maxsize,
D3D12_RESOURCE_FLAG_NONE,
WIC_LOADER_DEFAULT,
texture,
wicData,
subresource);
}

・このwicDataというものは何を示しているのでしょうか?

おそらくこれはバッファができるだけなのであとは待ちつかってビュー作れば簡単にできると思うのですが

・pngにかかわらずほかの画像形式も使える?

検索したり探し回りましたがこれといった情報が少なかった印象です

・ちなみに予想はなにかしらのデータですね uint8_t のサイズにはまるような何かだと思います

バイナリ読み込み等はこちらで行わないためデータというデータは送ることはないと思うのですが

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

解決しました。

struct IMAGESUBRESOCEINFO {
const void* imagedata;//データ部 imageWidth * imageHeight 全部?
long long rowpitch;//よくわからん sizeof(uint32)*width;
long long slicepitch;//よくわからん sizeof(uint32)widthheight;
};

_bmptexturecreate = new BMPTextureCreate();
_test = new PNGTextureManager();

//テクスチャ用ディスクリプタヒープ作成 _bmptexturecreate->CreateDescHeap(device->GetDevice(), rootsignature->GetRengeType()[ROOT_PARAM_TEXTURE].NumDescriptors, &_texdescheap); ////バッファ作成 //_bmptexturecreate->CreateTextureBuffer(device->GetDevice(), bmpdata->bmpheder.bmpinfoheader.biWidth, bmpdata->bmpheder.bmpinfoheader.biHeight, &_texturebuffer); std::unique_ptr<uint8_t[]> upload; IMAGESUBRESOCEINFO info = {}; //info.imagedata = ; info.rowpitch = sizeof(uint32_t)*915; info.slicepitch = sizeof(uint32_t) * 915 * 522; _test->CreateTexture(device->GetDevice(), "resoce/borderlands___claptrap.jpg", info, upload, &_texturebuffer); //テクスチャバッファにデータ入れる _bmptexturecreate->TextureBufferSubresource(915, 522, (char*)upload.get(), _texturebuffer); //即時復帰のため待つ Barrier(comand, fence, _texturebuffer); //ビュー作成 _bmptexturecreate->TextureShadaResoceView(device->GetDevice(), _texturebuffer, _texdescheap);

jpeg ができたのでおそらく png もできるかと思います

・const void* imagedata が よくわかりません

僕はnullっぽい感じにしましたところ動いたのでnullでいいかもしれませんたぶん

まあ動けばいいんです

・uint32_tはuint24_tが存在しないため SRV_RGBAで送るのに関係してる?
・シェーダ部分はrgbにしました

投稿2018/04/15 08:11

ryo19

総合スコア32

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問