/// <summary> /// Gets the bitmap resource. /// </summary> /// <param name="resourceManager">The resource manager.</param> /// <param name="relativeUri">The relative URI.</param> /// <param name="assemblyName">Name of the assembly.</param> /// <returns>The bitmap, or null if not found.</returns> public static BitmapImage GetBitmap(this IResourceManager resourceManager, string relativeUri, string assemblyName) { var stream = resourceManager.GetStream(relativeUri, assemblyName); if (stream == null) { return(null); } using (stream) { var bmp = new BitmapImage(); #if SILVERLIGHT bmp.SetSource(stream); #else bmp.BeginInit(); bmp.StreamSource = stream; bmp.EndInit(); bmp.Freeze(); #endif return(bmp); } }
public static Effect FromResource(Device device, string resourcePath) { IResourceManager resourceManager = IoC.Get <IResourceManager>(); Stream effectStream = resourceManager.GetStream(resourcePath, Assembly.GetExecutingAssembly().GetAssemblyName()); return(Effect.FromStream(device, effectStream, ShaderFlags.None)); }
/// <summary> /// Gets the resource string. /// </summary> /// <param name="resourceManager">The resource manager.</param> /// <param name="relativeUri">The relative URI.</param> /// <param name="assemblyName">Name of the assembly.</param> /// <returns>The string, or null if not found.</returns> public static string GetString(this IResourceManager resourceManager, string relativeUri, string assemblyName) { var stream = resourceManager.GetStream(relativeUri, assemblyName); if (stream == null) { return(null); } using (var reader = new StreamReader(stream)) { return(reader.ReadToEnd()); } }
/// <summary> /// Gets the font source resource. /// </summary> /// <param name="resourceManager">The resource manager.</param> /// <param name="relativeUri">The relative URI.</param> /// <param name="assemblyName">Name of the assembly.</param> /// <returns>The FontSource, or null if not found.</returns> public static FontSource GetFontSource(this IResourceManager resourceManager, string relativeUri, string assemblyName) { var stream = resourceManager.GetStream(relativeUri, assemblyName); if (stream == null) { return(null); } using (stream) { return(new FontSource(stream)); } }
/// <summary> /// Gets the xaml object resource. /// </summary> /// <param name="resourceManager">The resource manager.</param> /// <param name="relativeUri">The relative URI.</param> /// <param name="assemblyName">Name of the assembly.</param> /// <returns>The xaml object, or null if not found.</returns> public static object GetXamlObject(this IResourceManager resourceManager, string relativeUri, string assemblyName) { #if SILVERLIGHT string str = resourceManager.GetString(relativeUri, assemblyName); if (string.IsNullOrEmpty(str)) { return(null); } return(XamlReader.Load(str)); #else var stream = resourceManager.GetStream(relativeUri, assemblyName); if (stream == null) { return(null); } using (stream) { return(XamlReader.Load(stream)); } #endif }
/// <summary> /// Gets the resource stream using the default resource assembly. /// </summary> /// <param name="resourceManager">The resource manager.</param> /// <param name="relativeUri">The relative URI.</param> /// <returns>The stream, or null if not found.</returns> public static Stream GetStream(this IResourceManager resourceManager, string relativeUri) { return(resourceManager.GetStream(relativeUri, DefaultResourceAssembly.GetAssemblyName())); }
public ImageGenerator(IResourceManager resourceLoader) { const int width = 400; const int height = 400; // Create device and swap chain. _device = new Device(); var swapChainPresenter = new WpfSwapChainPresenter(); _swapChain = _device.CreateSwapChain(width, height, swapChainPresenter); _outputBitmap = swapChainPresenter.Bitmap; _deviceContext = _device.ImmediateContext; // Create RenderTargetView from the backbuffer. var backBuffer = Texture2D.FromSwapChain(_swapChain, 0); _renderTargetView = _device.CreateRenderTargetView(backBuffer); // Create the depth buffer var depthBuffer = _device.CreateTexture2D(new Texture2DDescription { ArraySize = 1, MipLevels = 1, Width = width, Height = height, BindFlags = BindFlags.DepthStencil }); // Create the depth buffer view _depthView = _device.CreateDepthStencilView(depthBuffer); // Compile Vertex and Pixel shaders var vertexShaderByteCode = ShaderCompiler.CompileFromFile("Modules/SampleBrowser/TechDemos/Resources/TextureSampling/Texture.fx", "VS", "vs_4_0"); var vertexShader = _device.CreateVertexShader(vertexShaderByteCode); var pixelShaderByteCode = ShaderCompiler.CompileFromFile("Modules/SampleBrowser/TechDemos/Resources/TextureSampling/Texture.fx", "PS", "ps_4_1"); var pixelShader = _device.CreatePixelShader(pixelShaderByteCode); // Layout from VertexShader input signature var layout = _device.CreateInputLayout( new[] { new InputElement("POSITION", 0, Format.R32G32B32A32_Float, 0, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 0, 16) }, vertexShaderByteCode); // Instantiate Vertex buiffer from vertex data var vertices = _device.CreateBuffer(new BufferDescription(BindFlags.VertexBuffer), new[] { // 3D coordinates UV Texture coordinates -1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 1.0f, // Front -1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, -1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 0.0f, // BACK 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 1.0f, // Top -1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 0.0f, // Bottom 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 1.0f, // Left -1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 0.0f, // Right 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f }); // Create Constant Buffer _constantBuffer = _device.CreateBuffer(new BufferDescription { SizeInBytes = Utilities.SizeOf<Matrix>(), BindFlags = BindFlags.ConstantBuffer }); // Load texture and create sampler var textureStream = resourceLoader.GetStream( "Modules/SampleBrowser/TechDemos/Resources/TextureSampling/CorrodedTiles.png", GetType().Assembly.FullName); var texture = TextureLoader.CreateTextureFromStream(_device, textureStream); var textureView = _device.CreateShaderResourceView(texture); // Prepare all the stages _deviceContext.InputAssembler.InputLayout = layout; _deviceContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; _deviceContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(vertices, 0, Utilities.SizeOf<Vector4>() + Utilities.SizeOf<Vector2>())); _deviceContext.VertexShader.SetConstantBuffers(0, _constantBuffer); _deviceContext.VertexShader.Shader = vertexShader; _deviceContext.PixelShader.Shader = pixelShader; _deviceContext.PixelShader.SetShaderResources(0, textureView); // Setup targets and viewport for rendering _deviceContext.Rasterizer.SetViewports(new Viewport(0, 0, _outputBitmap.PixelWidth, _outputBitmap.PixelHeight, 0.0f, 1.0f)); _deviceContext.OutputMerger.SetTargets(_depthView, _renderTargetView); // Prepare matrices _view = Matrix.LookAtRH(new Vector3(0.7f, 0, -1.7f), Vector3.BackwardRH, Vector3.UnitY); _projection = Matrix.PerspectiveFovRH(MathUtil.PiOverFour, _outputBitmap.PixelWidth / (float) _outputBitmap.PixelHeight, 0.1f, 100.0f); }
public override WriteableBitmap Initialize(Device device) { const int width = 600; const int height = 400; // Create device and swap chain. var swapChainPresenter = new WpfSwapChainPresenter(); _swapChain = device.CreateSwapChain(width, height, swapChainPresenter); _deviceContext = device.ImmediateContext; // Create RenderTargetView from the backbuffer. var backBuffer = Texture2D.FromSwapChain(_swapChain, 0); _renderTargetView = device.CreateRenderTargetView(backBuffer); // Create the depth buffer var depthBuffer = device.CreateTexture2D(new Texture2DDescription { ArraySize = 1, MipLevels = 1, Width = width, Height = height, BindFlags = BindFlags.DepthStencil }); // Create the depth buffer view _depthView = device.CreateDepthStencilView(depthBuffer); // Compile Vertex and Pixel shaders var vertexShaderByteCode = ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/MiniCubeTexture/MiniCubeTexture.fx", "VS", "vs_4_0"); var vertexShader = device.CreateVertexShader(vertexShaderByteCode); var pixelShaderByteCode = ShaderCompiler.CompileFromFile("Modules/SampleBrowser/Samples/MiniCubeTexture/MiniCubeTexture.fx", "PS", "ps_4_0"); var pixelShader = device.CreatePixelShader(pixelShaderByteCode); // Layout from VertexShader input signature var layout = device.CreateInputLayout( new[] { new InputElement("POSITION", 0, Format.R32G32B32A32_Float, 0, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 0, 16) }, vertexShaderByteCode); // Instantiate Vertex buiffer from vertex data var vertices = device.CreateBuffer(new BufferDescription(BindFlags.VertexBuffer), new[] { // 3D coordinates UV Texture coordinates -1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 1.0f, // Front -1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, -1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 0.0f, // BACK 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 1.0f, // Top -1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 0.0f, // Bottom 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 1.0f, // Left -1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 0.0f, // Right 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f }); // Create Constant Buffer _constantBuffer = device.CreateBuffer(new BufferDescription { SizeInBytes = Utilities.SizeOf <Matrix>(), BindFlags = BindFlags.ConstantBuffer }); // Load texture and create sampler var textureStream = _resourceLoader.GetStream( "Modules/SampleBrowser/Samples/MiniCubeTexture/GeneticaMortarlessBlocks.jpg", GetType().Assembly.FullName); var texture = TextureLoader.CreateTextureFromStream(device, textureStream); var textureView = device.CreateShaderResourceView(texture); var sampler = device.CreateSamplerState(new SamplerStateDescription { Filter = Filter.MinMagMipPoint, AddressU = TextureAddressMode.Wrap, AddressV = TextureAddressMode.Wrap, AddressW = TextureAddressMode.Wrap, BorderColor = Color4.Black, ComparisonFunction = Comparison.Never, MaximumAnisotropy = 16, MipLodBias = 0, MinimumLod = 0, MaximumLod = 16, }); // Prepare all the stages _deviceContext.InputAssembler.InputLayout = layout; _deviceContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; _deviceContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(vertices, 0, Utilities.SizeOf <Vector4>() + Utilities.SizeOf <Vector2>())); _deviceContext.VertexShader.SetConstantBuffers(0, _constantBuffer); _deviceContext.VertexShader.Shader = vertexShader; _deviceContext.PixelShader.Shader = pixelShader; _deviceContext.PixelShader.SetSamplers(0, sampler); _deviceContext.PixelShader.SetShaderResources(0, textureView); // Setup targets and viewport for rendering _deviceContext.Rasterizer.SetViewports(new Viewport(0, 0, width, height, 0.0f, 1.0f)); _deviceContext.OutputMerger.SetTargets(_depthView, _renderTargetView); // Prepare matrices _view = Matrix.LookAtLH(new Vector3(0, 0, -5), Vector3.Zero, Vector3.UnitY); _projection = Matrix.PerspectiveFovLH(MathUtil.PiOverFour, width / (float)height, 0.1f, 100.0f); return(swapChainPresenter.Bitmap); }
public ImageGenerator(IResourceManager resourceLoader) { const int width = 400; const int height = 400; // Create device and swap chain. _device = new Device(); var swapChainPresenter = new WpfSwapChainPresenter(); _swapChain = _device.CreateSwapChain(width, height, swapChainPresenter); _outputBitmap = swapChainPresenter.Bitmap; _deviceContext = _device.ImmediateContext; // Create RenderTargetView from the backbuffer. var backBuffer = Texture2D.FromSwapChain(_swapChain, 0); _renderTargetView = _device.CreateRenderTargetView(backBuffer); // Create the depth buffer var depthBuffer = _device.CreateTexture2D(new Texture2DDescription { ArraySize = 1, MipLevels = 1, Width = width, Height = height, BindFlags = BindFlags.DepthStencil }); // Create the depth buffer view _depthView = _device.CreateDepthStencilView(depthBuffer); // Compile Vertex and Pixel shaders var vertexShaderByteCode = ShaderCompiler.CompileFromFile("Modules/SampleBrowser/TechDemos/Resources/TextureSampling/Texture.fx", "VS", "vs_4_0"); var vertexShader = _device.CreateVertexShader(vertexShaderByteCode); var pixelShaderByteCode = ShaderCompiler.CompileFromFile("Modules/SampleBrowser/TechDemos/Resources/TextureSampling/Texture.fx", "PS", "ps_4_1"); var pixelShader = _device.CreatePixelShader(pixelShaderByteCode); // Layout from VertexShader input signature var layout = _device.CreateInputLayout( new[] { new InputElement("POSITION", 0, Format.R32G32B32A32_Float, 0, 0), new InputElement("TEXCOORD", 0, Format.R32G32_Float, 0, 16) }, vertexShaderByteCode); // Instantiate Vertex buiffer from vertex data var vertices = _device.CreateBuffer(new BufferDescription(BindFlags.VertexBuffer), new[] { // 3D coordinates UV Texture coordinates -1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 1.0f, // Front -1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, -1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 0.0f, // BACK 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 1.0f, // Top -1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 0.0f, // Bottom 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 1.0f, // Left -1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 0.0f, // Right 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f }); // Create Constant Buffer _constantBuffer = _device.CreateBuffer(new BufferDescription { SizeInBytes = Utilities.SizeOf <Matrix>(), BindFlags = BindFlags.ConstantBuffer }); // Load texture and create sampler var textureStream = resourceLoader.GetStream( "Modules/SampleBrowser/TechDemos/Resources/TextureSampling/CorrodedTiles.png", GetType().Assembly.FullName); var texture = TextureLoader.CreateTextureFromStream(_device, textureStream); var textureView = _device.CreateShaderResourceView(texture); // Prepare all the stages _deviceContext.InputAssembler.InputLayout = layout; _deviceContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; _deviceContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(vertices, 0, Utilities.SizeOf <Vector4>() + Utilities.SizeOf <Vector2>())); _deviceContext.VertexShader.SetConstantBuffers(0, _constantBuffer); _deviceContext.VertexShader.Shader = vertexShader; _deviceContext.PixelShader.Shader = pixelShader; _deviceContext.PixelShader.SetShaderResources(0, textureView); // Setup targets and viewport for rendering _deviceContext.Rasterizer.SetViewports(new Viewport(0, 0, _outputBitmap.PixelWidth, _outputBitmap.PixelHeight, 0.0f, 1.0f)); _deviceContext.OutputMerger.SetTargets(_depthView, _renderTargetView); // Prepare matrices _view = Matrix.LookAtRH(new Vector3(0.7f, 0, -1.7f), Vector3.BackwardRH, Vector3.UnitY); _projection = Matrix.PerspectiveFovRH(MathUtil.PiOverFour, _outputBitmap.PixelWidth / (float)_outputBitmap.PixelHeight, 0.1f, 100.0f); }