gpt4 book ai didi

c++ - 从 C++ dll 中创建绘图 Canvas 的最简单方法?

转载 作者:太空宇宙 更新时间:2023-11-04 12:28:23 25 4
gpt4 key购买 nike

场景是这样的:有一个程序加载我的 .dll/.so 并从其中调用一个函数,可能多次,每次都期望一个不同的状态指针。它稍后在对 dll 的其他调用中使用不同的状态。 (这是一个游戏 AI,如果你需要上下文的话;每个状态都是一个 AI 玩家。)

我想要的是一种为每个状态(用于可视化、调试等)创建 Canvas 窗口的跨平台方式。我尝试了 wx,但搁置了,因为它看起来并不容易根本。是否有任何简洁的小型库可以做到这一点,或者我应该只使用 WinAPI/X...?

编辑:假设我不能修改主机程序。

最佳答案

Qt根据我的经验,它比 Wx 更易于设置和驱动。它也是非常跨平台的。

如果你想从你的 DLL 函数中渲染一些图形而不传递任何指向 QImage 或 QWidget 类型的指针,可能要做的事情是使用 OpenGL。您的 DLL 应该只渲染到当前的 OpenGL 上下文,这是全局状态并且可以在 DLL 外部设置(可能使用 QGLWidget)。

更新:啊,我刚刚注意到您的编辑无法修改主机代码。这是一个问题:您创建的任何窗口确实需要插入主机应用程序的事件循环才能正常工作(例如,在暴露/调整大小时接收 WM_PAINT)。在 win32 中,任何旧代码(例如您的库)当然可以只创建窗口并在有机会时使用 GDI 绘制其内容,但是一般的窗口行为可能会被破坏(它可能根本无法与 Vista 的双缓冲一起工作;我没试过)。在这种情况下,我通常发现最简单的方法就是简单地转储图像文件,然后使用所选的图像查看器进行查看。恕我直言,这实际上比“实时”窗口对调试更有用,因为您可以前后移动、放大、应用图像增强来突出显示各种问题、与之前运行的回归测试等进行比较等(如果您真的想要“实时” View ,编写一个图像显示器来监视目录中的新图像,或者通过命名管道或其他东西流式传输它们)。

关于c++ - 从 C++ dll 中创建绘图 Canvas 的最简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/738156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com