Fixed blit key encoding.

This commit is contained in:
Бранимир Караџић 2022-05-14 21:26:20 -07:00
parent ae5706693f
commit 36be8a72cc

View File

@ -1232,27 +1232,33 @@ namespace bgfx
};
#undef SORT_KEY_RENDER_DRAW
constexpr uint8_t kBlitKeyViewShift = 32-kSortKeyViewNumBits;
constexpr uint32_t kBlitKeyViewMask = uint32_t(BGFX_CONFIG_MAX_VIEWS-1)<<kBlitKeyViewShift;
constexpr uint8_t kBlitKeyItemShift = 0;
constexpr uint32_t kBlitKeyItemMask = UINT16_MAX;
struct BlitKey
{
uint32_t encode()
{
return 0
| (uint32_t(m_view) << 24)
| uint32_t(m_item)
;
const uint32_t view = (uint32_t(m_view) << kBlitKeyViewShift) & kBlitKeyViewMask;
const uint32_t item = (uint32_t(m_item) << kBlitKeyItemShift) & kBlitKeyItemMask;
const uint64_t key = view|item;
return key;
}
void decode(uint32_t _key)
{
m_item = uint16_t(_key & UINT16_MAX);
m_view = ViewId(_key >> 24);
m_item = uint16_t( (_key & kBlitKeyItemMask) >> kBlitKeyItemShift);
m_view = ViewId( (_key & kBlitKeyViewMask) >> kBlitKeyViewShift);
}
static uint32_t remapView(uint32_t _key, ViewId _viewRemap[BGFX_CONFIG_MAX_VIEWS])
{
const ViewId oldView = ViewId(_key >> 24);
const uint32_t view = uint32_t(_viewRemap[oldView]) << 24;
const uint32_t key = (_key & ~UINT32_C(0xff000000) ) | view;
const ViewId oldView = ViewId( (_key & kBlitKeyViewMask) >> kBlitKeyViewShift);
const uint32_t view = uint32_t( (_viewRemap[oldView] << kBlitKeyViewShift) & kBlitKeyViewMask);
const uint32_t key = (_key & ~kBlitKeyViewMask) | view;
return key;
}