示例#1
0
        public static D3D.Texture2D CreateSurface(this D3D.Device device, int width, int height, DXGI.SampleDescription sampleDescription, out D3D.RenderTargetView renderTarget)
        {
            var desc = new D3D.Texture2DDescription
            {
                Width             = width,
                Height            = height,
                MipLevels         = 1,
                ArraySize         = 1,
                Format            = DXGI.Format.R8G8B8A8_UNorm,
                SampleDescription = sampleDescription,
                Usage             = D3D.ResourceUsage.Default,
                BindFlags         = D3D.BindFlags.RenderTarget | D3D.BindFlags.ShaderResource,
                CpuAccessFlags    = D3D.CpuAccessFlags.None,
                OptionFlags       = D3D.ResourceOptionFlags.Shared,
            };
            var surface = new D3D.Texture2D(device, desc);

            var targetDesc = new D3D.RenderTargetViewDescription
            {
                Format    = desc.Format,
                Dimension = desc.SampleDescription.Count == 1
                        ? D3D.RenderTargetViewDimension.Texture2D
                        : D3D.RenderTargetViewDimension.Texture2DMultisampled,
            };

            renderTarget = new D3D.RenderTargetView(device, surface, targetDesc);

            return(surface);
        }
示例#2
0
        void InitializeSharedBackBuffer(IntPtr resourcePtr)
        {
            // convert native pointer to DXGI shared resource
            Resource resource = CppObject.FromPointer <Resource>(resourcePtr).QueryInterface <Resource>();

            // convert shared resource to D3D11 Texture
            D3D11.Texture2D sharedBackbuffer = device.OpenSharedResource <D3D11.Texture2D>(resource.SharedHandle);

            // release reference
            resource.Dispose();

            // use D3D11 Texture as render target
            D3D11.RenderTargetViewDescription desc = new D3D11.RenderTargetViewDescription();
            desc.Format             = Format.B8G8R8A8_UNorm;
            desc.Dimension          = D3D11.RenderTargetViewDimension.Texture2D;
            desc.Texture2D.MipSlice = 0;

            renderTargetView = new D3D11.RenderTargetView(device, sharedBackbuffer, desc);
            deviceContext.OutputMerger.SetRenderTargets(renderTargetView);

            // release reference
            sharedBackbuffer.Dispose();

            // setup viewport
            Size size = Utils.WpfSizeToPixels(ImageGrid);

            deviceContext.Rasterizer.SetViewport(new Viewport(0, 0, (int)size.Width, (int)size.Height, 0.0f, 1.0f));
        }
示例#3
0
        /// <summary>
        /// Function to perform initialization of the view.
        /// </summary>
        protected override void OnInitialize()
        {
            D3D.RenderTargetViewDescription desc = default(D3D.RenderTargetViewDescription);

            desc.Dimension = D3D.RenderTargetViewDimension.Unknown;

            switch (Resource.ResourceType)
            {
            case ResourceType.Texture1D:
                desc = GetDesc1D();
                break;

            case ResourceType.Texture2D:
                desc = GetDesc2D();
                break;

            case ResourceType.Texture3D:
                desc = GetDesc3D();
                break;
            }

            if (desc.Dimension == D3D.RenderTargetViewDimension.Unknown)
            {
                throw new GorgonException(GorgonResult.CannotCreate, Resources.GORGFX_VIEW_CANNOT_BIND_UNKNOWN_RESOURCE);
            }

            D3DView = new D3D.RenderTargetView(Resource.Graphics.D3DDevice, Resource.D3DResource, desc)
            {
                DebugName = string.Format("{0} '{1}' Render Target View", Resource.ResourceType, Resource.Name)
            };
        }
示例#4
0
        private D3D11.RenderTargetView[] CreateRTVArray(D3D11.Device device, Format format, D3D11.Texture2D texture, int mipSlice)
        {
            var rtvDesc = new D3D11.RenderTargetViewDescription();

            rtvDesc.Format                         = format;
            rtvDesc.Texture2D.MipSlice             = mipSlice;
            rtvDesc.Dimension                      = D3D11.RenderTargetViewDimension.Texture2DArray;
            rtvDesc.Texture2DArray.FirstArraySlice = 0;
            //rtvDesc.Texture2DArray.ArraySize = 6;
            //D3D11.RenderTargetView rtv = new D3D11.RenderTargetView(device, texture, rtvDesc);

            rtvDesc.Texture2DArray.ArraySize = 1;
            D3D11.RenderTargetView[] faceRTVs = new D3D11.RenderTargetView[6];

            for (int i = 0; i < 6; ++i)
            {
                rtvDesc.Texture2DArray.FirstArraySlice = i;
                faceRTVs[i] = new D3D11.RenderTargetView(device, texture, rtvDesc);
            }

            return(faceRTVs);
        }
        /// <summary>
        /// Function to perform initialization of the view.
        /// </summary>
        protected override void OnInitialize()
        {
            if (Resource.ResourceType != ResourceType.Buffer)
            {
                throw new GorgonException(GorgonResult.CannotCreate, Resources.GORGFX_VIEW_CANNOT_BIND_UNKNOWN_RESOURCE);
            }

            var desc = new D3D.RenderTargetViewDescription
            {
                Dimension = D3D.RenderTargetViewDimension.Buffer,
                Format    = (GI.Format)Format,
                Buffer    = new D3D.RenderTargetViewDescription.BufferResource
                {
                    FirstElement = FirstElement,
                    ElementCount = ElementCount
                }
            };

            D3DView = new D3D.RenderTargetView(Resource.Graphics.D3DDevice, Resource.D3DResource, desc)
            {
                DebugName = string.Format("{0} '{1}' Render Target View", Resource.ResourceType, Resource.Name)
            };
        }
示例#6
0
        public static D3D.Texture2D CreateSurface(this D3D.Device device, int width, int height, DXGI.SampleDescription sampleDescription, out D3D.RenderTargetView renderTarget)
        {
            var desc = new D3D.Texture2DDescription
            {
                Width = width,
                Height = height,
                MipLevels = 1,
                ArraySize = 1,
                Format = DXGI.Format.R8G8B8A8_UNorm,
                SampleDescription = sampleDescription,
                Usage = D3D.ResourceUsage.Default,
                BindFlags = D3D.BindFlags.RenderTarget | D3D.BindFlags.ShaderResource,
                CpuAccessFlags = D3D.CpuAccessFlags.None,
                OptionFlags = D3D.ResourceOptionFlags.Shared,
            };
            var surface = new D3D.Texture2D(device, desc);

            var targetDesc = new D3D.RenderTargetViewDescription
            {
                Format = desc.Format,
                Dimension = desc.SampleDescription.Count == 1
                        ? D3D.RenderTargetViewDimension.Texture2D
                        : D3D.RenderTargetViewDimension.Texture2DMultisampled,
            };
            renderTarget = new D3D.RenderTargetView(device, surface, targetDesc);

            return surface;
        }