Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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();
            };
        }