GrDrawTarget::AutoDeviceCoordDraw::AutoDeviceCoordDraw( GrDrawTarget* target, GrDrawState::StageMask stageMask) { GrAssert(NULL != target); GrDrawState* drawState = target->drawState(); fDrawTarget = target; fViewMatrix = drawState->getViewMatrix(); fStageMask = stageMask; if (fStageMask) { GrMatrix invVM; if (fViewMatrix.invert(&invVM)) { for (int s = 0; s < GrDrawState::kNumStages; ++s) { if (fStageMask & (1 << s)) { fSamplerMatrices[s] = drawState->getSampler(s).getMatrix(); } } drawState->preConcatSamplerMatrices(fStageMask, invVM); } else { // sad trombone sound fStageMask = 0; } } drawState->viewMatrix()->reset(); }