岁月流转,往昔空明

C++博客 首页 新随笔 联系 聚合 管理
  96 Posts :: 3 Stories :: 340 Comments :: 0 Trackbacks

置顶随笔 #

SoftArt是一款光栅化的软件渲染器,设计目标是达到Direct3D 10/11的核心功能的实现。我们的设计目的主要包括以下几点

  • 一个高度可移植的光栅化图形管线的软件实现
  • 图形硬件工作原理的展现和教学
  • 为下一代Many Core处理器架构的计算设备提供高性能的图形绘制能力
  • 提供在GPU一类的流处理器上难以实现,但在Many Core架构的设备上有着显著优势的Features
  • 比图形API更加易于使用的接口
  • 与复杂的渲染技术(如辐射度和光线追踪等)相结合的可伸缩的渲染体系,研究可以提供速度-质量相均衡的渲染架构


SoftArt的接口重点参照了DX10的设计。
以流水线划分Stage;每个Stage及其相关设施的接口,均采用了Object-Oriented的设计风格。
这种设计与D3D9和OGL的状态机风格的设计相比更易于使用,同时也降低了流水线前后级的耦合,对于优化或扩展都是有利的。

目前,SoftArt已经具有了完整的D3D9的流水线级,并有了基本的Demo。
在未来,SoftArt将在维持内核稳定的情况下,使用新的扩展,提供先进的图形技术支撑。
同时,我们还将尝试着将一些不易在GPU上实现的算法,以扩展的形式在SoftArt中实现出来,以期提供高于图形API的表现和特性。

SoftArt在近阶段的主要工作包括:

  • Rasterizer的优化
  • SoftArt Shader Language语言特性设计及编译器实现,为SoftArt提供文本化的Shader Language
  • MSAA,并提供可定制的Sampling Pattern(2x 和 4x,目前尚有Bug)
  • EWA-based Anistropic Filtering
  • 以扩展形式提供的Geometry Shader,Hull Shader和Tesselassion Shader
  • 并行优化(持续优化中)
  • Intel SCC的移植
  • 特性及性能的演示用例
  • 文档撰写 (已经有成员负责此事)


目前,SoftArt已经作为一个开源项目发布在http://code.google.com/p/softart上,最新的代码在svn中。
所有代码除特殊声明外,均为GPL 2协议,您可以在协议许可的范围内自由下载或使用。

如果发现了软件的缺陷,或者有任何好的意见和建议,您可以在项目管理页面上留言,或者联系作者
wuye9036@gmail.com
minmin.gong@gmail.com
我谨代表项目全体成员及用户,对您为本项目的发展做出的独一无二的贡献表示敬意和感谢!


作为一款基于GPL2协议的开源光栅化渲染器,SoftArt的目的当然不仅仅是软件产品那么简单。
我们也希望以SoftArt为基础,建设一个充满智慧与活力的社区。
这个社区里,每一个智慧的闪光,都能够给其他人以启迪;每一个智慧的闪光,都能够使SoftArt向更好的方向迈出一步。

随着SoftArt框架的完成,SoftArt复杂而有挑战性的特性扩充工作已经摆在面前。
无论你

  • 是喜欢Irregular Z Buffer一类不走寻常路的硬件架构技术,期望实现自己的硬件架构;
  • 还是痴迷于运用最新的图形学理论,制作让人眼花缭乱,叹为观止的Demo;
  • 还是希望将SoftArt与商业产品相结合,使其想用户所想,为用户所不能为;

我们都以100%的热忱欢迎您。

为了维持SoftArt核心框架的稳定性,保证代码质量,我们计划将全部的Project Members分为核心组开发者组两部分。

核心组
暂时由 空明流转(wuye9036@gmail.com) 和 Minmin.Gong(minmin.gong@gmail.com) 组成,主要负责架构设计,Shader Language语言标准的制定,SoftArt内核的开发,设计文档和接口约定的撰写,以及主分支的维护工作。

开发者组将按照工作内容大致分为三种:

  • 文档组:主要负责注释和文档的撰写工作等
  • 编译器组:负责编译器Host特性和Language Bridge的设计和扩充,编译器维护,性能调优等
  • 扩展组:撰写设备或辅助库扩展,如Geometry Shader的Host代码,数学库等

现有开发组成员均具有6-12年不等的开发经验,多数在业内著名企业担任主要开发人员或技术负责人的职位。

我们对开发组成员充分信任,开发组成员将在各自的分支上完成开发工作,在您工作的分支上,您享有完全的写权限。
我们将按期进行所有分支修改的Review工作,并邀请您参与到Review中来,您既是分支的作者,也是其他分支的审阅者。
如果您的修改通过了Review并采纳到主分支中,我们希望能在您的协助下,将您对SoftArt的所思,所想,所为,原原本本的融入到SoftArt主分支中,令它如您所想般的成长。
同时,核心组将会视情况,组织线上或线下的技术交流活动,与大家一起交流技术心得、分享管理经验。当然,也会分享快乐的人生。

