예제 #1
0
        public static HwBuffer FromData(BinaryReader reader, GameType gameType, BaseDataBufferFormat format, BaseRenderDataStreamingMode streamingMode, uint byteStride, uint elementCount)
        {
            if (streamingMode != BaseRenderDataStreamingMode.NotStreaming && streamingMode != BaseRenderDataStreamingMode.Streaming)
            {
                throw new InvalidDataException("Invalid streaming mode");
            }

            var buffer = new HwBuffer
            {
                Format        = format,
                ElementStride = byteStride,
                ElementCount  = elementCount,
                StreamingMode = streamingMode,
            };

            if (buffer.StreamingMode == BaseRenderDataStreamingMode.Streaming)
            {
                if (gameType == GameType.HZD)
                {
                    buffer.StreamInfo = BaseStreamHandle.FromData(reader, gameType);
                }
                else
                {
                    buffer.StreamInfo = null;
                }
            }
            else
            {
                // Read raw data
                buffer.Data = reader.ReadBytesStrict(elementCount * byteStride);
            }

            return(buffer);
        }
예제 #2
0
        public static HwBuffer FromData(BinaryReader reader, GameType gameType, BaseDataBufferFormat format, bool streaming, uint byteStride, uint elementCount)
        {
            var buffer = new HwBuffer
            {
                Format        = format,
                ElementStride = byteStride,
                ElementCount  = elementCount,
                Streaming     = streaming,
            };

            if (buffer.Streaming)
            {
                if (gameType == GameType.HZD)
                {
                    buffer.StreamInfo = BaseStreamHandle.FromData(reader, gameType);
                }
                else
                {
                    buffer.StreamInfo = null;
                }
            }
            else
            {
                // Read raw data
                buffer.Data = reader.ReadBytesStrict(elementCount * byteStride);
            }

            return(buffer);
        }
예제 #3
0
        public static uint GetStrideForFormat(BaseDataBufferFormat format)
        {
            switch (format)
            {
            case BaseDataBufferFormat.R_UINT_8:
            case BaseDataBufferFormat.R_UNORM_8:
                return(1);

            case BaseDataBufferFormat.R_FLOAT_16:
            case BaseDataBufferFormat.R_UINT_16:
            case BaseDataBufferFormat.R_UNORM_16:
                return(2);

            case BaseDataBufferFormat.R_FLOAT_32:
            case BaseDataBufferFormat.R_UINT_32:
            case BaseDataBufferFormat.R_INT_32:
            case BaseDataBufferFormat.RGBA_UNORM_8:
            case BaseDataBufferFormat.RGBA_UINT_8:
            case BaseDataBufferFormat.RG_UINT_16:
            case BaseDataBufferFormat.RGBA_INT_8:
                return(4);

            case BaseDataBufferFormat.RG_FLOAT_32:
            case BaseDataBufferFormat.RG_UINT_32:
            case BaseDataBufferFormat.RG_INT_32:
            case BaseDataBufferFormat.RGBA_UINT_16:
                return(8);

            case BaseDataBufferFormat.RGB_FLOAT_32:
            case BaseDataBufferFormat.RGB_UINT_32:
            case BaseDataBufferFormat.RGB_INT_32:
                return(12);

            case BaseDataBufferFormat.RGBA_FLOAT_32:
            case BaseDataBufferFormat.RGBA_UINT_32:
            case BaseDataBufferFormat.RGBA_INT_32:
                return(16);
            }

            throw new NotSupportedException("Attempting to get the size of a dynamic or invalid stride format");
        }