Пример #1
0
        public int RayCast(Ray ray, List <RayCastHit <T> > hits, RayCastFilter <T> filter)
        {
            if (hits == null)
            {
                throw new ArgumentNullException(nameof(hits));
            }

            return(_currentRoot.RayCast(ray, hits, filter));
        }
Пример #2
0
        public GraphicsSystem(OpenTKWindow window, float renderQuality = 1f, GraphicsBackEndPreference backEndPreference = GraphicsBackEndPreference.None)
        {
            if (window == null)
            {
                throw new ArgumentNullException(nameof(window));
            }

            bool preferOpenGL = backEndPreference == GraphicsBackEndPreference.OpenGL || !RuntimeInformation.IsOSPlatform(OSPlatform.Windows);

            _window = window;
            Context = CreatePlatformDefaultContext(window, preferOpenGL);
            Context.ResourceFactory.AddShaderLoader(new EmbeddedResourceShaderLoader(typeof(GraphicsSystem).GetTypeInfo().Assembly));
            MaterialCache = new MaterialCache(this);
            BufferCache   = new BufferCache(this);

            ShadowMapStage            = new ShadowMapStage(Context);
            _upscaleStage             = new UpscaleStage(Context, "Upscale", null, null);
            _standardStage            = new StandardPipelineStage(Context, "Standard");
            _alphaBlendStage          = new StandardPipelineStage(Context, "AlphaBlend");
            _alphaBlendStage.Comparer = new FarToNearIndexComparer();
            _overlayStage             = new StandardPipelineStage(Context, "Overlay");
            _pipelineStages           = new PipelineStage[]
            {
                ShadowMapStage,
                _standardStage,
                _alphaBlendStage,
                _upscaleStage,
                _overlayStage,
            };
            _renderer = new Renderer(Context, _pipelineStages);
            SetPreupscaleQuality(renderQuality);

            // Placeholder providers so that materials can bind to them.
            Context.RegisterGlobalDataProvider("ViewMatrix", s_identityProvider);
            Context.RegisterGlobalDataProvider("ProjectionMatrix", s_identityProvider);
            Context.RegisterGlobalDataProvider("CameraInfo", s_noCameraProvider);
            Context.RegisterGlobalDataProvider("LightBuffer", s_noLightProvider);
            Context.RegisterGlobalDataProvider("PointLights", _pointLightsProvider);

            window.Resized += OnWindowResized;

            _freeShapeRenderer          = new ManualWireframeRenderer(Context, RgbaFloat.Pink);
            _freeShapeRenderer.Topology = PrimitiveTopology.LineList;
            AddFreeRenderItem(_freeShapeRenderer);

            _mainThreadID      = Environment.CurrentManagedThreadId;
            _taskScheduler     = new GraphicsSystemTaskScheduler(_mainThreadID);
            _rayCastFilterFunc = RayCastFilter;
        }
Пример #3
0
        public int RayCast(Ray ray, List <RayCastHit <T> > hits, RayCastFilter <T> filter)
        {
            if (!ray.Intersects(Bounds))
            {
                return(0);
            }
            else
            {
                int numHits = 0;
                foreach (OctreeItem <T> item in _items)
                {
                    if (ray.Intersects(item.Bounds))
                    {
                        numHits += filter(ray, item.Item, hits);
                    }
                }
                foreach (var child in Children)
                {
                    numHits += child.RayCast(ray, hits, filter);
                }

                return(numHits);
            }
        }
Пример #4
0
 public int RayCast(Ray ray, List <RayCastHit <T> > hits, RayCastFilter <T> filter)
 {
     return(_currentRoot.RayCast(ray, hits, filter));
 }