Example #1
0
    public void Pack(FileInfo archiveFile, DirectoryInfo rootDir)
    {
        var rootRecord = ScanDirectory(rootDir);

        var memoryStream = new MemoryStream();

        Persistance.Write(memoryStream, rootRecord);
        var  listingBytes = memoryStream.ToArray();
        long listingSize  = listingBytes.LongLength;

        long payloadSize   = currentOffset;
        long payloadOffset = IntegerUtils.NextLargerMultiple(HeaderSize + listingSize, OffsetGranularity);

        long totalSize = payloadOffset + payloadSize;

        using (var archiveMap = MemoryMappedFile.CreateFromFile(archiveFile.FullName, FileMode.Create, archiveFile.Name, totalSize)) {
            //write header
            using (var headerAccessor = archiveMap.CreateViewAccessor(0, HeaderSize)) {
                headerAccessor.Write(0, listingSize);
                headerAccessor.Write(sizeof(long), payloadOffset);
            }

            //write listing
            using (var listingAccessor = archiveMap.CreateViewAccessor(HeaderSize, listingSize)) {
                listingAccessor.WriteArray(0, listingBytes, 0, listingBytes.Length);
            }

            WriteDirectory(archiveMap, payloadOffset, rootRecord, rootDir);
        }
    }
    public OcclusionInfo[] Run(DeviceContext context, ShaderResourceView vertexInfos)
    {
        context.ClearState();
        context.ComputeShader.Set(shader);
        context.ComputeShader.SetConstantBuffer(0, hemispherePointsAndWeightsConstantBuffer);
        context.ComputeShader.SetShaderResources(0,
                                                 rasterCacheView,
                                                 facesView,
                                                 transparenciesView,
                                                 vertexMasksView,
                                                 faceMasksView,
                                                 vertexInfos);
        context.ComputeShader.SetUnorderedAccessView(0, outputBufferManager.View);

        for (int baseVertexIdx = 0; baseVertexIdx < vertexCount; baseVertexIdx += BatchSize)
        {
            ArraySegment segment = new ArraySegment(baseVertexIdx, Math.Max(vertexCount - baseVertexIdx, BatchSize));
            segmentBufferManager.Update(context, segment);
            context.ComputeShader.SetConstantBuffer(1, segmentBufferManager.Buffer);
            context.Dispatch(1, IntegerUtils.RoundUp(BatchSize, ShaderNumThreads / RasterRowCount), 1);
            context.Flush();
        }

        return(outputBufferManager.ReadContents(context));
    }
    public UIElement Interpret(MenuViewMessage state)
    {
        var canvas = new Canvas {
            HorizontalAlignment = HorizontalAlignment.Stretch
        };

        if (state == null)
        {
            return(canvas);
        }

        double position  = state.Position;
        double topOffset = Height / 2 - itemHeight * position;

        int firstVisibleChildIdx = IntegerUtils.Clamp(
            (int)Math.Floor(-(itemHeight + topOffset) / itemHeight),
            0, state.Items.Count);
        int lastVisibleChildIdx = IntegerUtils.Clamp(
            (int)Math.Ceiling((Height - topOffset) / itemHeight),
            0, state.Items.Count - 1);

        for (int childIdx = firstVisibleChildIdx; childIdx <= lastVisibleChildIdx; ++childIdx)
        {
            var item      = state.Items[childIdx];
            var childElem = CreateItem(item);

            canvas.Children.Add(childElem);

            Canvas.SetTop(childElem, topOffset + itemHeight * childIdx);
            childElem.Width = Width;
        }

        return(canvas);
    }
        public void IntegerUtils_ToString1Test()
        {
            int?   int1   = new int?(1);
            String result = IntegerUtils.ToString(int1);

            Assert.AreEqual("1", result);
        }
Example #5
0
    public void CalculateOcclusion(DeviceContext context)
    {
        if (unmorphedWithChildrenOcclusionInfosToUpload != null)
        {
            unmorphedWithChildrenOcclusionInfosBufferManager.Update(context, unmorphedWithChildrenOcclusionInfosToUpload);
            unmorphedWithChildrenOcclusionInfosToUpload = null;
        }

        if (parametersResources == null)
        {
            return;
        }

        context.WithEvent("Occluder::CalculateOcclusion", () => {
            context.ClearState();

            context.ComputeShader.Set(shader);
            context.ComputeShader.SetShaderResources(0,
                                                     unmorphedWithoutChildrenOcclusionInfosView,
                                                     unmorphedWithChildrenOcclusionInfosBufferManager.View,
                                                     parametersResources.baseOcclusionView,
                                                     parametersResources.channelWeightsBufferManager.View,
                                                     parametersResources.occlusionDeltaWeightSegmentsView,
                                                     parametersResources.occlusionDeltaWeightElemsView);
            context.ComputeShader.SetUnorderedAccessView(0, parametersResources.calculatedInfosBuffersBufferManager.OutView);

            context.Dispatch(IntegerUtils.RoundUp(parametersResources.vertexCount, ShaderNumThreads), 1, 1);

            context.ClearState();
        });
    }
        public void IntegerUtils_ToString2Test()
        {
            int?   int1   = null;
            String result = IntegerUtils.ToString(int1);

            Assert.AreEqual("", result);
        }