如果您希望加入我们这个团队当中,为我们的团队,为SoftArt提供您宝贵的支持,请您准备好您的以下资料

  • ID:常用的ID,最好包括真实姓名
  • Google Account:如果没有,可以申请一个。因为我们的SVN Repository是建立在Google Code上的)
  • 联系方式:IM(QQ,MSN,GTALK)和Email,有手机最好
  • 自我介绍:包括擅长的技术啦,项目经验啦,闲扯也可,呵呵
  • 希望参与的工作
  • 其他要求:唔。。。随便什么要求


发送至邮箱 wuye9036@gmail.com,或在此站点以站内信的方式发送与我。我将尽可能的与您联系并面议。


我们真诚欢迎您的参与,并对您的加盟,表示真心的感谢和由衷的期待!

posted @ 2009-12-07 10:31 空明流转 阅读(1533) | 评论 (15)编辑 收藏

2010年8月23日 #

明拜之,请曰,“简报可乎?”曰:“可。”

咳咳。最近由于SoftArt的几个参与人员工作都比较繁忙,因此进度上比较松散。但是大体上,SoftArt一直是按照预先想好的计划在进展。为了让大家知道SoftArt的开发进展,同时也是我们开发人员自己的备忘,我们在商议后,决定以简报的形式,不定期地将SoftArt的变化和进展及时地呈现出来。

简介

本简报主要总结了09年11月份以来SoftArt的变更情况。

对于SoftArt来说,09-10年度是非常重要的。在这一年中,尽管SoftArt并没有加入多少新的特性的加入,但是架构、性能都经过了持续性的优化。

在Graphics方面,Minmin为SoftArt撰写了全新的光栅化算法。新的光栅化算法与Larrabe的细分方法类似。这一算法在并发能力上有很明显的优势。尽管在目前性能上与上一版的扫描线算法相对弱势,但是经过Minmin的辛苦工作,这一弱势已经逐步的缩小了。就目前而言,我们认为该算法仍然有很大程度的提升空间。

同时,纹理单元也经过了大量的SSE优化,目前的纹理单元效率已经远远超出最初我为之撰写的版本。

经过一段时间的调优之后,目前程序的瓶颈主要集中在裁切和顶点变换上。已经朋友为我们提出了非常好的建议,接下来这也是我们工作的重点之一。

当然,根据估计,在经过一段时间的调整后,这些问题一定会得到解决的。我们估计最终SoftArt的瓶颈将主要集中在两个地方,一个是IO,一个是Shading部分。目前我们只是使用了简单的shading code,相信在shading code复杂之后,瓶颈会在很大程度上有所转移。

对于IO部分的瓶颈主要由纹理和后备缓冲产生。对于现代图形算法而言,纹理又是重中之重。没有特殊纹理单元的CPU在这一点上实在是吃了大亏。尽管我们在Cache Hit Rate及消除Function Call上下过一定的功夫,并使用了SSE加速了双线和Mipmap的纹理插值计算,但是效果仍然达不到我们的预期。一旦引入各向异性过滤,可以预见,在这一部分,还需要我们投入大量的精力来研究并解决这一问题。

但是由于C++ Shader Code在SIMD特性上的限制,目前我们并没有设计并实现更加复杂的Shader。这一切都有待SASL(SoftArt Shading Language)编译器完成之后才能。Minmin为SASL与渲染器连结的Host API部分撰写了完整的Specification(神人啊,真的是做什么都可以)。尽管目前这一部分在描述上比较简略,但是与DX11相似,相信大家一定可以比较容易的接受这套API。

在编译器方面,主要有Ye负责。目前的编译器各个阶段的接口以及语言特性已经基本成熟。语义和代码生成部分也在有条不紊的开展。在编译器设计期间,得到了Zihan Chen在技术上的大力支持,在此特别表示感谢。

变更清单

Nov 01,2009 – Nov 29, 2009 (r1 - r10) 此阶段的工作主要是将原先在sf.net上的项目,移动到Google code上,并对工程进行了一定的调整,同时移除了一些编译器警告。

Dec 01,2009 – Dec 09,2009 (r11 - r29) 此间,Minmin为现有的C++ Shading Code的接口进行了重构,修复了一些Bugs,并进行了一部分的优化工作。

Dec 10,2009 – Feb 08,2010( r30 – r65) Minmin为SoftArt的顶点和光栅化提供了并行能力。光栅器以Block为粒度对三角形并行光栅化。

Dec 09,2009 – Feb 21,2010( r27 – r66 ) Ye将SASL的分析器由Spirit 1.8移植到2.1

posted @ 2010-08-23 18:19 空明流转 阅读(1287) | 评论 (1)编辑 收藏

2010年6月24日 #

     摘要: 呃,纪念一段生活,与技术没什么关系,不过还是想发在首页TAT  阅读全文
