Exemplo n.º 1
0
        public PlaneBoard(RenderContext context, ShaderResourceView resView, Vector2 size)
        {
            this.context           = context;
            this._resView          = resView;
            this.Visibility        = true;
            this.SpriteEffect      = CGHelper.CreateEffectFx5FromResource("MMF.Resource.Shader.SpriteShader.fx", context.DeviceManager.Device);
            this.VertexInputLayout = new InputLayout(context.DeviceManager.Device, this.SpriteEffect.GetTechniqueByIndex(0).GetPassByIndex(0).Description.Signature, SpriteVertexLayout.InputElements);
            this.renderPass        = this.SpriteEffect.GetTechniqueByIndex(0).GetPassByIndex(0);
            float       width = size.X / 2, height = size.Y / 2;
            List <byte> vertexBytes = new List <byte>();

            CGHelper.AddListBuffer(new Vector3(-width, height, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(0, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector3(width, height, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(1, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector3(-width, -height, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(0, 1), vertexBytes);
            CGHelper.AddListBuffer(new Vector3(width, height, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(1, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector3(width, -height, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(1, 1), vertexBytes);
            CGHelper.AddListBuffer(new Vector3(-width, -height, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(0, 1), vertexBytes);
            using (DataStream ds = new DataStream(vertexBytes.ToArray(), true, true))
            {
                BufferDescription bufDesc = new BufferDescription()
                {
                    BindFlags   = BindFlags.VertexBuffer,
                    SizeInBytes = (int)ds.Length
                };
                this.VertexBuffer = new Buffer(context.DeviceManager.Device, ds, bufDesc);
            }
            this.Transformer       = new BasicTransformer();
            this.Transformer.Scale = new Vector3(0.2f);
        }
Exemplo n.º 2
0
        public プレーンボードシェイプ(WeakReference <ShaderResourceView> resourceView, Vector2 プレーンボードのサイズ)
        {
            _シェーダーリソースビュー = resourceView;

            表示中 = true;

            スプライトの描画に利用するエフェクト = CGHelper.EffectFx5を作成するFromResource("MikuMikuFlex.Resource.Shader.SpriteShader.fx", RenderContext.Instance.DeviceManager.D3DDevice);

            VertexInputLayout = new InputLayout(
                RenderContext.Instance.DeviceManager.D3DDevice,
                スプライトの描画に利用するエフェクト.GetTechniqueByIndex(0).GetPassByIndex(0).Description.Signature,
                スプライトの頂点レイアウト.InputElements);

            _描画パス = スプライトの描画に利用するエフェクト.GetTechniqueByIndex(0).GetPassByIndex(0);


            // 頂点リストを作成

            float width  = プレーンボードのサイズ.X / 2f;
            float height = プレーンボードのサイズ.Y / 2f;

            var 頂点リスト = new List <byte>();

            // 三角形1
            CGHelper.AddListBuffer(new Vector3(-width, height, 0), 頂点リスト);                    // x, y, z
            CGHelper.AddListBuffer(new Vector2(0, 0), 頂点リスト);                                 // u, v         以下同
            CGHelper.AddListBuffer(new Vector3(width, height, 0), 頂点リスト);
            CGHelper.AddListBuffer(new Vector2(1, 0), 頂点リスト);
            CGHelper.AddListBuffer(new Vector3(-width, -height, 0), 頂点リスト);
            CGHelper.AddListBuffer(new Vector2(0, 1), 頂点リスト);

            // 三角形2
            CGHelper.AddListBuffer(new Vector3(width, height, 0), 頂点リスト);
            CGHelper.AddListBuffer(new Vector2(1, 0), 頂点リスト);
            CGHelper.AddListBuffer(new Vector3(width, -height, 0), 頂点リスト);
            CGHelper.AddListBuffer(new Vector2(1, 1), 頂点リスト);
            CGHelper.AddListBuffer(new Vector3(-width, -height, 0), 頂点リスト);
            CGHelper.AddListBuffer(new Vector2(0, 1), 頂点リスト);


            // 頂点リストから頂点バッファを作成

            using (DataStream ds = DataStream.Create(頂点リスト.ToArray(), true, true))
            {
                var bufDesc = new BufferDescription()
                {
                    BindFlags   = BindFlags.VertexBuffer,
                    SizeInBytes = (int)ds.Length
                };

                D3D頂点バッファ = new SharpDX.Direct3D11.Buffer(RenderContext.Instance.DeviceManager.D3DDevice, ds, bufDesc);
            }

            モデル状態   = new モデル状態既定実装();
            モデル状態.率 = new Vector3(0.2f);                    // さいしょっから 0.2 倍?
        }
Exemplo n.º 3
0
        public DebugDotManager(RenderContext context)
        {
            this.Context = context;
            List <byte> listBuffer = new List <byte>();

            CGHelper.AddListBuffer(new Vector3(-dotlength / 2, dotlength / 2, 0), listBuffer);
            CGHelper.AddListBuffer(new Vector3(dotlength / 2, dotlength / 2, 0), listBuffer);
            CGHelper.AddListBuffer(new Vector3(-dotlength / 2, -dotlength / 2, 0), listBuffer);
            CGHelper.AddListBuffer(new Vector3(dotlength / 2, dotlength / 2, 0), listBuffer);
            CGHelper.AddListBuffer(new Vector3(dotlength / 2, -dotlength / 2, 0), listBuffer);
            CGHelper.AddListBuffer(new Vector3(-dotlength / 2, -dotlength / 2, 0), listBuffer);
            this.VertexBuffer = CGHelper.CreateBuffer(listBuffer, context.DeviceManager.Device, BindFlags.VertexBuffer);
            this.Effect       = CGHelper.CreateEffectFx5("Shader\\debugDot.fx", context.DeviceManager.Device);
            this.RenderPass   = this.Effect.GetTechniqueByIndex(0).GetPassByIndex(0);
            this.VertexLayout = new InputLayout(context.DeviceManager.Device, this.Effect.GetTechniqueByIndex(0).GetPassByIndex(0).Description.Signature, DebugDotInputLayout.InputElements);
        }
Exemplo n.º 4
0
        /// <summary>
        /// テクスチャのサイズを変更する
        /// </summary>
        /// <param name="width">幅</param>
        /// <param name="height">高さ</param>
        public void Resize(int width, int height)
        {
            TextureSize = new Vector2(width, height);
            float       w = width / 2f, h = height / 2f;
            List <byte> vertexBytes = new List <byte>();

            TransparentColor = new Vector3(0, 0, 0);
            CGHelper.AddListBuffer(new Vector3(-w, h, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(0, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector3(w, h, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(1, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector3(-w, -h, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(0, 1), vertexBytes);
            CGHelper.AddListBuffer(new Vector3(w, h, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(1, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector3(w, -h, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(1, 1), vertexBytes);
            CGHelper.AddListBuffer(new Vector3(-w, -h, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(0, 1), vertexBytes);
            using (DataStream ds = new DataStream(vertexBytes.ToArray(), true, true))
            {
                BufferDescription bufDesc = new BufferDescription()
                {
                    BindFlags   = BindFlags.VertexBuffer,
                    SizeInBytes = (int)ds.Length
                };
                VertexBuffer = new Buffer(Context.DeviceManager.Device, ds, bufDesc);
            }
            SpriteProjectionMatrix = Matrix.OrthoLH(width, height, 0, 100);
            spriteViewport         = new Viewport()
            {
                Width  = width,
                Height = height,
                MaxZ   = 1
            };
            mapedBitmap = new Bitmap(width, height);
            if (mapedGraphic != null)
            {
                mapedGraphic.Dispose();
            }
            mapedGraphic = Graphics.FromImage(mapedBitmap);
        }
Exemplo n.º 5
0
        public DebugDotManager()
        {
            var listBuffer = new List <byte>();

            CGHelper.AddListBuffer(new Vector3(-dotlength / 2, dotlength / 2, 0), listBuffer);
            CGHelper.AddListBuffer(new Vector3(dotlength / 2, dotlength / 2, 0), listBuffer);
            CGHelper.AddListBuffer(new Vector3(-dotlength / 2, -dotlength / 2, 0), listBuffer);
            CGHelper.AddListBuffer(new Vector3(dotlength / 2, dotlength / 2, 0), listBuffer);
            CGHelper.AddListBuffer(new Vector3(dotlength / 2, -dotlength / 2, 0), listBuffer);
            CGHelper.AddListBuffer(new Vector3(-dotlength / 2, -dotlength / 2, 0), listBuffer);

            VertexBuffer = CGHelper.D3Dバッファを作成する(listBuffer, RenderContext.Instance.DeviceManager.D3DDevice, BindFlags.VertexBuffer);

            Effect = CGHelper.EffectFx5を作成する("Shader\\debugDot.fx", RenderContext.Instance.DeviceManager.D3DDevice);

            RenderPass = Effect.GetTechniqueByIndex(0).GetPassByIndex(0);

            VertexLayout = new InputLayout(
                RenderContext.Instance.DeviceManager.D3DDevice,
                Effect.GetTechniqueByIndex(0).GetPassByIndex(0).Description.Signature,
                DebugDotInputLayout.InputElements);
        }
Exemplo n.º 6
0
        public void Resize()
        {
            Viewport vp     = this.DeviceManager.Context.Rasterizer.GetViewports()[0];
            int      width  = (int)vp.Width;
            int      height = (int)vp.Height;

            if (height == 0 || width == 0)
            {
                return;
            }
            this.TextureSize = new Vector2(width, height);
            float       w = width / 2f, h = height / 2f;
            List <byte> vertexBytes = new List <byte>();

            CGHelper.AddListBuffer(new Vector3(-w, h, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(0, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector3(w, h, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(1, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector3(-w, -h, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(0, 1), vertexBytes);
            CGHelper.AddListBuffer(new Vector3(w, h, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(1, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector3(w, -h, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(1, 1), vertexBytes);
            CGHelper.AddListBuffer(new Vector3(-w, -h, 0), vertexBytes);
            CGHelper.AddListBuffer(new Vector2(0, 1), vertexBytes);
            using (DataStream ds = new DataStream(vertexBytes.ToArray(), true, true))
            {
                BufferDescription bufDesc = new BufferDescription()
                {
                    BindFlags   = BindFlags.VertexBuffer,
                    SizeInBytes = (int)ds.Length
                };
                if (this.VertexBuffer != null && !this.VertexBuffer.Disposed)
                {
                    this.VertexBuffer.Dispose();
                }
                this.VertexBuffer = new SlimDX.Direct3D11.Buffer(this.DeviceManager.Device, ds, bufDesc);
            }
            this.SpriteProjectionMatrix = Matrix.OrthoLH(width, height, 0, 100);
            this.spriteViewport         = new Viewport()
            {
                Width  = width,
                Height = height,
                MaxZ   = 1
            };


            this.ViewMatrix = Matrix.LookAtLH(new Vector3(0, 0, -1), new Vector3(0, 0, 0), new Vector3(0, 1, 0));

            //DirectX11 for texture creation
            if (this.TextureD3D11 != null && !this.TextureD3D11.Disposed)
            {
                this.TextureD3D11.Dispose();
            }
            this.TextureD3D11 = new Texture2D(this.DeviceManager.Device, new Texture2DDescription()
            {
                Width             = width,
                Height            = height,
                MipLevels         = 1,
                ArraySize         = 1,
                Format            = Format.B8G8R8A8_UNorm,
                SampleDescription = new SampleDescription(1, 0),
                Usage             = ResourceUsage.Default,
                BindFlags         = BindFlags.RenderTarget | BindFlags.ShaderResource,
                CpuAccessFlags    = CpuAccessFlags.None,
                OptionFlags       = ResourceOptionFlags.KeyedMutex
            });
            //Share DX10 and DX11 texture resources
            Resource sharedResource = new Resource(this.TextureD3D11);

            if (this.TextureD3D10 != null && !this.TextureD3D10.Disposed)
            {
                this.TextureD3D10.Dispose();
            }
            this.TextureD3D10 = this.DeviceManager.Device10.OpenSharedResource <SlimDX.Direct3D10.Texture2D>(sharedResource.SharedHandle);
            if (this.MutexD3D10 != null && !this.MutexD3D10.Disposed)
            {
                this.MutexD3D10.Dispose();
            }
            if (this.MutexD3D11 != null && !this.MutexD3D11.Disposed)
            {
                this.MutexD3D11.Dispose();
            }
            this.MutexD3D10 = new KeyedMutex(this.TextureD3D10);
            this.MutexD3D11 = new KeyedMutex(this.TextureD3D11);
            sharedResource.Dispose();
            Surface surface            = this.TextureD3D10.AsSurface();
            RenderTargetProperties rtp = new RenderTargetProperties();

            rtp.MinimumFeatureLevel = FeatureLevel.Direct3D10;
            rtp.Type        = RenderTargetType.Hardware;
            rtp.Usage       = RenderTargetUsage.None;
            rtp.PixelFormat = new PixelFormat(Format.Unknown, AlphaMode.Premultiplied);
            if (this.DWRenderTarget != null && !this.DWRenderTarget.Disposed)
            {
                this.DWRenderTarget.Dispose();
            }
            this.DWRenderTarget = RenderTarget.FromDXGI(this.context.D2DFactory, surface, rtp);
            surface.Dispose();

            if (RenderTargetRecreated != null)
            {
                RenderTargetRecreated(this, new EventArgs());
            }
        }