1. Datatype misalignment: 指针地址未对齐(float必须为4字节对齐)
解决方法:拷贝源数据到新的float数组里,使用数组里的副本进行运算,对于PC上原始未对齐的数据可以免于修改。
2. PC上由于可以直接将Texture作为RenderTarget进行渲染,所以在切换RenderTarget时只要保存当前的 RenderTarget的指针即可。但在XBOX360上由于EDRAM内的不同RenderTarget有可能是重叠的,所以不只能是简单的保存指针,还要将RenderTarget先Resolve到Texture上,在还原RenderTarget的时候再将Texture弄回到 RenderTarget上,会产生两次Resolve,效率比较低下。
(Resolve对于1280x720是0.25ms), 具体步骤如下:
1.Save the pointer pointing to the current render-target:[pOldOne] and resolve the current render-target to a texture[pOldTex].
2.Set another render-target[pNewOne], render, and reslove the result to the texture[pNewTex].
3.Set the [pOldOne] as the original render-target.
4.Clear and render from pOldTex to the render-target [pOldOne].
[ Step 1 and 3 on PC are not needed because textures can be set as render-target on PC directly. ]
对于保存的原始RenderTarget和Depth/Stencil的Texture, 在Restore的时候:
1. Render-target使用DrawPrimitiveUP方法,覆盖到原始Surface上(先Clear)PixelShader
1. float4 psMainRTSwitch( float2 Tex0 : TEXCOORD0 ) : COLOR0 { return tex2D( sam0, Tex0 ); }
2. Depth/Stencil使用DrawPrimitiveUP方法,覆盖到原始Surface上(先Clear)PixelShader(对于D24S8格式)
1. float psMainDSSwitch( float2 Tex0 : TEXCOORD0 ) : DEPTH0 { return tex2D(sam0, Tex0 ).x; }
-----------------------------------------------------------
每天进步一点
浙公网安备 33010602011771号