关于DirectUI的绘制

一入程序深似海 2013-11-14 11:22:53
先说点闲话:
小弟北漂,下班点时候,人堵。
6点下班,8点左右回家吧,这中间的时候,就来重复造轮子了。(别喷我)

其实起因还是有的,我就职于一家MMO游戏公司,公司算是成功吧,起码发工资的日子不愁被延迟。
我做客户端的,觉得公司游戏里面的界面的实现,接口什么的,用着都很爽。

当下比较出名的directui,应该算是duilib吧。我看了一下源码,觉得代码不是很好懂(我去年毕业,可能对读代码这属性点加少了。)。于是就萌生了自己写一个directui的念头。

既然要做,就做个牛逼的哈。我的计划是库的使用者,不用关心里面的窗口,控件是怎么实现的。只需要知道窗口、控件提供的接口,就能进行工作。

e.g.
IWnd* wnd = _WndMng->FindWindow(L"main_wnd");///< 把wnd和id为“main_wnd”的窗口绑定起来
wnd->ShowWindow(true);///< 显示窗口
wnd->SetPosition(pt.x, pt.y); ///< 设置窗口位置

IButton* btn = InitControl(wnd, L"btnOK"); ///< 把btn和wnd窗口下的id为btnOK的按钮控件绑定起来
btn->Enable();
btn->ShowWindow(true);
btn->SetToolTips(L"我是OK按钮");
……


我就不一一列举了。
库完成之后,会打算开源。看官门到时候可以看看里面的设计和实现。

在说一下用这个库,写的应用程序的初始化过程:
我的设计思路是:通过xml来配置layout,在程序加载的时候,读取所有的layout,把里面的窗口,控件解析,并且new出来(当然会有内存池实现),交给自己写的一个窗口管理器来管理。没有使用类似于MFC的BEGIN_MESSAGE_MAP等方式来声明回调。自己写定义了一个closure,包含了窗口类的对象和回调的函数的地址,达到对鼠标,键盘等消息回调的目的。每个窗口会捕捉到消息,但是不会处理,而是转换成自己定义的消息,塞进窗口管理器的消息队列,然后由窗口管理器来分发消息,最后当然是各个控件来处理消息。

这上面的大部分已经写完了。只剩下窗口的绘制部分。
所以一直在琢磨着,用D3D或者D2D来绘制。

这到了我最疼的地方了。
虽然我是做游戏的,可是我没有系统地学习过图形学。游戏引擎的渲染绘制部分的工作,基本都交给引擎组了。作为引擎的用户,我只能简单地 call,call,call……

一个应用程序,只能初始化一个D3D对象,但是应用程序的UI不同于游戏,只需要(只有)对一个窗口渲染绘制就OK了,对于有多个窗口的应用程序,怎么能让这个D3D对象被多个窗口所共享?

据说SWAP CHAIN可以达到目的。但是实在是不会用。各位有没有好的资料?
对D3D熟悉的猿友给点解决方案提示?
...全文
284 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
redui 2013-11-15
  • 打赏
  • 举报
回复
你们都是做游戏的,请教一下同事不就成了,比在外面瞎问有效得多,D3D这玩意儿,一时半会入不了门,看书看DEMO看文档,然后才会有问题去问别人
  • 打赏
  • 举报
回复
引用 7 楼 WJN92 的回复:
不就是用精灵去渲染吗?
DX Sprite? 有没有点文档资料哇。。
WJN92 2013-11-15
  • 打赏
  • 举报
回复
不就是用精灵去渲染吗?
  • 打赏
  • 举报
回复
引用 5 楼 qq6648208281 的回复:
路过凑热闹 我也晒一个
哥,咱能不晒图么,咱求技术。。你这个是用gdi渲染的,还是dx显然的?
  • 打赏
  • 举报
回复
引用 10 楼 redui 的回复:
你们都是做游戏的,请教一下同事不就成了,比在外面瞎问有效得多,D3D这玩意儿,一时半会入不了门,看书看DEMO看文档,然后才会有问题去问别人
引擎组在另外一个工作间,要是能问到,早就去问了哈。 想系统的学DX,问别人也问不来的。请教只能解决当前问题,没有基础也是浮沙筑楼。
  • 打赏
  • 举报
回复
引用 3 楼 CometNet 的回复:
[quote=引用 2 楼 CKnightx 的回复:] 我发觉,当下没有我觉得用的很爽的directui
我一直信奉一个观点: 自己写的未必是最好的,但一定是最适合自己的. 我平常也不使用第三方界面,就自己写,比如下面这个: [/quote] 嗯嗯, 我就想写一个自己用着爽的。
邓学彬 2013-11-14
  • 打赏
  • 举报
回复
引用 2 楼 CKnightx 的回复:
我发觉,当下没有我觉得用的很爽的directui


我一直信奉一个观点:
自己写的未必是最好的,但一定是最适合自己的.
我平常也不使用第三方界面,就自己写,比如下面这个:

  • 打赏
  • 举报
回复
引用 1 楼 CometNet 的回复:
写DirectUI界面库是庞大的工程,楼主精神可嘉,预祝楼主早日完成.
额,比什么都不做的好啊。 而且我发觉,当下没有我觉得用的很爽的directui
Yun__ 2013-11-14
  • 打赏
  • 举报
回复
路过凑热闹 我也晒一个
邓学彬 2013-11-14
  • 打赏
  • 举报
回复
写DirectUI界面库是庞大的工程,楼主精神可嘉,预祝楼主早日完成.

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