|
最近半年
我几乎每个月都要斯巴达一次
每次都是因为NV和ATI这对冤家令人讨厌的行为所导致
我用的A卡是X550
N卡是7600GT
由于我被DX那5XXMB的sdk给震撼了
所以选择opengl
好吧
我承认是我自找的
我也承认我能力很烂
又没读过几本书
但是我是个活人
我有权利吐槽
首先是渲染到纹理
在A卡上渲染到纹理的时候,Alpha通道也会保留
但是同样的代码同样的程序
到了N卡上
Alpha通道就固定变成1.0了
搞得我还以为N卡不支持混合
当然Alpha通道我还是需要用,所以开始折腾FBO
这回N卡有Alpha通道了
A卡又没了
偏偏我又用FBO写了bloom
这下可好,只能砍了bloom保证兼容性
2个月的业余时间我只得到两次斯巴达,以及两个扯淡的教训
然后是shadowMAP
我用的是NV的Cg
开始的时候我还庆幸A卡能正常使用NV搞的东西
但是在做shadowMAP的时候我终于知道什么叫冤家
shadowMAP需要用深度纹理
直接渲染到纹理又是两家效果不同,这也就算了
我又不是搞专业开发的,老显卡我也不管了
深度纹理我也用FBO
这次更有趣了
我在N卡的机器上写代码
深度纹理用了24位的
在N卡上一切正常
到了A卡上提示FBO与加载的纹理格式不同
大概X550不支持
我换16位的
这次轮到N卡提示不支持
好吧
24位你支持了
16位你反而不支持
你干脆连深度渲染都给禁用了岂不更好
为了判断显卡是哪家的
我又折腾了1星期
深度纹理总算能出来
在shader里读深度纹理的时候
又出现有趣的事情
N卡能自动识别纹理格式
如果是“被规定使用的深度纹理格式”那么就可以自动实现一堆功能
“被规定使用的深度纹理格式”到底是什么东东
Cg编程手册里没说明白
我翻遍glew头文件里所有的适合用于渲染深度的纹理格式
没一个能用的
A卡相关资料完全没有,ATI向来官方资料少
无奈之下
只好改用浮点纹理渲染
稍微翻了一下资料
发现关于浮点纹理
NV和ATI在这方面是完全的冤家
而且我的X550没一个格式能用的……
最终
我想出一个纯粹脱裤子放屁的方法
把一个32位浮点数分成4个8位“浮点”数
不过shader是不支持位运算的
可想而知最终结果有多大的误差
结果就是:
![]()
至此
我已经不知道该说什么好了
当初DX和opengl都不存在的时候
图形API没有标准
各家显卡都不同
结果最终造就了Voodoo的神话
但是3DFX不开放自己的api
扑街了
换DX和opengl接班
的确现在PC游戏用opengl的比较少了
但是这不等于没人用opengl
像NV和ATI这样各自搞小动作
还不说明白
只有从dos时代过来的经验丰富的程序员面对这些烂事才能从容应对
我现在不得不担心
20年后老一辈开发人员都下岗之后
会不会也出现个“程序员能力危机”呢? |
|