public OptixIntersectionDevice(IRayEngineScene scene, bool lowLatency = false) : base(scene)
        {
            this.lowLatency = lowLatency;
            Context = new Context { CpuNumThreads = 4, RayTypeCount = 1, EntryPointCount = 1 };
            
            var rayBufferDesc = new BufferDesc()
            {
                Format = Format.User,
                Width = (uint)(lowLatency ? RayBuffer.RayBufferSize / 8 : RayBuffer.RayBufferSize),
                Type = BufferType.InputOutput,
                ElemSize = (uint)Marshal.SizeOf(typeof(RayData))
            };
            var rayHitBufferDesc = new BufferDesc()
            {
                Format = Format.User,
                Width =  (uint)(lowLatency ? RayBuffer.RayBufferSize / 8 : RayBuffer.RayBufferSize),
                Type = BufferType.InputOutput,
                ElemSize = (uint)Marshal.SizeOf(typeof(RayHit))
            };

            this.todoRayBuffers = new InputRayBufferCollection();
            this.doneRayBuffers = new OutputRayBufferCollection();
            this.started = false;

            Rays = new DeviceBuffer(Context, rayBufferDesc);
            RayHits = new DeviceBuffer(Context, rayHitBufferDesc);
            Context["rayHits"].Set(RayHits);
            Context["rays"].Set(Rays);
            Builder = AccelBuilder.TriangleKdTree;
            Traverser = AccelTraverser.KdTree;
            GeoGroup = new GeometryGroup(Context);
            this.SetScene(scene);
        }
示例#2
0
        internal Acceleration(Context ctx, IntPtr acc) : base(ctx)
        {
            InternalPtr = acc;
            CheckError(Api.rtAccelerationGetBuilder(InternalPtr, out var builderStr));
            mBuilder = (AccelBuilder)Enum.Parse(mBuilder.GetType(), builderStr);

            CheckError(Api.rtAccelerationGetTraverser(InternalPtr, out var traverseStr));
            mTraverser = (AccelTraverser)Enum.Parse(mTraverser.GetType(), traverseStr);
        }
示例#3
0
        public Acceleration(Context context, AccelBuilder mBuilder, AccelTraverser mTraverser) : base(context)
        {
            CheckError(Api.rtAccelerationCreate(context.InternalPtr, ref InternalPtr));
            gch = GCHandle.Alloc(InternalPtr, GCHandleType.Pinned);

            Builder   = mBuilder;
            Traverser = mTraverser;

            MarkAsDirty();
        }
示例#4
0
        public OptixOBJLoader(string filename, Context context, GeometryGroup geoGroup, Material material)
            : base(filename)
        {
            Context  = context;
            GeoGroup = geoGroup;
            Material = material;

            Builder   = AccelBuilder.Sbvh;
            Traverser = AccelTraverser.Bvh;
        }
示例#5
0
        public OptixOBJLoader(string filename, Context context, GeometryGroup geoGroup, Material defaultMaterial, Func <string, Material> materialResolveFunc)
            : base(filename)
        {
            _materialResolveFunc = materialResolveFunc;
            Context         = context;
            GeoGroup        = geoGroup;
            DefaultMaterial = defaultMaterial;

            Builder   = AccelBuilder.Sbvh;
            Traverser = AccelTraverser.Bvh;
        }