当前位置: 首页 > news >正文

Flash在DirectX中的绘制

这里使用的是之前我说过的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搞定

相关文章:

  • 在 SharePoint2010 中使用 XML 查看器取得其他站点的内容列表
  • C实现关机
  • 项目管理实践教程
  • Spring Security学习二
  • 动态创建数据库实例
  • OpenGL FAQ
  • 在.NET环境中实现每日构建--NAnt篇
  • 刚刚达内的宣讲会(碰到微软经典笔试题)
  • 中国软件创新产业弯道超车
  • AjaxControlToolkit学习笔记
  • 老老实实做好备份才是硬道理
  • poj2262筛子法素数打表
  • 离职,我们应该做什么?——Leo网上答疑40
  • SQL Server字符串处理函数大全
  • 不用写成 if @i=1 OR @i=2 OR ... 这么蠢
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【技术性】Search知识
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 345-反转字符串中的元音字母
  • CSS3 变换
  • EOS是什么
  • Java小白进阶笔记(3)-初级面向对象
  • Just for fun——迅速写完快速排序
  • Mybatis初体验
  • Octave 入门
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • React as a UI Runtime(五、列表)
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • TypeScript迭代器
  • 分类模型——Logistics Regression
  • 机器学习学习笔记一
  • 让你的分享飞起来——极光推出社会化分享组件
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 在weex里面使用chart图表
  • $NOIp2018$劝退记
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C#)获取字符编码的类
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (SpringBoot)第七章:SpringBoot日志文件
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (十) 初识 Docker file
  • (图)IntelliTrace Tools 跟踪云端程序
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (译)2019年前端性能优化清单 — 下篇
  • (转)mysql使用Navicat 导出和导入数据库
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • ****Linux下Mysql的安装和配置
  • *p++,*(p++),*++p,(*p)++区别?
  • .NET 8.0 发布到 IIS
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET 跨平台图形库 SkiaSharp 基础应用