DirectX12の勉強で左から右へ流れる沢山の三角形を描画し、そのタイムスタンプの取得するサンプルを読み解いているのですが、途中のキャストの理解が及ばず数日ほど止まっています。
コード:
const UINT resultBufferSize = resultCount * sizeof(UINT64);
//CreateCommittedResourceでresultBufferSizeの大きさでm_timestampResultBuffer紐づけ
D3D12_RANGE readRange = {};
readRange.Begin = 2 * oldestFrameIndex * sizeof(UINT64);
readRange.End = readRange.Begin + 2 * sizeof(UINT64);
void* pData = nullptr;
m_timestampResultBuffers->Map(0, &readRange, &pData);
const UINT64* pTimestamps = reinterpret_cast<UINT64*>(static_cast<UINT8*>(pData) + readRange.Begin);
64bit環境です。
UINT → unsigned int
readRange.BeginはSIZE_T型→ULONG_PTR→unsigned __int64
UINT8 → unsigned int8
フレームインデックスは作成したフレーム(描画フレーム、表示フレーム、ぼかし用中間フレーム)で、
0、1、2の値のどれかが入ります。
最後のstatic_cast<UINT8*>(pData) + readRange.Beginがよく分からず困っています。
void*をUINT8*にキャストする部分が特に分かりません。
readRange.BeginはSIZE_T型で__int64、reinterpret_castでもUINT64なので、UINT8*ではなく、UINT64*でpDataをキャストすると流れる三角形が飛び飛びというかカクカクになります。
最後のコード一文だけの詳細を教えていただけると嬉しいです。
DirectX12の勉強で左から右へ流れる沢山の三角形を描画し、そのタイムスタンプの取得するサンプルを読み解いているのですが、途中のキャストの理解が及ばず数日ほど止まっています。
[code]
const UINT resultBufferSize = resultCount * sizeof(UINT64);
//CreateCommittedResourceでresultBufferSizeの大きさでm_timestampResultBuffer紐づけ
D3D12_RANGE readRange = {};
readRange.Begin = 2 * oldestFrameIndex * sizeof(UINT64);
readRange.End = readRange.Begin + 2 * sizeof(UINT64);
void* pData = nullptr;
m_timestampResultBuffers->Map(0, &readRange, &pData);
const UINT64* pTimestamps = reinterpret_cast<UINT64*>(static_cast<UINT8*>(pData) + readRange.Begin);
[/code]
64bit環境です。
UINT → unsigned int
readRange.BeginはSIZE_T型→ULONG_PTR→unsigned __int64
UINT8 → unsigned int8
フレームインデックスは作成したフレーム(描画フレーム、表示フレーム、ぼかし用中間フレーム)で、
0、1、2の値のどれかが入ります。
最後のstatic_cast<UINT8*>(pData) + readRange.Beginがよく分からず困っています。
void*をUINT8*にキャストする部分が特に分かりません。
readRange.BeginはSIZE_T型で__int64、reinterpret_castでもUINT64なので、UINT8*ではなく、UINT64*でpDataをキャストすると流れる三角形が飛び飛びというかカクカクになります。
最後のコード一文だけの詳細を教えていただけると嬉しいです。