Example #1
0
        public NoiseRenderer(ILogger logger, Texture texture)
        {
            _texture            = texture;
            _renderer           = new Renderer();
            _backbufferRenderer = new BackBufferRenderer(logger, _texture, _texture.Width, _texture.Height, false);
            var fullscreenQuad = new FullScreenQuad(null, _shader);

            _renderer.AddToScene(fullscreenQuad);
        }
Example #2
0
        public PostProcess(ILogger logger, IEnumerable <Texture> inputTextures, Texture outputTexture, Shader effect)
        {
            _logger             = logger;
            _inputTextures      = inputTextures;
            _effect             = effect;
            _renderer           = new Renderer();
            _backbufferRenderer = new BackBufferRenderer(_logger, outputTexture, outputTexture.Width, outputTexture.Height, false);
            var quad = new FullScreenQuad(_inputTextures, _effect);

            _renderer.AddToScene(quad);
        }
Example #3
0
        private void ToggleBloom()
        {
            if (_isBloomEnabled)
            {
                _ndcTexture = _worldRenderer.Texture;
            }
            else
            {
                _ndcTexture = _postprocessTexture;
            }

            _ndcRenderer.Clear();
            var fullScreenQuad = new FullScreenQuad(new[] { _ndcTexture }, _fullscreenShader);

            _ndcRenderer.AddToScene(fullScreenQuad);

            _isBloomEnabled = !_isBloomEnabled;
        }
Example #4
0
        public Game(
            IAppConfig config,
            ILogger logger,
            ICamera camera,
            IWorld world,
            OpenGlContext context,
            IRenderer renderer,
            IRenderer ndcRenderer,
            IRenderer skyboxRenderer,
            ISkybox skybox)
        {
            _camera = camera;
            _logger = logger;
            _config = config;
            _title  = config.WindowTitle;

            _context = context;
            ConfigureContext();

            _skybox = skybox;
            _world  = world;

            GL.Enable(EnableCap.DepthTest);
            GL.Enable(EnableCap.CullFace);
            GL.CullFace(CullFaceMode.Back);
            GL.FrontFace(FrontFaceDirection.Cw);
            GL.ClearColor(Color4.Green);
            GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha);

            _renderer       = renderer;
            _ndcRenderer    = ndcRenderer;
            _skyboxRenderer = skyboxRenderer;

            _skyboxRenderer.BeforeRender = () =>
            {
                GL.DepthFunc(DepthFunction.Lequal);
                GL.CullFace(CullFaceMode.Front);
            };
            _skyboxRenderer.AfterRender = () =>
            {
                GL.CullFace(CullFaceMode.Back);
            };
            _skyboxRenderer.AddToScene(skybox);

            _traffic = _world.Traffic;
            _renderer.AddToScene(_traffic);
            _renderer.AddToScene(_world.Renderables);

            _backbufferTexture = new Texture(_config.ResolutionWidth, config.ResolutionHeight);
            _worldRenderer     = new BackBufferRenderer(
                _logger,
                _backbufferTexture,
                _config.ResolutionWidth,
                _config.ResolutionHeight,
                useDepthBuffer: true);

            _postprocessTexture  = new Texture(_config.ResolutionWidth, _config.ResolutionHeight);
            _postprocessPipeline = new PostprocessPipeline(_logger, _config, _worldRenderer.Texture, _postprocessTexture);

            _fullscreenShader = new Shader("vs.vert", "fs.frag");
            _fullscreenShader.SetUniformValue("tex", new IntUniform
            {
                Value = 0
            });

            _ndcTexture = _postprocessTexture;
            var fullScreenQuad = new FullScreenQuad(new[] { _ndcTexture }, _fullscreenShader);

            _ndcRenderer.AddToScene(fullScreenQuad);
        }