我正试图使用指针算术从精灵表中获得较小的纹理,但结果与我预期的不太一样。
基本上,我使用这个功能来做这样一件事:
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);
}
可能是我只是用错了算术吗?感谢
-
纹理图谱的拓扑结构是什么
你有样品输入/输出吗?行中、列中或两者中都有更多的图像吗?每行只有一个图像,并且没有x分辨率的变化,只允许更新指针而不是内存副本。
-
您还更改了
Texture->Memory
,这对我来说就像是一个巨大的内存泄漏你知道,如果你像这样剪切纹理,你就会丢失原来的指针,内存管理器稍后会很难释放它。。。所以,您应该分配新的内存块,复制然后释放旧的内存,或者记住原始指针,只在需要时释放。
-
您在计算音高之前更改了
Texture->Width
,这是一个错误因此,您应该交换线条的顺序以进行补救(在宽度更改之前移动节距线(。
-
您从不检查新的分辨率并移动
它们可能会越过你的纹理范围。。。