posted @ 2010-06-24 23:13 空明流转 阅读(1824) | 评论 (14)编辑 收藏

2010年6月22日 #

Python写的。有哥们儿说,Perl多好,一行就OK了,我囧。我不会那么高深的玩意儿,就只好写的烦一点。大bug没有,小bug肯定是有的,凑合着用吧。反正是脚本的,不满意的同鞋可以慢慢改。。。

有图有真相

image

好吧,softart可怜兮兮的才15K行代码,有一半以上都是叛叛贡献的了可能。这里的统计还包括了一部分的py代码。

猛点我下载脚本

posted @ 2010-06-22 01:18 空明流转 阅读(1522) | 评论 (4)编辑 收藏

2010年6月12日 #

SoftArt是一款遵守GPLv2协议的开源软件渲染器,目的是在CPU上实现Direct3D 11的全部功能。

项目介绍参见这里

主页参见这里

目前固定管线的工作已经结束,Shading Language的编译器也在紧张开发中。

以下是目前的两个Demo的截图。

ComplexMesh

SampleWindow

在接下来的工作中,除去核心部分的进展外,性能示例、测试用例和特性展示。我们希望通过这些用户程序的开发,暴露SoftArt的性能、稳定性、Feature上的优势和缺陷。

考虑到Roadmap和目前的人手情况,我们希望招募一些志愿开发者从事Demo的开发工作。我们以极大的热诚,欢迎您的加盟。我们可以给予您一个良好的学习锻炼的机会。考虑到主要成员均为在职,可能没有更多的时间来辅导和培训,因此我们希望你可以具备一些基本条件:

* 有一年左右的C++经验;

* 对开发和图形学有钻研的兴趣;

* 有一定自学能力,在较少的指引下高效的学习;

* 有恒心,有热情参与开源项目;

* 当然,如果您有一定的图形学基础,那就更好了。

项目目前的核心开发成员及顾问,均具有6-12年的开发经验,供职于业内的顶级企业。为了让您能够快速溶于项目中,项目组会视情况组织在线/线下的培训和交流活动。相信每个成员均可以在本项目的实施过程中获益匪浅,项目也会因为您的贡献而更添光彩。

如果您有这方面的意向,请致Email于 wuye9036@gmail.com

请在Email注明你的:

ID:常用的ID,最好包括真实姓名

Google Account:如果没有,可以申请一个。因为我们的SVN Repository是建立在Google Code上的)

联系方式:IM(QQ,MSN,GTALK)和Email,有手机最好

自我介绍:包括擅长的技术啦,项目经验啦,闲扯也可,呵呵

希望参与的工作

其他要求:任何要求皆可

我们会在第一时间与您联系,商讨具体事宜。真诚期待您的加盟!

posted @ 2010-06-12 16:19 空明流转 阅读(1490) | 评论 (6)编辑 收藏

2010年5月29日 #

Visual Studio 2010开了一整天,敲了不到10行代码,然后几秒钟就被Ctrl + Z掉了。将三方协议寄出之后,难免有些松懈与混沌。周四体检结果出来,一切也就尘埃落定了。既然没心思干活,那可以随便写点什么,总结一下自三月份求职以来的种种经历,打发一下时间。

这几个月求职对我来说,还算是比较顺利的。到现在为止,MSRA的电话面试应该算是全部通过了,V公司也到了谈Offer的阶段。不过由于时间限制、兴趣、职位等种种因素,最终我还是选择了A公司的Offer。这点要向被我放了鸽子的朋友和公司道歉。有些事情,真的要看缘分和运气。待遇、职位、工作内容、工作地点,对我来说都比较适合,而且又有认识的多位前辈在其中供职,对能有这份工作,我是很高兴的。

我收到面试的机会不算特别多,MSRA三次中文的电话面试,A公司的一次电话和两次Face-to-face,V的Face-to-face,还有一个做GIS的单位G的Face-to-face的面试。

最早接受的,是G单位的面试。G单位采取的面试方式是一个Introduction,就是介绍下自己做过什么工作,然后Manager会介绍一下公司主要做哪些方面的工作。由于没什么问题,所以面下来,气氛很好。不过最后我一个在公司里工作的朋友告诉我,我被拒了。为什么不知道,连正式通知都没有。所以我也不好说什么的。不过大体上,这次面试就拉开了我被面的序幕。

