Esempio n. 1
0
    // Index to vert property
    public static Vector3 FindVertex(GPUVertices vert, int i)
    {
        switch (i)
        {
        case 0: return(vert.V0);

        case 1: return(vert.V1);

        case 2: return(vert.V2);

        case 3: return(vert.V3);

        case 4: return(vert.V4);

        case 5: return(vert.V5);

        case 6: return(vert.V6);

        case 7: return(vert.V7);

        case 8: return(vert.V8);

        case 9: return(vert.V9);

        case 10: return(vert.V10);

        case 11: return(vert.V11);

        default: break;
        }
        throw new System.ArgumentException("Vertex index must be 0-11", "i");
    }
Esempio n. 2
0
    private void updateVertices(GPUVertices vert)
    {
        int cubeIndex = vert.Index;

        for (int k = 0; triTable[cubeIndex][k] != -1; k += 3)
        {
            Vertices.Add(GridUtils.FindVertex(vert, triTable[cubeIndex][k]));
            Vertices.Add(GridUtils.FindVertex(vert, triTable[cubeIndex][k + 2]));
            Vertices.Add(GridUtils.FindVertex(vert, triTable[cubeIndex][k + 1]));
        }
    }
Esempio n. 3
0
    // ============================================================================================
    // Metaball Algorithm Functions ---------------------------------------------------------------
    // ============================================================================================

    private GPUVertices[] runComputeShader(GPUBlob[] gpuBlobs)
    {
        // Pass Data
        gpuBuffers.BlobBuffer.SetData(gpuBlobs);
        shader.SetInt("numBlobs", gpuBlobs.Length);
        shader.SetInt("xCubes", XCubes);
        shader.SetInt("yCubes", YCubes);
        shader.SetFloat("threshold", container.Threshold);

        int xThreads = XCubes / 8 >= 8 ? XCubes / 8 : 8;
        int yThreads = YCubes / 8 >= 8 ? YCubes / 8 : 8;
        int zThreads = ZCubes / 8 >= 8 ? ZCubes / 8 : 8;

        // Why waste time with many instruction to many data when few instruction do trick
        shader.Dispatch(shaderKernel, xThreads, yThreads, zThreads);

        GPUVertices[] output = new GPUVertices[gpuBuffers.VertBuffer.count];
        gpuBuffers.VertBuffer.GetData(output);
        return(output);
    }