public void Dispose()
 {
     if (_disposed)
     {
         return;
     }
     DeviceManager.Dispose();
     MaterialManager.Dispose();
     TextureResourceManager.Dispose();
     TextureSamplerManager.Dispose();
     BlendStateManager.Dispose();
     RasterizerStateManager.Dispose();
     _disposed = true;
 }
        public GraphicsContext(Lazy<IFileStore> files, IInputContext input)
        {
            var deviceManager = new DeviceManager();
            DeviceManager = deviceManager;

            TextureResourceManager = new TextureResourceManager(deviceManager, files);
            TextureSamplerManager = new TextureSamplerManager(deviceManager);
            MaterialManager = new MaterialManager(this);
            BlendStateManager = new BlendStateManager(deviceManager);
            RasterizerStateManager = new RasterizerStateManager(deviceManager);

            RenderTargetFactory = new RenderTargetFactory(this, input);
            VertexBufferManagerFactory = new VertexBufferManagerFactory(deviceManager);
            IndexBufferManagerFactory = new IndexBufferManagerFactory(deviceManager);
            ConstantBufferManagerFactory = new ConstantBufferManagerFactory(deviceManager);
        }
Exemple #3
0
 public void GfxCleanup()
 {
     GpuFetchManager.Cleanup();
     MeshPrimitivesManager.Cleanup();
     MeshManager.Cleanup();
     DepthStencilStateManager.Cleanup();
     RasterizerStateManager.Cleanup();
     BlendStateManager.Cleanup();
     SamplerStateManager.Cleanup();
     if (mRenderContext != null)
     {
         mRenderContext.Cleanup();
         mRenderContext = null;
     }
     RenderSystem.Cleanup();
     base.Cleanup();
 }
        public GraphicsContext(Lazy <IFileStore> files, IInputContext input)
        {
            var deviceManager = new DeviceManager();

            DeviceManager = deviceManager;

            TextureResourceManager = new TextureResourceManager(deviceManager, files);
            TextureSamplerManager  = new TextureSamplerManager(deviceManager);
            MaterialManager        = new MaterialManager(this);
            BlendStateManager      = new BlendStateManager(deviceManager);
            RasterizerStateManager = new RasterizerStateManager(deviceManager);

            RenderTargetFactory          = new RenderTargetFactory(this, input);
            VertexBufferManagerFactory   = new VertexBufferManagerFactory(deviceManager);
            IndexBufferManagerFactory    = new IndexBufferManagerFactory(deviceManager);
            ConstantBufferManagerFactory = new ConstantBufferManagerFactory(deviceManager);
        }
Exemple #5
0
        /// <summary>
        ///     RenderContextの初期化処理
        /// </summary>
        public ScreenContext Initialize(Control targetControl)
        {
            InitializeDevices();
            Timer           = new MotionTimer(this);
            BlendingManager = new BlendStateManager(this);
            BlendingManager.SetBlendState(BlendStateManager.BlendStates.Alignment);
            //Matrixの初期化
            var matrixManager = InitializeMatricies();

            ScreenContext primaryContext = new ScreenContext(targetControl, this, matrixManager);

            screenContexts.Add(targetControl, primaryContext);
            CurrentTargetContext = primaryContext;
            //PhysicsManager=new PhysicsManager(this);
            ResetTargets();

            return(primaryContext);
        }
        public void Initialize()
        {
            DeviceManager.Initialize();

            if (!TextureSamplerManager.Exists("default"))
            {
                TextureSamplerManager.Create("default", TextureSamplerSettings.Default()).Activate(0);
            }
            if (!BlendStateManager.Exists("none"))
            {
                BlendStateManager.Create("none", BlendSettings.None()).Activate();
            }
            if (!BlendStateManager.Exists("default"))
            {
                BlendStateManager.Create("default", BlendSettings.DefaultEnabled());
            }
            if (!RasterizerStateManager.Exists("default"))
            {
                RasterizerStateManager.Create("default", RasterizerSettings.Default()).Activate();
            }
        }
Exemple #7
0
    public static void Init(DeviceConfiguration config, HWND windowHandle)
    {
        if (IsInitialized)
        {
            throw new InvalidOperationException($"{nameof(GraphicsDevice)} has already been initialized.");
        }

        var deviceCreationFlags = D3D11_CREATE_DEVICE_FLAG.UNSPECIFIED;

        if (config.Debug)
        {
            deviceCreationFlags |= D3D11_CREATE_DEVICE_FLAG.D3D11_CREATE_DEVICE_DEBUG;
        }

        if (config.Stats)
        {
            deviceCreationFlags |= D3D11_CREATE_DEVICE_FLAG.D3D11_CREATE_DEVICE_BGRA_SUPPORT;
        }

        var featureLevel = D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_11_1;
        var desc         = new DXGI_SWAP_CHAIN_DESC
        {
            BufferCount = 2,
            BufferDesc  = new DXGI_MODE_DESC
            {
                Width       = config.Width,
                Height      = config.Height,
                RefreshRate = new DXGI_RATIONAL {
                    Denominator = config.RefreshRate
                },
                Scaling          = DXGI_MODE_SCALING_UNSPECIFIED,
                ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED,
                Format           = DXGI_FORMAT_B8G8R8A8_UNORM
            },
            SampleDesc = new DXGI_SAMPLE_DESC
            {
                //Count = 2, // TODO: look into how we should use AA/Multi Sampling in Titan
                Count   = 1,
                Quality = 0
            },

            BufferUsage  = DXGI_USAGE_RENDER_TARGET_OUTPUT,
            OutputWindow = windowHandle,
            //SwapEffect = DXGI_SWAP_EFFECT_SEQUENTIAL,
            SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD,
            Flags      = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH,
            Windowed   = config.Windowed
        };


        Logger.Trace <ID3D11Device>("Creating device");
        CheckAndThrow(D3D11CreateDeviceAndSwapChain(null, D3D_DRIVER_TYPE.D3D_DRIVER_TYPE_HARDWARE, 0, deviceCreationFlags, null, 0, D3D11_SDK_VERSION, &desc, _swapChain.GetAddressOf(), _device.GetAddressOf(), null, _context.GetAddressOf()), nameof(D3D11CreateDeviceAndSwapChain));
        Logger.Trace <ID3D11Device>("Device created");


#if DEBUG
        Logger.Trace <ID3D11Device>("Sampling quality levels");
        uint qualityLevel = 0;
        for (var sampleCount = 1u; sampleCount <= 16u; ++sampleCount)
        {
            var result = _device.Get()->CheckMultisampleQualityLevels(DXGI_FORMAT_B8G8R8A8_UNORM, sampleCount, &qualityLevel);
            if (SUCCEEDED(result))
            {
                Logger.Debug($"Sample count {sampleCount} supports quality level {qualityLevel}", typeof(GraphicsDevice));
            }
            else
            {
                Logger.Debug($"Sample count {sampleCount} failed with HRESULT {result}", typeof(GraphicsDevice));
            }
        }
#endif

        SwapChain = new SwapChain(_swapChain.Get(), config);

        ImmediateContext  = new Context(_context.Get());
        BufferManager     = new BufferManager(_device);
        TextureManager    = new TextureManager(_device.Get(), SwapChain);
        SamplerManager    = new SamplerManager(_device.Get());
        ShaderManager     = new ShaderManager(_device.Get());
        RasterizerManager = new RasterizerManager(_device.Get());
        BlendStateManager = new BlendStateManager(_device.Get());

        InitBackbuffer();
        IsInitialized = true;
    }