MSRA三轮电话面试倒是各有特色。第一轮主要问我做过什么,对职业有什么规划,倾向于什么。然后简单的问了两个技术问题。第二轮是个单纯的技术面试。问我一个Large-scale的图片浏览系统应该怎么设计。然后我就在他的引导下,一步一步的深入,最后还算是比较顺利的纸上谈兵的解决了问题。反正嘛,不外乎就是Tune-Opt这样的顺序。对于这类数据访问型的数据,本质上就是运用Cache解决访问速度的问题。解决的好不好,面试这么短时间内,也是问不出来的。所以对付面试,有充分的分析问题的能力比较好。至于解决问题,那个面试很难考察的清楚。然后有一个彻底把我打垮的问题:操作系统的常用内核对象有哪些?我直接长大了嘴,然后过了好几分钟,干净利落的回答,不知道。然后是一些C++的问题。比方说struct和class有没有什么相同和不同啦一类的。或者是一些很概念性的,诸如Template用在哪些场合。第三轮电话面试比较郁闷。有个哥们儿一口咬定,我不适合做研究。然后27min中的面试有10min是他在接别人电话,还有至少10分钟,是纠结在我不适合做研究的问题上。问题是我本来就申请的是RSDE,哪有多少研究的。

V是我第二个Face-to-face的面试。面试我的是一个挺能侃的哥们儿,看样子是Team Leader。先让我做了一套Cpp的题目,我在博客里面也总结了,这里就不再多说了。然后就是一些公司发展啊,职业发展啊,定位啊一类的。图形方面问道的题目不多,倒是一些诸如不同调用协议之间的区别一类的汇编级的问题被问的很多。我对这些仅仅就了解了一个皮毛,因此回答的也很勉强,很复杂的问题,例如为什么cdecl下,参数是自右向左进栈这样的问题,就很难回答的上来了。不过整体上,从他的侃大山里,学到了不少东西。

A的两次,是典型的大公司的两次面试。第一次面试的是做QA的Team,最后因为和我的期望职位不适合,所以他们的Leader没有给我Offer。第二次就是现在拿Offer的这一次。

一般来说,这类大公司面试,就是分为技术面试和Communication两个部分。

第一个部分就是考察你技术怎么样。技术考察一般分为以下步骤:首先,你做过什么,简要的介绍一下。有什么动机,运用了哪些技术,效果如何,你主要做了写什么。这个时候比较好办,吹水就可以了。遇到了什么问题,怎么解决的。

其次,一些专业技术性的问题,比方说算法一类的。这一类问题底子好就比较容易搞,因为细节不多。但是要注意回答到点子上。比方说上一次被人问了Mipmap究竟是什么含义。我偏导来、偏导去的解释了半天,最后才算是猛的想起来,回答是预计算的降采样,面试我的哥们儿点点头我才算过了关。

再次就是工程学问题。让你写段代码示例。这中间要注意很多方面,比方说Guard Code。不是说我不重视这些东西。但是我对于在白板这样的思想交流工具上表达实现这么具体的东西很反感。有时候还会考一些基础但是具体的算法实现。这一项上,我比较薄弱。不是算法本身就真的差到什么程度,主要还是因为我是手册党。没有手册,你让我写一个完全正确的算法,很困难。点到直线距离就让我为难了好半天。这种基础的东西,荒废久了,还真难记得什么。所以代码什么的漏洞百出,还让面试我的前辈多少有点不太高兴。这点还是因为我太年轻,颇有些冲动和自以为是了。我一个朋友对我说,你有什么不重要,关键是,要是别人需要的,你都有,这才牛逼。我就把这句话当做座右铭了,可惜目前的实施情况实在太不尽如人意。以后进公司,这方面还是要注意一点比较好。

第二个部分就是你的IQ啊,EQ啊,语言能力啊、交流能力啊一类的。这些比较宽泛,也很难有准绳可以衡量。比方说我第一次在A面试的时候,就遇到了HR给我出智商题。我就直言说我这个人智商比较低。然后2道题就作出来1道,说明我大体上是个诚实的人。50%的正确率,大概和弱智没多少区别了。第二次面试就没有,直接面了英语。然后HR Z就说,我的英语太搓,云云。当然比这个说法婉转。这个没办法,我得承认。我的英语确实完全不靠谱。这个以后去了公司,还要多练练。

就我不多的面试经验来看。面试比我预先想的难度低。毕竟面试是允许不完美的,大差不差就可以了,不用把自己弄得太紧张。大公司也没有一般人想象的那么难进,只要你能力上差不多,对得起一年10W左右的薪水(绝大部分外企的薪酬都在这个左右浮动),就肯定能进去。当然,也是看缘分的。有时候没有合适的职位,那也没办法,只要耐心一点等待就好了。

最后祝将要找工作的同学一切顺利。

posted @ 2010-05-29 21:59 空明流转 阅读(2067) | 评论 (7)编辑 收藏

2010年5月24日 #

对于C++一系的语言,Name Mangling主要用于同名函数,同名类型和同名变量的重载。编译器可以在编译期将同名函数的不同签名形式区分开来。Name Mangling经常用于以下场合:函数同名称不同签名(函数重载);跨编译单元的变量、函数引用;动态链接库或其他形式的函数、变量导出。

尽管现阶段SASL不打算支持Member Function等比较复杂的行为,甚至暂时不考虑函数重载。但是作为现代语言编译的基本要素,SASL在语义分析阶段,仍然提供了较为完善的Name Mangling机制,为以后的编译器特性扩充打下基础。

