c-使用指针算法从精灵表中剪切纹理



我正试图使用指针算术从精灵表中获得较小的纹理,但结果与我预期的不太一样。

基本上,我使用这个功能来做这样一件事:

internal void
GetShiftedTexture(texture_t* Texture, v2 Shift, v2 NewDim)
{
u32 ShiftX = Shift.x;
u32 ShiftY = Shift.y;
Texture->Width  = NewDim.x;
Texture->Height = NewDim.y;
u32 Pitch = Texture->Width * sizeof(u32);
Texture->Memory = (u32*)((u8*)Texture->Memory + ShiftX * sizeof(u32) + ShiftY * Pitch);
}

可能是我只是用错了算术吗?感谢

  1. 纹理图谱的拓扑结构是什么

    你有样品输入/输出吗?行中、列中或两者中都有更多的图像吗?每行只有一个图像,并且没有x分辨率的变化,只允许更新指针而不是内存副本。

  2. 您还更改了Texture->Memory,这对我来说就像是一个巨大的内存泄漏

    你知道,如果你像这样剪切纹理,你就会丢失原来的指针,内存管理器稍后会很难释放它。。。所以,您应该分配新的内存块,复制然后释放旧的内存,或者记住原始指针,只在需要时释放。

  3. 您在计算音高之前更改了Texture->Width,这是一个错误

    因此,您应该交换线条的顺序以进行补救(在宽度更改之前移动节距线(。

  4. 您从不检查新的分辨率并移动

    它们可能会越过你的纹理范围。。。

相关内容

  • 没有找到相关文章

最新更新