LightUtil.java 文件源码

java
阅读 20 收藏 0 点赞 0 评论 0

项目:CustomWorldGen 作者:
public static void pack(float[] from, int[] to, VertexFormat formatTo, int v, int e)
{
    VertexFormatElement element = formatTo.getElement(e);
    int vertexStart = v * formatTo.getNextOffset() + formatTo.getOffset(e);
    int count = element.getElementCount();
    VertexFormatElement.EnumType type = element.getType();
    int size = type.getSize();
    int mask = (256 << (8 * (size - 1))) - 1;
    for(int i = 0; i < 4; i++)
    {
        if(i < count)
        {
            int pos = vertexStart + size * i;
            int index = pos >> 2;
            int offset = pos & 3;
            int bits = 0;
            float f = i < from.length ? from[i] : 0;
            if(type == VertexFormatElement.EnumType.FLOAT)
            {
                bits = Float.floatToRawIntBits(f);
            }
            else if(
                type == VertexFormatElement.EnumType.UBYTE ||
                type == VertexFormatElement.EnumType.USHORT ||
                type == VertexFormatElement.EnumType.UINT
            )
            {
                bits = (int)(f * mask);
            }
            else
            {
                bits = (int)(f * mask / 2);
            }
            to[index] &= ~(mask << (offset * 8));
            to[index] |= (((bits & mask) << (offset * 8)));
            // TODO handle overflow into to[index + 1]
        }
    }
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号