关于绘图----我就是要突破极限(求老鸟帮忙).

baili35 2011-08-02 03:50:01
背景最近公司几个嵌入式产品都要重新做UI,所以自己打算开发一套DUI,操作系统为wince4,5,6.使用颜色格式RGB565.模仿MVC架构使用xml

配置界面,开发的时候只用关系逻辑.

问题描述经过测试公司的几个wince产品的像素格式均为RGB565格式的.我在一个产品上做了一个有关贴图的试验.如下:

硬件环境:CPU:Vortex86DX x86架构800mhz
带独立显卡.
显示屏:640*480 60hz
软件环境:
操作系统wince6.0无DDRaw和OpenGL支持.

使用兼容位图贴图速度:98kCPU周期约0.12ms.
使用RGB565的DIB进行贴图时间为:8370kCPU周期,约10.2ms
进行640*480*2字节的内存拷贝用时为1362kCPU周期月1.6ms

做1024次绘图加贴图(绘图内容先填充整个位图然后绘制一个实心圆)
绘图用时 贴图用时
使用兼容位图: 2134ms 2198ms
使用RGB565内存数据绘制: 3964ms 11452ms

从实验数据看出现在的主要瓶颈已经是贴图了.


问题来喽查找资料说使用GAPI可以直接访问显存,可惜我通过做实验GAPI不能使用,在者我一直做wince上层应用对于如何方位显存,控制帧缓冲的

填充等底层操作一无所知,还有设备已经定型或者是购买的不能够重新定制添加DDraw,在此求各位前辈支招,解决快速贴图的瓶颈.
...全文
222 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
baili35 2011-08-10
  • 打赏
  • 举报
回复
努力学习流驱动中~~~~~~~~~~~
baili35 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 harktrip 的回复:]
這問題不難~很簡單.

不過我不是老鳥,所以沒資格幫忙了
[/Quote]

我入行没多长时间,只要会这个的对我来说就是老鸟了.
harktrip 2011-08-09
  • 打赏
  • 举报
回复
這問題不難~很簡單.

不過我不是老鳥,所以沒資格幫忙了
baili35 2011-08-07
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 firefly123 的回复:]
这种配置在640*480*16位下130帧每秒左右是一点问题都没有的,而且还不用显存,用了也浪费。有一些库直接可以做到,比如SDL,我搞游戏的,用过不如这种配置的,也达到640*480*16bit 130帧
[/Quote]
设备的使用兼容位图贴图的速度可以达到8333fps,这个是理论上可以,但是显示器只有60hz,但是我有多个设备,不同的,而且所有的绘图是用cpu完成并不是GPU,绘制完了在内存中,现在就是要解决内存送显存的速度,这个送一帧的速度是60fps左右(使用RGB565像素格式).如果生成速度在用点时间,对于另外一个设备来说这个就是要命的.另外一个设备cpu200mhz,没有显存,没有gpu,只有32m内存,操作系统wince5.0.
心灵彩虹 2011-08-07
  • 打赏
  • 举报
回复
显存和内存要足够大才行,如果贴图比较大,一般设备都会挂掉。
firefly123 2011-08-06
  • 打赏
  • 举报
回复
这种配置在640*480*16位下130帧每秒左右是一点问题都没有的,而且还不用显存,用了也浪费。有一些库直接可以做到,比如SDL,我搞游戏的,用过不如这种配置的,也达到640*480*16bit 130帧
baili35 2011-08-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 aaa_tnt 的回复:]
貌似没什么办法了,CE6 也去掉了GAPI的支持。。
似乎楼主只能做一个流驱动。。来映射显存buffer。。写屏了。
[/Quote]

如何确定要映射那部分内存的,求解.
AndyZhang 2011-08-04
  • 打赏
  • 举报
回复
我说是搜到 pkfuncs.h这个文件了,网速太慢,编辑不了我的帖子了,所以又发了一个
AndyZhang 2011-08-04
  • 打赏
  • 举报
回复
这个我在mobile目录下搜到了,其实也是wince5.0内核,你搜索一下肯定有。

感觉这个应该问问底层,驱动什么的。不了解很难做好上层,不懂上层,做好下层也不容易,现在需要综合性人才啊。。。。
Ei 2011-08-03
  • 打赏
  • 举报
回复
貌似没什么办法了,CE6 也去掉了GAPI的支持。。
似乎楼主只能做一个流驱动。。来映射显存buffer。。写屏了。
当我遇上-你 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 baili35 的回复:]
引用 4 楼 northcan 的回复:
我指的是wince6的情况。
pkfuncs.h
没有这个文件可能是你的sdk没有包含某些组件。
我的sdk里面是有这个文件的。

wince5操作物理地址比wince6更容易。


加载一个内核态的流驱动,是否要写一个驱动,是在定制NK的时候做还是在NK定制好后做呢,是否还需要自己加载这个驱动呢,我只做应用层对于驱动开发这里的不会啊.
[/Quote]
驱动写好后,在应用层动态加载也可以的,找你们搞底层的写个呗
northcan 2011-08-02
  • 打赏
  • 举报
回复
不过这都要在完成之后,重新定制NK。
需要用到Platform Builder工具。
这个方法肯定可行。
有没有其他更方便的途径。
只能谷歌了,或者看看其他坛友的答案。
northcan 2011-08-02
  • 打赏
  • 举报
回复
我觉得要在底层做。
如果不做流驱动的话。
应该可以在OALIOCTL库导出的IOControl函数中
加一个映射地址的case
然后应用中通过KernelIoControl控制。
baili35 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 northcan 的回复:]
我指的是wince6的情况。
pkfuncs.h
没有这个文件可能是你的sdk没有包含某些组件。
我的sdk里面是有这个文件的。

wince5操作物理地址比wince6更容易。
[/Quote]

加载一个内核态的流驱动,是否要写一个驱动,是在定制NK的时候做还是在NK定制好后做呢,是否还需要自己加载这个驱动呢,我只做应用层对于驱动开发这里的不会啊.
northcan 2011-08-02
  • 打赏
  • 举报
回复
我指的是wince6的情况。
pkfuncs.h
没有这个文件可能是你的sdk没有包含某些组件。
我的sdk里面是有这个文件的。

wince5操作物理地址比wince6更容易。
baili35 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 northcan 的回复:]
应用程序申请一块内存
用VirtualCopyEx()将其映射到显存
这个函数和VirtualCopy类似但有不同
它需要两个进程Handle,一个是你的应用,一个是NK。
源进程是NK
可以加载一个内核态的流驱动
应用程序通过DeviceIoControl控制流驱动调用VirtualCopy进行映射
之后就可以在应用程序中,直接写显存。
[/Quote]
我的操作系统是主要是wince5和wince6,在wince6的sdk中并不包含pkfuncs.h这个单元,所以VirtualCopyEx这个函数只能手动从动态链接库导出.但是wince5怎么办,我这套界面库有点不通用了.而且可以访问显存了,如果我的程序运行在非全屏模式下怎么办呢?
northcan 2011-08-02
  • 打赏
  • 举报
回复
应用程序申请一块内存
用VirtualCopyEx()将其映射到显存
这个函数和VirtualCopy类似但有不同
它需要两个进程Handle,一个是你的应用,一个是NK。
源进程是NK
可以加载一个内核态的流驱动
应用程序通过DeviceIoControl控制流驱动调用VirtualCopy进行映射
之后就可以在应用程序中,直接写显存。
baili35 2011-08-02
  • 打赏
  • 举报
回复
如果帮助解决了我的问题,当我完成UI库的开发后,送上头文件+lib(R版)+使用文档+本贴积分.

19,519

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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