private VertexBufferArray CreateVertexBufferArray(OpenGL gl, PrimordialObject primordialObject) { vertexBufferArray = new VertexBufferArray(); vertexBufferArray.Create(gl); vertexBufferArray.Bind(gl); vertexDataBuffer = new VertexBuffer(); vertexDataBuffer.Create(gl); vertexDataBuffer.Bind(gl); // for(int i = 0; i<100; i++) { // var sendDataTime = _stopwatch.ElapsedMilliseconds; gl.BufferData(OpenGL.GL_ARRAY_BUFFER, primordialObject.VertexData, OpenGL.GL_STATIC_DRAW); // File.AppendAllText(fileTitle + "Data.txt", (_stopwatch.ElapsedMilliseconds - sendDataTime).ToString() + "\n"); // } gl.VertexAttribPointer(attributeIndexPosition, 4, OpenGL.GL_FLOAT, false, 3 * 4 * sizeof(float), IntPtr.Zero); gl.EnableVertexAttribArray(0); gl.VertexAttribPointer(attributeIndexColour, 4, OpenGL.GL_FLOAT, false, 3 * 4 * sizeof(float), IntPtr.Add(IntPtr.Zero, 4 * sizeof(float))); gl.EnableVertexAttribArray(1); gl.VertexAttribPointer(attributeIndexNormal, 4, OpenGL.GL_FLOAT, false, 3 * 4 * sizeof(float), IntPtr.Add(IntPtr.Zero, 8 * sizeof(float))); gl.EnableVertexAttribArray(2); vertexDataBuffer.Unbind(gl); vertexBufferArray.Unbind(gl); return(vertexBufferArray); }
public void Initialize(int width, int height, List <PrimordialObject> primordialObject, string fileTitle) { this.fileTitle = fileTitle; _clock = new Stopwatch(); _clock.Start(); _form = new RenderForm("PrimordialEngine"); _form.FormBorderStyle = FormBorderStyle.None; _form.MouseMove += mouseMove; var userControl = new UserControl(); _form.Controls.Add(userControl); _form.ClientSize = new System.Drawing.Size(width, height); camera = new Camera(60, width / (float)height); userControl.Size = new Size(0, 0); userControl.KeyDown += keyDown; userControl.MouseMove += mouseMove; userControl.KeyUp += KeyUpEvent; var point = new System.Drawing.Point(_form.Location.X + (_form.Size.Width / 2), _form.Location.Y + (_form.Size.Height / 2)); //Cursor.Position = point; _primordialObject = primordialObject[0]; _swapChainDescription = new SwapChainDescription() { BufferCount = 1, ModeDescription = new ModeDescription(_form.ClientSize.Width, _form.ClientSize.Height, new Rational(60, 1), Format.R8G8B8A8_UNorm), IsWindowed = true, OutputHandle = _form.Handle, SampleDescription = new SampleDescription(1, 0), SwapEffect = SwapEffect.Discard, Usage = Usage.RenderTargetOutput }; D3D11.Device.CreateWithSwapChain(DriverType.Hardware, D3D11.DeviceCreationFlags.None, _swapChainDescription, out _device, out _swapChain); _context = _device.ImmediateContext; _factory = _swapChain.GetParent <Factory>(); _factory.MakeWindowAssociation(_form.Handle, WindowAssociationFlags.IgnoreAll); var shaderName = "DirectXRenderer\\MiniCube.hlsl"; //var shaderName = @"DirectXRenderer\MiniCubeNoFrag.hlsl"; //var shaderName = "DirectXRenderer\\MiniCubeNoShader.hlsl"; //for(int i = 0; i < 100; i++) { //var shaderTime = _clock.ElapsedMilliseconds; _vertexShaderByteCode = ShaderBytecode.CompileFromFile(shaderName, "VS", "vs_4_0"); _vertexShader = new D3D11.VertexShader(_device, _vertexShaderByteCode); _pixelShaderByteCode = ShaderBytecode.CompileFromFile(shaderName, "PS", "ps_4_0"); _pixelShader = new D3D11.PixelShader(_device, _pixelShaderByteCode); // File.AppendAllText(fileTitle + "Shader.txt", (_clock.ElapsedMilliseconds - shaderTime).ToString() + "\n"); // _vertexShaderByteCode?.Dispose(); //_vertexShader?.Dispose(); // _pixelShaderByteCode?.Dispose(); // _pixelShader?.Dispose(); //} _shaderSignature = ShaderSignature.GetInputSignature(_vertexShaderByteCode); _inputLayout = new D3D11.InputLayout(_device, _shaderSignature, new[] { new D3D11.InputElement("POSITION", 0, Format.R32G32B32A32_Float, 0, 0), new D3D11.InputElement("COLOR", 0, Format.R32G32B32A32_Float, 16, 0), new D3D11.InputElement("NORMAL", 0, Format.R32G32B32A32_Float, 32, 0) }); // for(int i = 0; i<100; i++) { // var sendDataTime = _clock.ElapsedMilliseconds; _verticesBuffer = D3D11.Buffer.Create(_device, D3D11.BindFlags.VertexBuffer, _primordialObject.VertexData); // File.AppendAllText(fileTitle + "Data.txt", (_clock.ElapsedMilliseconds - sendDataTime).ToString() + "\n"); // _verticesBuffer?.Dispose(); // _verticesBuffer = null; // } _contantBuffer = new D3D11.Buffer(_device, Utilities.SizeOf <Matrix>(), D3D11.ResourceUsage.Default, D3D11.BindFlags.ConstantBuffer, D3D11.CpuAccessFlags.None, D3D11.ResourceOptionFlags.None, 0); _contantBuffer2 = new D3D11.Buffer(_device, Utilities.SizeOf <Matrix>(), D3D11.ResourceUsage.Default, D3D11.BindFlags.ConstantBuffer, D3D11.CpuAccessFlags.None, D3D11.ResourceOptionFlags.None, 0); _contantBuffer3 = new D3D11.Buffer(_device, Utilities.SizeOf <Matrix>(), D3D11.ResourceUsage.Default, D3D11.BindFlags.ConstantBuffer, D3D11.CpuAccessFlags.None, D3D11.ResourceOptionFlags.None, 0); _context.InputAssembler.InputLayout = _inputLayout; _context.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList; _context.InputAssembler.SetVertexBuffers(0, new D3D11.VertexBufferBinding(_verticesBuffer, Utilities.SizeOf <VertexDataStruct>(), 0)); _context.VertexShader.SetConstantBuffer(0, _contantBuffer); _context.VertexShader.SetConstantBuffer(1, _contantBuffer2); _context.VertexShader.SetConstantBuffer(2, _contantBuffer3); _context.VertexShader.Set(_vertexShader); _context.PixelShader.Set(_pixelShader); _view = Matrix.LookAtLH(new Vector3(0, 0, 0), new Vector3(0, 0, -5), Vector3.UnitY); _backBuffer = null; _renderView = null; _depthBuffer = null; _depthView = null; _form.UserResized += (sender, args) => _userResized = true; _form.KeyUp += (sender, args) => { if (args.KeyCode == Keys.F5) { _swapChain.SetFullscreenState(true, null); } else if (args.KeyCode == Keys.F4) { _swapChain.SetFullscreenState(false, null); } //else if (args.KeyCode == Keys.Escape) // _form.Close(); }; }