添加DRM启动demo和使用方法
This commit is contained in:
parent
367aa0a386
commit
1b7c30c557
@ -26,6 +26,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semi.Avalonia.ColorPicker",
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semi.Avalonia.Demo.Android", "demo\Semi.Avalonia.Demo.Android\Semi.Avalonia.Demo.Android.csproj", "{0C81FC1C-5D2D-478A-9876-923A0C85EC2F}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semi.Avalonia.Demo.Android", "demo\Semi.Avalonia.Demo.Android\Semi.Avalonia.Demo.Android.csproj", "{0C81FC1C-5D2D-478A-9876-923A0C85EC2F}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semi.Avalonia.Demo.Drm", "demo\Semi.Avalonia.Demo.Drm\Semi.Avalonia.Demo.Drm.csproj", "{86D93406-412A-4429-93B2-92AAD0407784}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@ -61,6 +63,10 @@ Global
|
|||||||
{0C81FC1C-5D2D-478A-9876-923A0C85EC2F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
|
{0C81FC1C-5D2D-478A-9876-923A0C85EC2F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
|
||||||
{0C81FC1C-5D2D-478A-9876-923A0C85EC2F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{0C81FC1C-5D2D-478A-9876-923A0C85EC2F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{0C81FC1C-5D2D-478A-9876-923A0C85EC2F}.Release|Any CPU.Build.0 = Release|Any CPU
|
{0C81FC1C-5D2D-478A-9876-923A0C85EC2F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{86D93406-412A-4429-93B2-92AAD0407784}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{86D93406-412A-4429-93B2-92AAD0407784}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{86D93406-412A-4429-93B2-92AAD0407784}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{86D93406-412A-4429-93B2-92AAD0407784}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@ -70,6 +76,7 @@ Global
|
|||||||
{69A2C77D-6DB7-4AE4-B179-D1F5CF5E2DF0} = {43091528-9509-43CB-A003-9C5C11E96DD6}
|
{69A2C77D-6DB7-4AE4-B179-D1F5CF5E2DF0} = {43091528-9509-43CB-A003-9C5C11E96DD6}
|
||||||
{D789AEDB-EBDF-4450-8E8E-B4A03FB257B0} = {43091528-9509-43CB-A003-9C5C11E96DD6}
|
{D789AEDB-EBDF-4450-8E8E-B4A03FB257B0} = {43091528-9509-43CB-A003-9C5C11E96DD6}
|
||||||
{0C81FC1C-5D2D-478A-9876-923A0C85EC2F} = {43091528-9509-43CB-A003-9C5C11E96DD6}
|
{0C81FC1C-5D2D-478A-9876-923A0C85EC2F} = {43091528-9509-43CB-A003-9C5C11E96DD6}
|
||||||
|
{86D93406-412A-4429-93B2-92AAD0407784} = {43091528-9509-43CB-A003-9C5C11E96DD6}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {7CA41ED3-2CED-40CC-AA21-28C3B42B1E86}
|
SolutionGuid = {7CA41ED3-2CED-40CC-AA21-28C3B42B1E86}
|
||||||
|
14
demo/Semi.Avalonia.Demo.Drm/App.axaml
Normal file
14
demo/Semi.Avalonia.Demo.Drm/App.axaml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<Application
|
||||||
|
x:Class="Semi.Avalonia.Demo.Drm.App"
|
||||||
|
xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:local="using:Semi.Avalonia.Demo.Desktop"
|
||||||
|
RequestedThemeVariant="Light">
|
||||||
|
|
||||||
|
<Application.Styles>
|
||||||
|
<!--<StyleInclude Source="avares://Semi.Avalonia/Themes/Index.axaml" />-->
|
||||||
|
<StyleInclude Source="avares://Semi.Avalonia/Themes/Index.axaml" />
|
||||||
|
<StyleInclude Source="avares://Semi.Avalonia.DataGrid/Index.axaml" />
|
||||||
|
<StyleInclude Source="avares://Semi.Avalonia.ColorPicker/Index.axaml" />
|
||||||
|
</Application.Styles>
|
||||||
|
</Application>
|
24
demo/Semi.Avalonia.Demo.Drm/App.axaml.cs
Normal file
24
demo/Semi.Avalonia.Demo.Drm/App.axaml.cs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
using Avalonia;
|
||||||
|
using Avalonia.Controls.ApplicationLifetimes;
|
||||||
|
using Avalonia.Markup.Xaml;
|
||||||
|
using Semi.Avalonia.Demo.Views;
|
||||||
|
|
||||||
|
namespace Semi.Avalonia.Demo.Drm
|
||||||
|
{
|
||||||
|
public partial class App : Application
|
||||||
|
{
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
AvaloniaXamlLoader.Load(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnFrameworkInitializationCompleted()
|
||||||
|
{
|
||||||
|
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||||
|
desktop.MainWindow = new MainWindow();
|
||||||
|
else if (ApplicationLifetime is ISingleViewApplicationLifetime singleView)
|
||||||
|
singleView.MainView = new MainView();
|
||||||
|
base.OnFrameworkInitializationCompleted();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
59
demo/Semi.Avalonia.Demo.Drm/Program.cs
Normal file
59
demo/Semi.Avalonia.Demo.Drm/Program.cs
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
using Avalonia;
|
||||||
|
using Avalonia.Dialogs;
|
||||||
|
using Avalonia.Media;
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
|
namespace Semi.Avalonia.Demo.Drm
|
||||||
|
{
|
||||||
|
internal class Program
|
||||||
|
{
|
||||||
|
// Initialization code. Don't use any Avalonia, third-party APIs or any
|
||||||
|
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized
|
||||||
|
// yet and stuff might break.
|
||||||
|
[STAThread]
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
var builder = BuildAvaloniaApp();
|
||||||
|
builder.With(new FontManagerOptions
|
||||||
|
{
|
||||||
|
FontFallbacks = new[]
|
||||||
|
{
|
||||||
|
new FontFallback
|
||||||
|
{
|
||||||
|
FontFamily = new FontFamily("Microsoft YaHei")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (args.Contains("--drm"))
|
||||||
|
{
|
||||||
|
SilenceConsole();
|
||||||
|
builder.StartLinuxDrm(args: args, card: "/dev/dri/card0", scaling: 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
builder.StartWithClassicDesktopLifetime(args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Avalonia configuration, don't remove; also used by visual designer.
|
||||||
|
public static AppBuilder BuildAvaloniaApp()
|
||||||
|
=> AppBuilder.Configure<App>()
|
||||||
|
.UseManagedSystemDialogs()
|
||||||
|
.UsePlatformDetect()
|
||||||
|
.With(new Win32PlatformOptions())
|
||||||
|
.LogToTrace();
|
||||||
|
|
||||||
|
private static void SilenceConsole()
|
||||||
|
{
|
||||||
|
new Thread(() =>
|
||||||
|
{
|
||||||
|
Console.CursorVisible = false;
|
||||||
|
while (true)
|
||||||
|
Console.ReadKey(true);
|
||||||
|
})
|
||||||
|
{ IsBackground = true }.Start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
22
demo/Semi.Avalonia.Demo.Drm/Semi.Avalonia.Demo.Drm.csproj
Normal file
22
demo/Semi.Avalonia.Demo.Drm/Semi.Avalonia.Demo.Drm.csproj
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
|
||||||
|
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Avalonia.Desktop" Version="11.0.0" />
|
||||||
|
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
|
||||||
|
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.0.0" />
|
||||||
|
<PackageReference Include="Avalonia.LinuxFramebuffer" Version="11.0.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Semi.Avalonia.Demo\Semi.Avalonia.Demo.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
18
demo/Semi.Avalonia.Demo.Drm/app.manifest
Normal file
18
demo/Semi.Avalonia.Demo.Drm/app.manifest
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<!-- This manifest is used on Windows only.
|
||||||
|
Don't remove it as it might cause problems with window transparency and embeded controls.
|
||||||
|
For more details visit https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests -->
|
||||||
|
<assemblyIdentity version="1.0.0.0" name="Semi.Avalonia.Demo.Drm.Desktop"/>
|
||||||
|
|
||||||
|
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||||
|
<application>
|
||||||
|
<!-- A list of the Windows versions that this application has been tested on
|
||||||
|
and is designed to work with. Uncomment the appropriate elements
|
||||||
|
and Windows will automatically select the most compatible environment. -->
|
||||||
|
|
||||||
|
<!-- Windows 10 -->
|
||||||
|
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
|
||||||
|
</application>
|
||||||
|
</compatibility>
|
||||||
|
</assembly>
|
46
demo/Semi.Avalonia.Demo.Drm/使用方法.txt
Normal file
46
demo/Semi.Avalonia.Demo.Drm/使用方法.txt
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
DRM启动步骤(Ubuntu18.04Server版本 虚拟机测试OK)
|
||||||
|
Avalonia官方参考文档:https://docs.avaloniaui.net/docs/next/guides/platforms/rpi/running-on-raspbian-lite-via-drm
|
||||||
|
|
||||||
|
1.Linux端运行命令
|
||||||
|
sudo apt update
|
||||||
|
sudo apt upgrade
|
||||||
|
sudo reboot
|
||||||
|
sudo apt - get install libgbm1 libgl1 - mesa - dri libegl1 - mesa libinput10
|
||||||
|
|
||||||
|
2.安装测试工具测试(出现一个彩色立方体说明环境安装完成)
|
||||||
|
sudo apt-get install kmscube
|
||||||
|
sudo kmscube
|
||||||
|
|
||||||
|
3.安装.net运行时(参考网址:https://learn.microsoft.com/zh-cn/dotnet/core/install/linux?WT.mc_id=dotnet-35129-website)
|
||||||
|
|
||||||
|
4.新建一个Avalonia项目,nuget里面添加Avalonia.LinuxFramebuffer包
|
||||||
|
|
||||||
|
5.添加StartLinuxDrm代码(不知道怎么添加看Semi.Avalonia.Demo.Drm项目代码)
|
||||||
|
|
||||||
|
6.发布程序到Linux(安装.net,怎么运行这些省略)
|
||||||
|
|
||||||
|
7.运行 ./Semi.Avalonia.Demo.Drm --drm
|
||||||
|
|
||||||
|
报错处理:
|
||||||
|
|
||||||
|
1.报错内容
|
||||||
|
Unhandled exception. Avalonia.Markup.Xaml.XamlLoadException: No precompiled XAML found for avares
|
||||||
|
://Semi.Avalonia/Themes/Light/Light.axaml (baseUri: avares://Semi.Avalonia/Themes/Index.axaml), m
|
||||||
|
ake sure to specify x:Class and include your XAML file as AvaloniaResource
|
||||||
|
解决方法:
|
||||||
|
如果使用Semi发布文件不要裁剪,如果裁剪会报错
|
||||||
|
|
||||||
|
|
||||||
|
2.报错内容
|
||||||
|
Unhandled exception. System.TypeInitializationException: The type initializer for 'SkiaSharp.SKImageInfo' threw an exception.
|
||||||
|
--->System.DllNotFoundException: Unable to load shared library 'libSkiaSharp' or one of its dependencies.In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibSkiaSharp: cannot open shared object file: No such file or directory
|
||||||
|
at SkiaSharp.SkiaApi.sk_colortype_get_default_8888()
|
||||||
|
at SkiaSharp.SKImageInfo..cctor()
|
||||||
|
解决方法:
|
||||||
|
Linux命令行安装一下 apt-get install -y libfontconfig1
|
||||||
|
参考网址:https://github.com/mono/SkiaSharp/issues/509
|
||||||
|
|
||||||
|
3.报错内容
|
||||||
|
Permission denied
|
||||||
|
解决方法:
|
||||||
|
sudo chmod +x ./Semi.Avalonia.Demo.Drm
|
Loading…
x
Reference in New Issue
Block a user