• 2018-8-17-C#-从零开始写-SharpDx-应用-控制台创建-Sharpdx-窗口


    title author date CreateTime categories
    C# 从零开始写 SharpDx 应用 控制台创建 Sharpdx 窗口
    lindexi
    2018-8-17 9:3:36 +0800
    2018-6-18 21:16:2 +0800
    C# D2D DirectX SharpDX Direct2D 渲染

    本文告诉大家如何在控制台使用 SharpDx 创建窗口,这是一个底层的博客,我会用很多博客告诉大家如何从控制台创建一个高性能渲染程序

    如果想看更多关于底层渲染的博客,请点击渲染系列

    首先创建一个控制台程序,选择 dotnet framework 为 4.5 这样就可以保证下面安装的库可以使用

    下载

    最好是使用 VisualStudio 2017项目格式,这样就可以直接复制下面代码放在自己的项目文件,就可以快速使用 Nuget 安装而不是需要等待 VisualStudio 的安装

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net45</TargetFramework>
      </PropertyGroup>
      <ItemGroup>
        <PackageReference Include="SharpDX" Version="4.1.0" />
        <PackageReference Include="SharpDX.D3DCompiler" Version="4.1.0" />
        <PackageReference Include="SharpDX.Desktop" Version="3.1.1" />
        <PackageReference Include="SharpDX.Direct2D1" Version="4.1.0" />
        <PackageReference Include="SharpDX.Direct3D11" Version="4.1.0" />
        <PackageReference Include="SharpDX.DXGI" Version="4.1.0" />
      </ItemGroup>
      <ItemGroup>
        <Folder Include="Properties" />
      </ItemGroup>
    </Project>

    如果使用的不是 VisualStudio 2017 的就通过 Nuget 安装下面几个库

    • SharpDX
    • SharpDX.D3DCompiler
    • SharpDX.Desktop
    • SharpDX.Direct2D1
    • SharpDX.Direct3D11
    • SharpDX.DXGI

    创建窗口

    首先创建一个简单的类,这个类主要使用 RenderForm 来创建窗口

       class KikuSimairme 
        {
            private RenderForm _renderForm;
    
            private const int Width = 1280;
            private const int Height = 720;
    
           
        }

    这个类的主要就是 RenderForm ,在使用的时候需要引用

    using SharpDX.Windows;
    

    现在还没有创建好窗口,需要在构造函数使用这个代码

            public KikuSimairme()
            {
                _renderForm = new RenderForm();
                _renderForm.ClientSize = new Size(Width, Height);
            }

    如果是在 WPF 创建一个窗口,除了创建还需要显示,下面来告诉大家如何显示窗口

    KikuSimairme添加两个方法

            public void Run()
            {
                RenderLoop.Run(_renderForm, RenderCallback);
            }
    
            private void RenderCallback()
            {
    
            }

    这样就可以在调用 Run 显示窗口,因为创建窗口需要开启循环,使用 RenderLoop.Run 就可以

    在不使用这个窗口时需要记得去掉

        class KikuSimairme : IDisposable
        {
        	// 其他代码
        	public void Dispose()
            {
                _renderForm?.Dispose();
            }
        }

    在 Main 函数创建类,然后显示窗口

            static void Main(string[] args)
            {
                using (var temp = new KikuSimairme())
                {
                    temp.Run();
                }
            }

    现在按下运行就可以看到显示了一个窗口

    虽然里面还没什么东西,但是已经可以显示窗口,在窗口里面也就可以进行画东西。以前很少在一个控制台创建窗口,现在使用 sharpDx 可以很简单在控制台创建窗口

    这是KikuSimairme类的全部代码

        class KikuSimairme : IDisposable
        {
            /// <inheritdoc />
            public KikuSimairme()
            {
                _renderForm = new RenderForm();
                _renderForm.ClientSize = new Size(Width, Height);
            }
    
            private const int Width = 1280;
    
            private const int Height = 720;
    
            public void Run()
            {
                RenderLoop.Run(_renderForm, RenderCallback);
            }
    
            private RenderForm _renderForm;
    
            private void RenderCallback()
            {
            }
    
            /// <inheritdoc />
            public void Dispose()
            {
                _renderForm?.Dispose();
            }
        }
    

    虽然已经创建窗口,但是现在还没有内容,在下一篇C# 从零开始写 SharpDx 应用 初始化dx修改颜色,我将会告诉大家如何在这个窗口修改颜色。更多SharpDx博客请到SharpDX 系列

    参见:SharpDX Beginners Tutorial Part 1: Setting up a SharpDX project in Visual Studio 2013 - Johan Falk

    下一篇 C# 从零开始写 SharpDx 应用 初始化dx修改颜色

  • 相关阅读:
    MySQL
    docker-compose部署redis及RabbitMq
    docker-compose部署nacos单机版(简洁优化版)
    用U盘启动安装CentOS的详解
    mysql 获取id最大值
    JAVA编码-- 比较两个BigDecimal大小(重要)
    MYSQL如何把年月日3个int类型的字段拼接成日期类型,并按照日期段进行查询
    Mysql如何根据年月日来查询数据
    springboot 调用redisTemplate时总是为null的解决方法
    shell中read用法
  • 原文地址:https://www.cnblogs.com/lindexi/p/12085719.html
Copyright © 2020-2023  润新知