Example #7
0
    public void Scatter(DeviceContext context, ImageBasedLightingEnvironment lightingEnvironment, ShaderResourceView controlVertexInfosView)
    {
        context.WithEvent("Scatterer::Scatter", () => {
            context.ClearState();

            context.ComputeShader.Set(samplingShader);
            lightingEnvironment.Apply(context.ComputeShader);
            context.ComputeShader.SetShaderResources(ShaderSlots.MaterialTextureStart,
                                                     stencilSegments,
                                                     stencilElems,
                                                     controlVertexInfosView);
            context.ComputeShader.SetUnorderedAccessView(0, sampledIrrandiancesBufferManager.OutView);
            context.Dispatch(IntegerUtils.RoundUp(vertexCount, ShaderNumThreads), 1, 1);

            context.ClearState();

            context.ComputeShader.Set(scatteringShader);
            context.ComputeShader.SetShaderResources(0,
                                                     sampledIrrandiancesBufferManager.InView,
                                                     formFactorSegments,
                                                     formFactorElements);
            context.ComputeShader.SetUnorderedAccessView(0, scatteredIrrandiancesBufferManager.OutView);
            context.Dispatch(IntegerUtils.RoundUp(vertexCount, ShaderNumThreads), 1, 1);

            context.ClearState();
        });
    }
        public void IntegerUtils_IsLowerThan4Test()
        {
            int? int1   = new int?(1);
            int? int2   = null;
            bool?result = IntegerUtils.IsLowerThan(int1, int2);

            Assert.AreEqual(null, result);
        }
        public void IntegerUtils_Multiply3Test()
        {
            int?int1   = new int?(1);
            int?int2   = null;
            int?result = IntegerUtils.Multiply(int1, int2);

            Assert.AreEqual(null, result);
        }
        public void IntegerUtils_Divide3Test()
        {
            int?int1   = new int?(1);
            int?int2   = null;
            int?result = IntegerUtils.Divide(int1, int2);

            Assert.AreEqual(null, result);
        }
        public void IntegerUtils_CompareTo3Test()
        {
            int?int1   = new int?(1);
            int?int2   = null;
            int?result = IntegerUtils.CompareTo(int1, int2);

            Assert.AreEqual(null, result);
        }
Example #12
0
 public void TestClamp()
 {
     Assert.AreEqual(2, IntegerUtils.Clamp(1, 2, 4));
     Assert.AreEqual(2, IntegerUtils.Clamp(2, 2, 4));
     Assert.AreEqual(3, IntegerUtils.Clamp(3, 2, 4));
     Assert.AreEqual(4, IntegerUtils.Clamp(4, 2, 4));
     Assert.AreEqual(4, IntegerUtils.Clamp(5, 2, 4));
 }
        public void IntegerUtils_Substract3Test()
        {
            int?int1   = new int?(1);
            int?int2   = null;
            int?result = IntegerUtils.Substract(int1, int2);

            Assert.AreEqual(null, result);
        }
Example #14
0
 public void Refine(DeviceContext context, ShaderResourceView vertexPositionsView, UnorderedAccessView resultsView)
 {
     context.ClearState();
     context.ComputeShader.Set(refinerShader);
     context.ComputeShader.SetShaderResources(0, stencilSegmentsView, stencilElemsView, vertexPositionsView);
     context.ComputeShader.SetUnorderedAccessView(0, resultsView);
     context.Dispatch(IntegerUtils.RoundUp(refinedVertexCount, ShaderNumThreads), 1, 1);
     context.ClearState();
 }