SASL的Mangling语法如下:
mangled_name = 'M' basic_name '@' return_value_type parameter_type_list '@' 'Z'
basic_name = string '@'
return_value_type = value_type
parameter_type_list = ( value_type )*
value_type = qualifier_code type_code
qualifier_code = "UN" | "CN" | "NN" | "UC"
type_code = buildin_typecode | struct_class_typecode | array_type_code
buildin_typecode = dimension_code basic_type
dimension_code = scalar | vector | matrix
scalar = 'B'
vector = 'V' (1|2|3|4)
matrix = 'M' (1|2|3|4){2}
basic_type =
  'S1' | 'U1' | 'S2' | 'U2' | 'S4' | 'U4' | 'S8' | 'U8' | 'F' | 'D' | 'V' | 'B'
struct_class_typecode = 'S' string '@@'
array_class_typecode = 'A' type_code size '@@'

和主流语言相比,本Mangling暂时不支持Qualifier(Class Member,Namespace Qualifiers)。以后在需要Qualifier的时候再酌情添加。也就是说暂时不会考虑现有版本和以后版本在二进制上的兼容性。

以下是一个mangling的例子:

double foo();  => Mfoo@@NNBD@Z

posted @ 2010-05-24 23:00 空明流转 阅读(1059) | 评论 (7)编辑 收藏

2010年5月12日 #

SoftArt的近期计划主要集中在工程方面。开发组希望能在年底前放出第一个Release。在年底之前,大致的安排如下:

6月份,Code Review Standard。大体上参照Boost和Google的Standard来制定。

6月底之前,Roadmap。Roadmap将按照两个阶段分别制定项目计划表。第一个阶段到年底,即第一个Release发布之前。第二个阶段为2011年之后。

在6月份和12月份,项目组将分别撰写一份工作报告。工作报告预计包含 For Developer, For User, For Manager, For Roadmap四个部分。For Developer主要总结开发进展,针对部分有代表性或关键代码的Code Review撰写报告,并对下个阶段的项目实施提出建议。For User将主要总结API和文档在这一阶段的变化情况,并提供一份性能、功能、安全性、健壮性和Bug部分的用户指南。For Manager将对半年来的配置管理、任务分配等一系列的工作进行整理、汇报和评价,提出下一阶段的工作的纲要和工作指导。For Roadmap将对Roadmap的实施程度、变更情况加以解释和说明,并对Roadmap进行修正,提出完整的下一阶段工作计划。

12月底之前,Wiki、Forum和FAQ的建设。

12月底之前,用户文档开发者文档的整理编写工作。我们将尽量使用户文档能够在Release时发布,但是囿于人手,项目组暂时不能对文档的进度予以承诺。

同时,SoftArt开发者的招募工作仍然在继续当中详情可以参见本博的置顶帖。

最后,项目组成员感谢您对本公告的关注,并真诚希望您的参与!

posted @ 2010-05-12 18:56 空明流转 阅读(1249) | 评论 (2)编辑 收藏

2010年4月29日 #

     摘要: 感谢那些在硕士期间帮助过我的淫们~  阅读全文
posted @ 2010-04-29 16:00 空明流转 阅读(2032) | 评论 (12)编辑 收藏

2010年4月22日 #

有一段输入的离散信号{Zi},假定这段信号长度为N(N=2^n)。

Q1:

通常,可以用Fourier Transform来进行频域分析。例如对于一段随机白噪,可以得出时域和频域的图像如下:

image

其中,上图为时域,横轴t,纵轴为Zt。下图为频域,横轴为1/f(即周期T),纵轴为|Fn|(波幅)。

如果有这样一种假说,一个信号,是由一个基频与若干高/低频谐波和噪声的混合,且基频、噪声和高/低频谐波的波幅存在着一定的分布率,例如指数分布,例如,假设基频波幅期望是t(0<t<1),而次一级的谐波/噪声波幅的期望为t^2,以此类推。且信号的波幅是随机的,其波幅概率曲线成正态分布。

问题:有没有一种办法,可以对频谱加以分析,判断出可能概率最大的基频频率,并给出这一判断的概率是多少。(要做假设检验用,例如90%)

 

Q2:

使用一个信号发生器,Zi = 1 + Sin( i * Pi / 20 )。并经过傅里叶分析,得出以下的时域和频域统计:

image

其中,上图为时域,横轴t,纵轴为Zt。下图为频域,横轴为1/f(即周期T),纵轴为|Fn|(波幅)。

问题:为什么在周期接近1的时候,会有一个波幅尖峰?

posted @ 2010-04-22 15:16 空明流转 阅读(207) | 评论 (0)编辑 收藏

2010年3月26日 #

你看得懂C++不?那你可以靠边站了。听得懂人话不?那你也可以靠边站了。

