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); }
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 倍? }
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); }
/// <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); }
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); }
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()); } }