Eto: 支持 OpenGL 渲染控件。

创建于 2012-07-17  ·  23评论  ·  资料来源: picoe/Eto

简而言之:是否计划与 OpenTK 结合使用任何类型的 OpenGL 渲染控制?

enhancement help wanted

最有用的评论

eto 的 OpenGL 控件有任何更新吗?

所有23条评论

没有特别计划,但很容易做到。 看起来 OpenTK 是 MIT 许可的,所以它很适合 Eto.Forms。

但是可能会有一些复杂性,因为您必须根据目标平台使用不同的引用来编译您的应用程序,除非 Eto.Forms 有一个围绕 OpenTK 的包装器,我不一定喜欢这样做。

我观察到您有用于 Windows、Gtk 和 Mac 的单独平台 DLL,这不能作为放置平台特定代码的位置。
要使用 OpenTK,您需要引用一个通用平台独立 OpenTK.dll 和一个特定平台,其代码可以添加到现有 Eto.Platform.*.dll 中,因为这些很可能已经包含必要的引用。

我一直在修改和剥离在https://github.com/hultqvist/opentk 上找到的 OpenTK 的一个分支
但请注意,fork 有一些重大修改,使其与原始 Opentk 项目不兼容(主要使用列向量)。

在这方面,我所谈论的部分仍然没有改变,特别是分别用于 Windows 和 Gtk 的 OpenTK.GLControl 和 OpenTK.GLWidget 项目,我想可以为 Mac 制作类似的项目,但目前唯一的实现来自原始OpenTK 游戏窗口类。

确实,这将是一种方法。

我看了一点 - 不幸的是 MonoMac 使用内置于 MonoMac.dll 中的自定义 OpenTK .. 我们可能不得不围绕整个 API 创建一个包装器,这将是不幸的

此处 eto 的 OpenGL 控件已取得进展:

https://github.com/bchavez/SharpFlame/tree/eto/source

此 OpenGL 控件是否处于可用状态?

我还没有尝试过,所以我不确定,虽然我看过它在 SharpFlame 中工作的截图.. @bchavez ,你有关于你的 OpenGL 控件状态的更多信息吗?

  • Eto.Gl - _Eto Control_,但我还没有真正将 API 正式化。
  • Eto.Gl.Windows - 特定于平台的 GL 应该在使用Eto.Gl Windows 上按原样工作。
  • Eto.Gl.Linux - 由于一些新的eto更改,Linux 上特定于平台的 GL 需要更新。 应该不难更新,只是没有足够的时间。
  • Eto.Gl.Mac - 有点困难的_gotcha_ 问题我仍然需要解决。

Mac/OSX 上的一个主要问题是,默认情况下,在同一应用程序中创建的新 GL 上下文不是资源共享的。 这意味着,您会在每个表面获得一个独立的 GL 资源上下文。 IE:如果您的应用程序使用多个 GL 表面,您将需要为每个表面加载n次的纹理,占用n倍的纹理内存量。

这种行为在 Linux 和 Windows 上是不同的,默认情况下,新的 OpenGL 上下文是资源共享的(在同一个应用程序中)。 因此,如果您在同一个应用程序中有多个 GL 表面(在 Linux 或 Windows 上)并加载纹理,则您只加载一次纹理资源,而不是每个表面n次。

我为使其在 Mac 上运行而进行的一些黑客尝试是MacGLView1-7.cs
https://github.com/bchavez/SharpFlame/tree/eto/source/Eto.Gl.Mac

最终,我(或其他人)将确定问题,以便跨平台行为保持一致。 只是没有足够的时间自动取款机。

该问题的 OSX 文档在这里:

https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/OpenGL-MacProgGuide/opengl_contexts/opengl_contexts.html

澄清一下,“GL 上下文”是指 GL 资源上下文。 (上面链接中描述的共享对象状态)。

感谢您的澄清。 我已经尝试让它在 Windows 和 Linux 上运行。
Windows 在 Wpf 上工作正常,但在带有 Gtk#2 的 Linux 上它不想工作: http :
如果你想看看它,这里是代码: https :

我发现它与文本渲染有关。 如果您在布局上有一些其他控件来呈现文本,它会立即崩溃。 如果该控件的文本为空,则不会崩溃。

哇,这很奇怪。

@本克莱特

我遇到了同样的问题。 如果您仍然没有遇到修复程序,则必须将其作为 gtk 程序的第一行:

C# [STAThread] public static void Main(string[] args) { //this MUST be the first line in the program or any text + the opengl window will cause it to segfault OpenTK.Toolkit.Init (); ....

这是因为 x_multithreading 或其他一些古怪的东西,所以 OpenTK 必须在 gtk 初始化之前进入那里。 严格来说,这不是您必须做的第一件事,而是很早。

非常感谢您的帮助,我回家后一定要试试看是否可行。

eto 的 OpenGL 控件有任何更新吗?

看起来很有希望: https :

关于。 etoViewport,它可以使用 WPF 和 GTK3 支持,但是 GTK3 使我不知道如何进行 - 如何设置所需的开罗上下文并不明显(对我而言)。

Duno etoViewport 是如何做到的,但 Gtk 3 有一个用于 OpenGL 渲染的 GLArea 小部件: https :

这个有更新吗?

@feliwir etoViewport 目前至少适用于 WPF、WinForms 和 macOS。 我不确定 GTK 的状态。

GTK 正在我的 VirtualBox/CentOS 7.x 和 VMWare/Linux Mint 下进行测试。 驱动程序可能有些奇怪,尤其是在 VirtualBox 下,OpenGL 控件似乎浮动在所有其他窗口之上。 不过,我认为这可能是 VirtualBox 中的一个错误,因为它在 VMWare 中看不到。

但是,没有为 etoViewport 实现 GTK3。

@philstopford我不喜欢对 OpenTK 的依赖,有没有计划删除它/允许自定义回调来创建上下文?

很抱歉你不喜欢它,但我不明白为什么。 如果当前的方法不适合您,欢迎使用补丁。 我真的没有自己改变它的计划:OpenTK 一直是一个可靠的主力军。 早期的 OpenGL 工作,我使用了 SharpGL,然后该项目被放弃了。 相比之下,OpenTK 是积极维护和多平台的。

移至: https :

@cwensley这可以关闭。

此页面是否有帮助?
0 / 5 - 0 等级