此吐槽文,专门为没事干就想着怎么挑战编译器的牲口准备的。

在此之前,你必须要准备好听得懂人话的勇气和听不懂人话的基础。

 

1. 这个类要干些啥

在干一件事情之前,如果你早就预谋好了,那就是禽兽;如果你预谋都没有的,那就是禽兽不如。

所以在逆天之前,咱们得知道逆天之后,是如何作威作福的,这样才有Revolutionary的动力。

哥哥估计你应该是没写过软件渲染器。你们这群屁大孩子哪知道哥哥的苦啊。

老子他妈的为了兼容D3D的颜色,半夜爬起来黑灯瞎火的查手册,一看,我操,这么多颜色!

这世界咋不全他妈都是些颜色瞎子呢!

typedef enum DXGI_FORMAT
{
    DXGI_FORMAT_UNKNOWN = 0,
    DXGI_FORMAT_R32G32B32A32_TYPELESS = 1,
    DXGI_FORMAT_R32G32B32A32_FLOAT = 2,
    DXGI_FORMAT_R32G32B32A32_UINT = 3,
    DXGI_FORMAT_R32G32B32A32_SINT = 4,
    DXGI_FORMAT_R32G32B32_TYPELESS = 5,
    DXGI_FORMAT_R32G32B32_FLOAT = 6,
    DXGI_FORMAT_R32G32B32_UINT = 7,
    DXGI_FORMAT_R32G32B32_SINT = 8,
    DXGI_FORMAT_R16G16B16A16_TYPELESS = 9,
    DXGI_FORMAT_R16G16B16A16_FLOAT = 10,
    DXGI_FORMAT_R16G16B16A16_UNORM = 11,
    DXGI_FORMAT_R16G16B16A16_UINT = 12,
    DXGI_FORMAT_R16G16B16A16_SNORM = 13,
    DXGI_FORMAT_R16G16B16A16_SINT = 14,
    DXGI_FORMAT_R32G32_TYPELESS = 15,
    DXGI_FORMAT_R32G32_FLOAT = 16,
    DXGI_FORMAT_R32G32_UINT = 17,
    DXGI_FORMAT_R32G32_SINT = 18,
    DXGI_FORMAT_R32G8X24_TYPELESS = 19,
    DXGI_FORMAT_D32_FLOAT_S8X24_UINT = 20,
    DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS = 21,
    DXGI_FORMAT_X32_TYPELESS_G8X24_UINT = 22,
    DXGI_FORMAT_R10G10B10A2_TYPELESS = 23,
    DXGI_FORMAT_R10G10B10A2_UNORM = 24,
    DXGI_FORMAT_R10G10B10A2_UINT = 25,
    DXGI_FORMAT_R11G11B10_FLOAT = 26,
    DXGI_FORMAT_R8G8B8A8_TYPELESS = 27,
    DXGI_FORMAT_R8G8B8A8_UNORM = 28,
    DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 29,
    DXGI_FORMAT_R8G8B8A8_UINT = 30,
    DXGI_FORMAT_R8G8B8A8_SNORM = 31,
    DXGI_FORMAT_R8G8B8A8_SINT = 32,
    DXGI_FORMAT_R16G16_TYPELESS = 33,
    DXGI_FORMAT_R16G16_FLOAT = 34,
    DXGI_FORMAT_R16G16_UNORM = 35,
    DXGI_FORMAT_R16G16_UINT = 36,
    DXGI_FORMAT_R16G16_SNORM = 37,
    DXGI_FORMAT_R16G16_SINT = 38,
    DXGI_FORMAT_R32_TYPELESS = 39,
    DXGI_FORMAT_D32_FLOAT = 40,
    DXGI_FORMAT_R32_FLOAT = 41,
    DXGI_FORMAT_R32_UINT = 42,
    DXGI_FORMAT_R32_SINT = 43,
    DXGI_FORMAT_R24G8_TYPELESS = 44,
    DXGI_FORMAT_D24_UNORM_S8_UINT = 45,
    DXGI_FORMAT_R24_UNORM_X8_TYPELESS = 46,
    DXGI_FORMAT_X24_TYPELESS_G8_UINT = 47,
    DXGI_FORMAT_R8G8_TYPELESS = 48,
    DXGI_FORMAT_R8G8_UNORM = 49,
    DXGI_FORMAT_R8G8_UINT = 50,
    DXGI_FORMAT_R8G8_SNORM = 51,
    DXGI_FORMAT_R8G8_SINT = 52,
    DXGI_FORMAT_R16_TYPELESS = 53,
    DXGI_FORMAT_R16_FLOAT = 54,
    DXGI_FORMAT_D16_UNORM = 55,
    DXGI_FORMAT_R16_UNORM = 56,
    DXGI_FORMAT_R16_UINT = 57,
    DXGI_FORMAT_R16_SNORM = 58,
    DXGI_FORMAT_R16_SINT = 59,
    DXGI_FORMAT_R8_TYPELESS = 60,
    DXGI_FORMAT_R8_UNORM = 61,
    DXGI_FORMAT_R8_UINT = 62,
    DXGI_FORMAT_R8_SNORM = 63,
    DXGI_FORMAT_R8_SINT = 64,
    DXGI_FORMAT_A8_UNORM = 65,
    DXGI_FORMAT_R1_UNORM = 66,
    DXGI_FORMAT_R9G9B9E5_SHAREDEXP = 67,
    DXGI_FORMAT_R8G8_B8G8_UNORM = 68,
    DXGI_FORMAT_G8R8_G8B8_UNORM = 69,
    DXGI_FORMAT_BC1_TYPELESS = 70,
    DXGI_FORMAT_BC1_UNORM = 71,
    DXGI_FORMAT_BC1_UNORM_SRGB = 72,
    DXGI_FORMAT_BC2_TYPELESS = 73,
    DXGI_FORMAT_BC2_UNORM = 74,
    DXGI_FORMAT_BC2_UNORM_SRGB = 75,
    DXGI_FORMAT_BC3_TYPELESS = 76,
    DXGI_FORMAT_BC3_UNORM = 77,
    DXGI_FORMAT_BC3_UNORM_SRGB = 78,
    DXGI_FORMAT_BC4_TYPELESS = 79,
    DXGI_FORMAT_BC4_UNORM = 80,
    DXGI_FORMAT_BC4_SNORM = 81,
    DXGI_FORMAT_BC5_TYPELESS = 82,
    DXGI_FORMAT_BC5_UNORM = 83,
    DXGI_FORMAT_BC5_SNORM = 84,
    DXGI_FORMAT_B5G6R5_UNORM = 85,
    DXGI_FORMAT_B5G5R5A1_UNORM = 86,
    DXGI_FORMAT_B8G8R8A8_UNORM = 87,
    DXGI_FORMAT_B8G8R8X8_UNORM = 88,
    DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 89,
    DXGI_FORMAT_B8G8R8A8_TYPELESS = 90,
    DXGI_FORMAT_B8G8R8A8_UNORM_SRGB = 91,
    DXGI_FORMAT_B8G8R8X8_TYPELESS = 92,
    DXGI_FORMAT_B8G8R8X8_UNORM_SRGB = 93,
    DXGI_FORMAT_BC6H_TYPELESS = 94,
    DXGI_FORMAT_BC6H_UF16 = 95,
    DXGI_FORMAT_BC6H_SF16 = 96,
    DXGI_FORMAT_BC7_TYPELESS = 97,
    DXGI_FORMAT_BC7_UNORM = 98,
    DXGI_FORMAT_BC7_UNORM_SRGB = 99,
    DXGI_FORMAT_FORCE_UINT = 0xffffffffUL,
} DXGI_FORMAT, *LPDXGI_FORMAT;
除了BC?一组JB货,其他的我都要两两之间能够转化,擦,你丫他妈的还能够淡定?
然后我就在想啊,这他妈的都差不多,也就是转转类型啥的。
那能不能让编译器这个狗日的来替我当苦力,生成老子要的货呢?
然后老子就开始逆天了!老子要作威作福!