Example #15
0
 public void TestNextLargerMultiple()
 {
     Assert.AreEqual(0, IntegerUtils.NextLargerMultiple(0, 3));
     Assert.AreEqual(3, IntegerUtils.NextLargerMultiple(1, 3));
     Assert.AreEqual(3, IntegerUtils.NextLargerMultiple(2, 3));
     Assert.AreEqual(3, IntegerUtils.NextLargerMultiple(3, 3));
     Assert.AreEqual(6, IntegerUtils.NextLargerMultiple(4, 3));
     Assert.AreEqual(6, IntegerUtils.NextLargerMultiple(5, 3));
 }
        public void IntegerUtils_IsNullOrZeroValue3Test()
        {
            int?    int1   = new int?(0);
            Boolean result = IntegerUtils.IsNullOrZeroValue(int1);

            Assert.IsNotNull(result);
            Assert.AreEqual(true, result);
            Assert.AreEqual("True", result.ToString());
        }
        public void IntegerUtils_IsNullOrZeroValue2Test()
        {
            int? int1   = new int?(1);
            bool result = IntegerUtils.IsNullOrZeroValue(int1);

            Assert.IsNotNull(result);
            Assert.AreEqual(false, result);
            Assert.AreEqual("False", result.ToString());
        }
        public void IntegerUtils_IsGreaterThan2Test()
        {
            int? int1   = new int?(1);
            int? int2   = new int?(1);
            bool?result = IntegerUtils.IsGreaterThan(int1, int2);

            Assert.IsNotNull(result);
            Assert.AreEqual(false, result);
            Assert.AreEqual("False", result.ToString());
        }
        public void IntegerUtils_IsLowerThan2Test()
        {
            int? int1   = new int?(1);
            int? int2   = new int?(2);
            bool?result = IntegerUtils.IsLowerThan(int1, int2);

            Assert.IsNotNull(result);
            Assert.AreEqual(true, result);
            Assert.AreEqual("True", result.ToString());
        }
Example #20
0
 public void TestMod()
 {
     Assert.AreEqual(0, IntegerUtils.Mod(-3, 3));
     Assert.AreEqual(1, IntegerUtils.Mod(-2, 3));
     Assert.AreEqual(2, IntegerUtils.Mod(-1, 3));
     Assert.AreEqual(0, IntegerUtils.Mod(0, 3));
     Assert.AreEqual(1, IntegerUtils.Mod(1, 3));
     Assert.AreEqual(2, IntegerUtils.Mod(2, 3));
     Assert.AreEqual(0, IntegerUtils.Mod(3, 3));
     Assert.AreEqual(1, IntegerUtils.Mod(4, 3));
     Assert.AreEqual(2, IntegerUtils.Mod(5, 3));
 }
        public void IntegerUtils_Abs1Test()
        {
            int?int1   = new int?(1);
            int?result = (int?)IntegerUtils.Abs(int1);

            Assert.IsNotNull(result);
            Assert.AreEqual((byte)1, (byte)result);
            Assert.AreEqual((short)1, (short)result);
            Assert.AreEqual(1, result);
            Assert.AreEqual(1L, (long)result);
            Assert.AreEqual(1.0f, (float)result, 1.0f);
            Assert.AreEqual(1.0, (double)result, 1.0);
            Assert.AreEqual("1", result.ToString());
        }
Example #22
0
        public void GetRandomNumbers()
        {
            var actual       = false;
            var random       = new Random();
            var numOfNumbers = random.Next(100);
            var randomList   = new List <int>();

            randomList.AddRange(IntegerUtils.GetRandomNumbers(numOfNumbers));
            if (randomList.Count == numOfNumbers)
            {
                actual = true;
            }
            Assert.IsTrue(actual, "Wrong numbers of numbers");
        }
        public void IntegerUtils_Add1Test()
        {
            int?int1   = new int?(1);
            int?int2   = new int?(1);
            int?result = IntegerUtils.Add(int1, int2);

            Assert.IsNotNull(result);
            Assert.AreEqual((byte)2, (byte)result);
            Assert.AreEqual((short)2, (short)result);
            Assert.AreEqual(2, result);
            Assert.AreEqual(2L, (long)result);
            Assert.AreEqual(2.0f, (float)result, 1.0f);
            Assert.AreEqual(2.0, (double)result, 1.0);
            Assert.AreEqual("2", result.ToString());
        }
        public void IntegerUtils_Substract1Test()
        {
            int?int1   = new int?(1);
            int?int2   = new int?(1);
            int?result = IntegerUtils.Substract(int1, int2);

            Assert.IsNotNull(result);
            Assert.AreEqual((byte)0, (byte)result);
            Assert.AreEqual((short)0, (short)result);
            Assert.AreEqual(0, result);
            Assert.AreEqual(0L, (long)result);
            Assert.AreEqual(0.0f, (float)result, 1.0f);
            Assert.AreEqual(0.0, (double)result, 1.0);
            Assert.AreEqual("0", result.ToString());
        }
        public void IntegerUtils_Add4Test()
        {
            int?int1   = new int?(1);
            int?int2   = new int?(1);
            int?int3   = new int?(1);
            int?result = IntegerUtils.Add(int1, int2, int3);

            Assert.IsNotNull(result);
            Assert.AreEqual((byte)3, (byte)result);
            Assert.AreEqual((short)3, (short)result);
            Assert.AreEqual(3, result);
            Assert.AreEqual(3L, (long)result);
            Assert.AreEqual(3.0f, (float)result, 1.0f);
            Assert.AreEqual(3.0, (double)result, 1.0);
            Assert.AreEqual("3", result.ToString());
        }
