MC6847搭載機で遊ぶイベントです。
FP技能士3級に挑戦してみた!
ちょっとだけDirectX11その2
表題の書籍のサンプルプログラムをSharpDXで書いてみる。
using System; using SharpDX; using SharpDX.D3DCompiler; using SharpDX.Direct3D; using SharpDX.Direct3D11; using SharpDX.DXGI; using SharpDX.Windows; using Buffer = SharpDX.Direct3D11.Buffer; using Device = SharpDX.Direct3D11.Device; namespace Sankaku { /// <summary> /// SharpDX port of SharpDX-MiniTri Direct3D 11 Sample /// </summary> internal static class Program { [STAThread] private static void Main() { var form = new RenderForm("SharpDX - Direct3D 11 サンプル Sankaku01"); // SwapChain description var desc = new SwapChainDescription() { BufferCount = 1, ModeDescription = new ModeDescription(640, 480, new Rational(60, 1), Format.R8G8B8A8_UNorm), IsWindowed = true, OutputHandle = form.Handle, SampleDescription = new SampleDescription(1, 0), SwapEffect = SwapEffect.Discard, Usage = Usage.RenderTargetOutput }; // Create Device and SwapChain Device device; SwapChain swapChain; Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.None, desc, out device, out swapChain); var context = device.ImmediateContext; // Ignore all windows events // var factory = swapChain.GetParent<Factory>(); // factory.MakeWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll); // New RenderTargetView from the backbuffer var backBuffer = Texture2D.FromSwapChain<Texture2D>(swapChain, 0); var renderView = new RenderTargetView(device, backBuffer); // Compile Vertex and Pixel shaders var vertexShaderByteCode = ShaderBytecode.CompileFromFile("MiniTri.fx", "VS", "vs_4_0", ShaderFlags.None, EffectFlags.None); var vertexShader = new VertexShader(device, vertexShaderByteCode); var pixelShaderByteCode = ShaderBytecode.CompileFromFile("MiniTri.fx", "PS", "ps_4_0", ShaderFlags.None, EffectFlags.None); var pixelShader = new PixelShader(device, pixelShaderByteCode); // Layout from VertexShader input signature var layout = new InputLayout( device, ShaderSignature.GetInputSignature(vertexShaderByteCode), new[] { new InputElement("POSITION", 0, Format.R32G32B32A32_Float, 0, 0), new InputElement("COLOR", 0, Format.R32G32B32A32_Float, 16, 0) }); // Instantiate Vertex buiffer from vertex data // var vertices = Buffer.Create(device, BindFlags.VertexBuffer, new[] // { // new Vector4(0.0f, 0.5f, 0.5f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f), // new Vector4(0.5f, -0.5f, 0.5f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f), // new Vector4(-0.5f, -0.5f, 0.5f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f) // }); var vertices = Buffer.Create(device, BindFlags.VertexBuffer, new[] { new Vector4(0.0f, 1.5f, 0.5f, 2.0f), new Vector4(1.0f, 1.0f, 1.0f, 2.0f), new Vector4(1.0f, -1.0f, 0.5f, 2.0f), new Vector4(1.0f, 1.0f, 1.0f, 2.0f), new Vector4(-1.0f, -1.0f, 0.5f, 2.0f), new Vector4(1.0f, 1.0f, 1.0f, 2.0f) }); // Prepare All the stages context.InputAssembler.InputLayout = layout; context.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; context.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(vertices, 32, 0)); context.VertexShader.Set(vertexShader); context.Rasterizer.SetViewport(new Viewport(0, 0, 640, 480, 0.0f, 1.0f)); context.PixelShader.Set(pixelShader); context.OutputMerger.SetTargets(renderView); // Main loop RenderLoop.Run(form, () => { context.ClearRenderTargetView(renderView, new Color(0.0f, 0.5f, 0.7f, 1.0f)); context.Draw(3, 0); swapChain.Present(0, PresentFlags.None); }); // Release all resources vertexShaderByteCode.Dispose(); vertexShader.Dispose(); pixelShaderByteCode.Dispose(); pixelShader.Dispose(); vertices.Dispose(); layout.Dispose(); renderView.Dispose(); backBuffer.Dispose(); context.ClearState(); context.Flush(); device.Dispose(); context.Dispose(); swapChain.Dispose(); // factory.Dispose(); } } }
第二種電気工事士の資格に挑戦してみる その5
ついに第二種電気工事士の資格取得しました!
さっそく免状交付のために、神奈川県電気工事工業組合本部事務局に行ってきました。
- 受験用写真 800円
- 免許用写真 800円
- 住民票 300円
- 神奈川県収入証紙 5300円
ちょっとだけDirectX11
表題の書籍でDirectX11の勉強をはじめる。
https://www.kohgakusha.co.jp/books/detail/978-4-7775-1501-1
- Windows 10
- Visual Studio 2008
- DXSDK_Jun10
ひっかかったのはDXSDK_Jun10のサンプルをビルドする必要があると言う事。
C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\Effects11
ここで作成されるEffects11.libをリネームして配置する必要がありました。
C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include\d3dx11effect.h C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib\x86\d3dx11effects.lib
サンプルプログラムをSharpDXで書いてみました。
using System; using System.Windows.Forms; using SharpDX; using SharpDX.Direct2D1; using SharpDX.DirectWrite; using SharpDX.DXGI; using SharpDX.Windows; using TextAntialiasMode = SharpDX.Direct2D1.TextAntialiasMode; using AlphaMode = SharpDX.Direct2D1.AlphaMode; using Factory = SharpDX.Direct2D1.Factory; namespace HelloApp { /// <summary> /// Shows how to use DirectWrite to render simple text. /// Port of DirectWrite sample SimpleHelloWorld from Windows 7 SDK samples /// http://msdn.microsoft.com/en-us/library/dd742738%28v=VS.85%29.aspx /// </summary> public class Program { private FormWindowState _currentFormWindowState; private Form _form; public Factory Factory2D { get; private set; } public SharpDX.DirectWrite.Factory FactoryDWrite { get; private set; } public WindowRenderTarget RenderTarget2D { get; private set; } public SolidColorBrush SceneColorBrush { get; private set; } public TextFormat TextFormat { get; private set; } public RectangleF ClientRectangle { get; private set; } protected IntPtr DisplayHandle { get { return _form.Handle; } } protected void Initialize() { Factory2D = new SharpDX.Direct2D1.Factory(); FactoryDWrite = new SharpDX.DirectWrite.Factory(); HwndRenderTargetProperties properties = new HwndRenderTargetProperties(); properties.Hwnd = DisplayHandle; properties.PixelSize = new SharpDX.Size2(640, 480); properties.PresentOptions = PresentOptions.None; RenderTarget2D = new WindowRenderTarget(Factory2D, new RenderTargetProperties(new PixelFormat(Format.Unknown, AlphaMode.Premultiplied)), properties); RenderTarget2D.AntialiasMode = AntialiasMode.PerPrimitive; SceneColorBrush = new SolidColorBrush(RenderTarget2D, Color.White); TextFormat = new TextFormat(FactoryDWrite, "メイリオ", 50) { TextAlignment = TextAlignment.Center, ParagraphAlignment = ParagraphAlignment.Center }; RenderTarget2D.TextAntialiasMode = TextAntialiasMode.Cleartype; ClientRectangle = new RectangleF(0, 0, 640, 480); SceneColorBrush.Color = Color.Black; } protected void Draw() { RenderTarget2D.Clear(Color.White); RenderTarget2D.DrawText("Hello, World!", TextFormat, ClientRectangle, SceneColorBrush); } private void HandleResize(object sender, EventArgs e) { if (_form.WindowState == FormWindowState.Minimized) { return; } } protected virtual Form CreateForm() { return new RenderForm("Direct2D Hello Application") { ClientSize = new System.Drawing.Size(640, 480) }; } public void Run() { _form = CreateForm(); Initialize(); bool isFormClosed = false; bool formIsResizing = false; _form.Resize += (o, args) => { if (_form.WindowState != _currentFormWindowState) { HandleResize(o, args); } _currentFormWindowState = _form.WindowState; }; _form.ResizeBegin += (o, args) => { formIsResizing = true; }; _form.ResizeEnd += (o, args) => { formIsResizing = false; HandleResize(o, args); }; _form.Closed += (o, args) => { isFormClosed = true; }; RenderLoop.Run(_form, () => { if (isFormClosed) { return; } RenderTarget2D.BeginDraw(); Draw(); RenderTarget2D.EndDraw(); }); } /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Program program = new Program(); program.Run(); } } }