Flash在DirectX中的绘制
来源:互联网 发布:java上传图片接口 编辑:程序博客网 时间:2024/04/28 13:20
这里使用的是之前我说过的OLE控件在Direct3D中的渲染方法, 自己不进行swf的解析, 这不现实.
- 前提条件: COM编程, OLE编程, DirectX编程, ActionScript/Flash(可选).
- 创建一个ShockwaveFlashObjects::IShockwaveFlash的对象
- 实现一个IOleClientSite来做为IShockwaveFlash的容器
- 绘制
- 通过OleDraw来把GDI的像素数据绘制到DC上(IShockwaveFlash是一个IViewObject)
- 把DC的像素数据拷贝到D3D的Texture上. 中间涉及像素格式的内存操作, 需要明白图像数据的内存格式.
- 半透明支持(可选): 如果不需要半透明支持的话, 其实可以直接OleDraw到Texture的DC上, 不用再多一次拷贝. 但是有时候不得不用(像UI), 可以这参考Transparent Flash Control in plain C++, 用黑色背景和白色背景绘制两次, 比较两次结果 的Red通道计算出相应的Alpha值.
- 脏矩形优化: 如果每帧都进行整个纹理的更新, 你会发现CPU占用率相当高. 实际上ActiveX本身是有这个优化的, 只不过我们需要自己找出这个矩形. 通过实现IOleInPlaceSiteWindowless::InvalidateRect可以得到相应的"脏"矩形区域, 然后只需要更新相应的纹理区域就可以让效率达到商用的标准.
- 事件响应
- 幸运的是, IShockwaveFlash是一个IOleInPlaceObjectWindowless对象, 那么我们就可以直接使用IOleInPlaceObjectWindowless::OnWindowMessage进行消息的处理. 注意鼠标坐标的转换和键盘输入焦点的控制.
- 脚本交互, 参考MFC的思路:
- C++调用AS: IShockwaveFlash::CallFunction/SetVariable
- AS调用C++: 需要实现ShockwaveFlashObjects::_IShockwaveFlashEvents, 可以监听fscommand和ExternalInterface.call两种调用方式.
关于具体实现, 已经有人先于我完成了, 所以请直接参考Hikari. 接下来再把IE搞定
- Flash在DirectX中的绘制
- 在DirectX中绘制立方体总结
- DirectX 绘制
- DirectX 3D_实践之DirectX3D中的文本绘制
- Directx在visual studio2010中的配置
- Directx在visual studio2010中的配置
- Sin Cos 在directx中的实现
- 使用directx绘制三角形
- directX绘制球体
- FLASH在HTML中的层级
- flash在html中的种种
- Directx绘制正方体 +灯光 源代码
- DirectX编程开发准备工作 ---Directx SDK安装,及在2010中的配置
- 【阅读笔记之五】《DIRECTX.9.0.3D游戏开发编程基础》Direct3D中的绘制
- Microsoft DirectX SDK (March 2009)在VS 2008中的配置
- GDI+在绘制验证码中的使用
- 了解在Flash中的编程工作
- flash控件在VC.net中的应用
- SQL Server 2008新特性——策略管理
- dotnet 网络编程 tcp
- Ajax很简单(jsp例子)
- MyQQ.cpp: 非完全版本
- SQL Server复制表sql语句
- Flash在DirectX中的绘制
- awk
- MyQQ.cpp: 非完全版本
- windows server 2003 域策略实现软件分发
- 哎 没分了
- net-snmp代码分析之fd_event_manager.c
- eclipse下SQLServer2005配置总结
- TCP三次握手协议
- Asp.net页面的生命周期