rendered paste bodystatic Bool
cubeCheckFTB (CompScreen *s,
const ScreenPaintAttrib *sAttrib,
const CompTransform *transform
int output)
{
float mvp[16];
MULTM(w->screen->projection, transform->m, mvp);
float pntA[4] = { w->screen->outputDev[output].region.extents.x1,
w->screen->outputDev[output].region.extents.y1,
tdw->currentZ, 1};
float pntB[4] = { w->screen->outputDev[output].region.extents.x2,
w->screen->outputDev[output].region.extents.y1,
tdw->currentZ, 1};
float pntC[4] = { w->screen->outputDev[output].region.extents.x1 + w->screen->outputDev[output].width / 2.0f,
w->screen->outputDev[output].region.extents.y1 + w->screen->outputDev[output].height / 2.0f,
tdw->currentZ, 1};
MULTMV(mvp, pntA);
DIVV(pntA);
MULTMV(mvp, pntB);
DIVV(pntB);
MULTMV(mvp, pntC);
DIVV(pntC);
float vecA[3] = { pntC[0] - pntA[0],
pntC[1] - pntA[1],
pntC[2] - pntA[2]};
float vecB[3] = { pntC[0] - pntB[0],
pntC[1] - pntB[1],
pntC[2] - pntB[2]};
float ortho[3] = { vecA[1] * vecB[2] - vecA[2] * vecB[1],
vecA[2] * vecB[0] - vecA[0] * vecB[2],
vecA[0] * vecB[1] - vecA[1] * vecB[0]};
if (ortho[2] > 0.0f) //The window is reversed, should be painted front to back.
{
return TRUE;
}
return FALSE;
}