今天遇到位图格式问题,经过亲自验证,得到以下结论:
对于Direct3D9的D3DFMT_A8R8G8B8纹理:
按照字节顺序,每个像素的组成是:B1,G1,R1,A1,B2,G2,R2,A2 。。。
对应PShader的float4的话,R对应X,G对应Y,B对应Z,A对应W
对于Direct3D9的D3DFMT_X8R8G8B8纹理:
按照字节顺序,每个像素的组成是:B1,G1,R1,?1,B2,G2,R2,?2 。。。
对应PShader的float4的话,R对应X,G对应Y,B对应Z,?对应W
对于DirectShow的MediaSubType_ARGB32帧:
按照字节顺序,每个像素的组成是:B1,G1,R1,A1,B2,G2,R2,A2 。。。
(和D3DFMT_A8R8G8B8一样)
对于DirectShow的MediaSubType_RGB32帧:
按照字节顺序,每个像素的组成是:B1,G1,R1,?1,B2,G2,R2,?2 。。。
(和D3DFMT_X8R8G8B8一样)
对于DirectShow的MediaSubType_YUYV帧:
按照字节顺序,两个像素的组成是:Y1,U12,Y2,V12,Y3,U34,Y4,V34 。。。
(注意了,ARGB格式是BGRA字节次序,YUYV格式是YUYV字节次序)
总结以上的各项,凡是RGB色系的位图,都是按照从高位到低位的次序来描述,
凡是YUV色系的位图,都是按照字节从开始到结束的次序来描述,正好相反,
到了Shader里面,像素的字节次序从BGRA变成RGBA了(至少AMD显卡是这样);