0
私は、各整数は、バッファ内の特定の場所である必要があります(32バイト)のバッファの中にいくつかの整数値を配置する必要があります(私は、OpenGL VBOsのデータを使用するつもりです)。パッキングデータは、移植性
私が今やっているやり方は、醜いものです。すべてのコンテンツは、アドレスbuf2に置かれるはずです。問題に無関係なので、私がバッファに割り当てる値を見て気にしないでください。
uint32_t *const coords = reinterpret_cast<uint32_t *>(buf2 + CoordDataOff);
uint16_t *const texcoords = reinterpret_cast<uint16_t *>(buf2 + TcoordDataOff);
uint32_t *const color = reinterpret_cast<uint32_t *>(buf2 + ColorDataOff);
coords[0] = x + bearing[0]; // left
coords[1] = y + bearing[1] - 64*(tcoords[3] - tcoords[1]); // bottom
coords[2] = x + bearing[0] + 64*(tcoords[2] - tcoords[0]); // right
coords[3] = y + bearing[1]; // top
copy_n(tcoords, 4, texcoords);
*color = c.color;
これを実現する方法はありますか?
あなたの 'struct'は' texcoorの前後に2バイトのパディングを挿入するでしょうds。 C++標準では、どこに指定されていません。明示的にパディングを追加することはできますが、OPの指定されていないメモリの制限があると、動作しない可能性があります。 –
彼は1つのTDataしか持っていないようですが、TDataには4つのテクスチャがあります。 –
申し訳ありません。#pragma pack()について考えていましたが、答えを入力していましたが、これを行うことが非常に重要です。貼り付けたコードの最後の行は、(CoordDataOff、TcoordDataOff、ColorDataOffの値に応じて)質問での使用には問題ありません。しかし、私はVBOに値を設定するいくつかの同様のコードがあると思います。同じ構造体を使用してバッファを読み書きすると、操作が簡単になります。 – noggin182