2. 怎么干

你问我,那我该问谁?记住了,某老说得对,你啥都不晓得做之前,就先把能做的事情做好。

第一件事情,先把祸害除掉。祸害?什么祸害?滚!别说老子认识你!

先把BC干掉。BC是啥?不知道?脑子都是bullshit呢你。

Block-Compression。压缩的格式,在咱的CPU系统里面,没啥JB用。以后顶多写个掏DIAO的工具,就能解决所有的需求了。

    DXGI_FORMAT_R32G32B32A32_TYPELESS = 1,
    DXGI_FORMAT_R32G32B32A32_FLOAT = 2,
    DXGI_FORMAT_R32G32B32A32_UINT = 3,
    DXGI_FORMAT_R32G32B32A32_SINT = 4,
    DXGI_FORMAT_R32G32B32_TYPELESS = 5,
    DXGI_FORMAT_R32G32B32_FLOAT = 6,
    DXGI_FORMAT_R32G32B32_UINT = 7,
    DXGI_FORMAT_R32G32B32_SINT = 8,
    DXGI_FORMAT_R16G16B16A16_TYPELESS = 9,
    DXGI_FORMAT_R16G16B16A16_FLOAT = 10,
    DXGI_FORMAT_R16G16B16A16_UNORM = 11,
    DXGI_FORMAT_R16G16B16A16_UINT = 12,
    DXGI_FORMAT_R16G16B16A16_SNORM = 13,
    DXGI_FORMAT_R16G16B16A16_SINT = 14,
    DXGI_FORMAT_R32G32_TYPELESS = 15,
    DXGI_FORMAT_R32G32_FLOAT = 16,
    DXGI_FORMAT_R32G32_UINT = 17,
    DXGI_FORMAT_R32G32_SINT = 18,
    DXGI_FORMAT_R32G8X24_TYPELESS = 19,
    DXGI_FORMAT_D32_FLOAT_S8X24_UINT = 20,
    DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS = 21,
    DXGI_FORMAT_X32_TYPELESS_G8X24_UINT = 22,
    DXGI_FORMAT_R10G10B10A2_TYPELESS = 23,
    DXGI_FORMAT_R10G10B10A2_UNORM = 24,
    DXGI_FORMAT_R10G10B10A2_UINT = 25,
    DXGI_FORMAT_R11G11B10_FLOAT = 26,
    DXGI_FORMAT_R8G8B8A8_TYPELESS = 27,
    DXGI_FORMAT_R8G8B8A8_UNORM = 28,
    DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 29,
    DXGI_FORMAT_R8G8B8A8_UINT = 30,
    DXGI_FORMAT_R8G8B8A8_SNORM = 31,
    DXGI_FORMAT_R8G8B8A8_SINT = 32,
    DXGI_FORMAT_R16G16_TYPELESS = 33,
    DXGI_FORMAT_R16G16_FLOAT = 34,
    DXGI_FORMAT_R16G16_UNORM = 35,
    DXGI_FORMAT_R16G16_UINT = 36,
    DXGI_FORMAT_R16G16_SNORM = 37,
    DXGI_FORMAT_R16G16_SINT = 38,
    DXGI_FORMAT_R32_TYPELESS = 39,
    DXGI_FORMAT_D32_FLOAT = 40,
    DXGI_FORMAT_R32_FLOAT = 41,
    DXGI_FORMAT_R32_UINT = 42,
    DXGI_FORMAT_R32_SINT = 43,
    DXGI_FORMAT_R24G8_TYPELESS = 44,
    DXGI_FORMAT_D24_UNORM_S8_UINT = 45,
    DXGI_FORMAT_R24_UNORM_X8_TYPELESS = 46,
    DXGI_FORMAT_X24_TYPELESS_G8_UINT = 47,
    DXGI_FORMAT_R8G8_TYPELESS = 48,
    DXGI_FORMAT_R8G8_UNORM = 49,
    DXGI_FORMAT_R8G8_UINT = 50,
    DXGI_FORMAT_R8G8_SNORM = 51,
    DXGI_FORMAT_R8G8_SINT = 52,
    DXGI_FORMAT_R16_TYPELESS = 53,
    DXGI_FORMAT_R16_FLOAT = 54,
    DXGI_FORMAT_D16_UNORM = 55,
    DXGI_FORMAT_R16_UNORM = 56,
    DXGI_FORMAT_R16_UINT = 57,
    DXGI_FORMAT_R16_SNORM = 58,
    DXGI_FORMAT_R16_SINT = 59,
    DXGI_FORMAT_R8_TYPELESS = 60,
    DXGI_FORMAT_R8_UNORM = 61,
    DXGI_FORMAT_R8_UINT = 62,
    DXGI_FORMAT_R8_SNORM = 63,
    DXGI_FORMAT_R8_SINT = 64,
    DXGI_FORMAT_A8_UNORM = 65,
    DXGI_FORMAT_R1_UNORM = 66,
    DXGI_FORMAT_R9G9B9E5_SHAREDEXP = 67,
    DXGI_FORMAT_R8G8_B8G8_UNORM = 68,
    DXGI_FORMAT_G8R8_G8B8_UNORM = 69,
    DXGI_FORMAT_B5G6R5_UNORM = 85,
    DXGI_FORMAT_B5G5R5A1_UNORM = 86,
    DXGI_FORMAT_B8G8R8A8_UNORM = 87,
    DXGI_FORMAT_B8G8R8X8_UNORM = 88,
    DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 89,
    DXGI_FORMAT_B8G8R8A8_TYPELESS = 90,
    DXGI_FORMAT_B8G8R8A8_UNORM_SRGB = 91,
    DXGI_FORMAT_B8G8R8X8_TYPELESS = 92,
    DXGI_FORMAT_B8G8R8X8_UNORM_SRGB = 93,
看懂没?有啥特点你这个猪脑子分析出来没?
总共只有以下的色彩通道:RGBADSX。
也只有一下的数据类型:UINT SINT FLOAT TYPELESS UNORM SNORM
当然还有几个比较操蛋的格式
DXGI_FORMAT_R9G9B9E5_SHAREDEXP = 67, 
DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM = 89, 
DXGI_FORMAT_B8G8R8A8_UNORM_SRGB = 91, 
DXGI_FORMAT_B8G8R8X8_UNORM_SRGB = 93,

下面要干的活,就是让编译器能够为不同的颜色转换,给爷苦力出好使的代码来。

posted @ 2010-03-26 19:04 空明流转 阅读(1627) | 评论 (12)编辑 收藏

仅列出标题  下一页