| 1213 | } |
| 1214 | |
| 1215 | void PostEffect::_setupTarget( const SceneRenderState *state, bool *outClearTarget ) |
| 1216 | { |
| 1217 | if ( mNamedTarget.isRegistered() || |
| 1218 | mTargetName.compare( "$outTex", 0, String::NoCase ) == 0 ) |
| 1219 | { |
| 1220 | // Size it relative to the texture of the first stage or |
| 1221 | // if NULL then use the current target. |
| 1222 | |
| 1223 | Point2I targetSize; |
| 1224 | |
| 1225 | // If we have an absolute target size then use that. |
| 1226 | if ( !mTargetSize.isZero() ) |
| 1227 | targetSize = mTargetSize; |
| 1228 | |
| 1229 | // Else generate a relative size using the target scale. |
| 1230 | else if ( mActiveTextures[ 0 ] ) |
| 1231 | { |
| 1232 | const Point3I &texSize = mActiveTextures[ 0 ]->getSize(); |
| 1233 | |
| 1234 | targetSize.set( texSize.x * mTargetScale.x, |
| 1235 | texSize.y * mTargetScale.y ); |
| 1236 | } |
| 1237 | else |
| 1238 | { |
| 1239 | GFXTarget *oldTarget = GFX->getActiveRenderTarget(); |
| 1240 | const Point2I &oldTargetSize = oldTarget->getSize(); |
| 1241 | |
| 1242 | targetSize.set( oldTargetSize.x * mTargetScale.x, |
| 1243 | oldTargetSize.y * mTargetScale.y ); |
| 1244 | } |
| 1245 | |
| 1246 | // Make sure its at least 1x1. |
| 1247 | targetSize.setMax( Point2I::One ); |
| 1248 | |
| 1249 | if ( mNamedTarget.isRegistered() || |
| 1250 | !mTargetTex || |
| 1251 | mTargetTex.getWidthHeight() != targetSize ) |
| 1252 | { |
| 1253 | mTargetTex.set( targetSize.x, targetSize.y, mTargetFormat, |
| 1254 | &PostFxTargetProfile, "PostEffect::_setupTarget" ); |
| 1255 | |
| 1256 | if ( mTargetClear == PFXTargetClear_OnCreate ) |
| 1257 | *outClearTarget = true; |
| 1258 | |
| 1259 | if(mTargetViewport == PFXTargetViewport_GFXViewport) |
| 1260 | { |
| 1261 | // We may need to scale the GFX viewport to fit within |
| 1262 | // our target texture size |
| 1263 | GFXTarget *oldTarget = GFX->getActiveRenderTarget(); |
| 1264 | const Point2I &oldTargetSize = oldTarget->getSize(); |
| 1265 | Point2F scale(targetSize.x / F32(oldTargetSize.x), targetSize.y / F32(oldTargetSize.y)); |
| 1266 | |
| 1267 | const RectI &viewport = GFX->getViewport(); |
| 1268 | |
| 1269 | mNamedTarget.setViewport( RectI( viewport.point.x*scale.x, viewport.point.y*scale.y, viewport.extent.x*scale.x, viewport.extent.y*scale.y ) ); |
| 1270 | } |
| 1271 | else if(mTargetViewport == PFXTargetViewport_NamedInTexture0 && mActiveNamedTarget[0] && mActiveNamedTarget[0]->getTexture()) |
| 1272 | { |
nothing calls this directly
no test coverage detected