Example #26
0
    public void TestToUShort()
    {
        //below range
        Assert.AreEqual(0, IntegerUtils.ToUShort(-1));

        Assert.AreEqual(0, IntegerUtils.ToUShort(0));
        Assert.AreEqual(0, IntegerUtils.ToUShort(0.999f / 0x10000));

        Assert.AreEqual(1, IntegerUtils.ToUShort(1.001f / 0x10000));
        Assert.AreEqual(1, IntegerUtils.ToUShort(1.999f / 0x10000));

        Assert.AreEqual(ushort.MaxValue, IntegerUtils.ToUShort(1 - 1e-6f));
        Assert.AreEqual(ushort.MaxValue, IntegerUtils.ToUShort(1));

        //above range
        Assert.AreEqual(ushort.MaxValue, IntegerUtils.ToUShort(2));
    }
        public void IntegerUtils_Add6Test()
        {
            int?int1   = new int?(1);
            int?int2   = new int?(1);
            int?int3   = new int?(1);
            int?int4   = new int?(1);
            int?result = IntegerUtils.Add(int1, int2, int3, int4);

            Assert.IsNotNull(result);
            Assert.AreEqual((byte)4, (byte)result);
            Assert.AreEqual((short)4, (short)result);
            Assert.AreEqual(4, result);
            Assert.AreEqual(4L, (long)result);
            Assert.AreEqual(4.0f, (float)result, 1.0f);
            Assert.AreEqual(4.0, (double)result, 1.0);
            Assert.AreEqual("4", result.ToString());
        }
Example #28
0
        public void ListSorter()
        {
            var actual      = false;
            var random      = new Random();
            var numberCount = random.Next(100);
            var randomList  = new List <int>(IntegerUtils.GetRandomNumbers(numberCount));
            var sortedList  = IntegerUtils.ListSorter(randomList);

            for (var i = 0; i < numberCount - 1; i++)
            {
                actual = sortedList[i] < sortedList[i + 1];
                if (!actual)
                {
                    break;
                }
            }
            Assert.IsTrue(actual, "Wrong sorting");
        }
Example #29
0
    private void CalculatePositionsCommon(
        DeviceContext context,
        UnorderedAccessView vertexInfosOutView,
        ShaderResourceView occlusionInfosView,
        ShaderResourceView parentDeltasInView,
        UnorderedAccessView deltasOutView)
    {
        context.WithEvent("GpuShaper::CalculatePositions", () => {
            context.ClearState();

            if (deltasOutView != null)
            {
                context.ComputeShader.Set(withDeltasShader);
            }
            else
            {
                context.ComputeShader.Set(withoutDeltasShader);
            }

            context.ComputeShader.SetShaderResources(0,
                                                     initialPositionsView,
                                                     deltaSegmentsView,
                                                     deltaElemsView,
                                                     morphWeightsBufferManager.View,
                                                     baseDeltaWeightSegmentsView,
                                                     baseDeltaWeightElemsView,
                                                     boneWeightSegmentsView,
                                                     boneWeightElemsView,
                                                     boneTransformsBufferManager.View,
                                                     occlusionInfosView,
                                                     occlusionSurrogateMapView,
                                                     occlusionSurrogateFacesView,
                                                     occlusionSurrogateInfosBufferManager.View,
                                                     parentDeltasInView);

            context.ComputeShader.SetUnorderedAccessViews(0,
                                                          vertexInfosOutView,
                                                          deltasOutView);

            context.Dispatch(IntegerUtils.RoundUp(vertexCount, ShaderNumThreads), 1, 1);

            context.ClearState();
        });
    }
Example #30
0
    private Pose GetBlendedPose(float time)
    {
        var posesByFrame = model.Animation.ActiveAnimation.PosesByFrame;

        float unloopedFrameIdx = time * FramesPerSecond;
        float currentFrameIdx  = unloopedFrameIdx % posesByFrame.Count;

        int  baseFrameIdx  = (int)currentFrameIdx;
        Pose prevFramePose = posesByFrame[IntegerUtils.Mod(baseFrameIdx + 0, posesByFrame.Count)];
        Pose nextFramePose = posesByFrame[IntegerUtils.Mod(baseFrameIdx + 1, posesByFrame.Count)];

        var   poseBlender = new PoseBlender(model.MainDefinition.BoneSystem.Bones.Count);
        float alpha       = currentFrameIdx - baseFrameIdx;

        poseBlender.Add(1 - alpha, prevFramePose);
        poseBlender.Add(alpha, nextFramePose);
        var blendedPose = poseBlender.GetResult();

        return(blendedPose);
    }