bool TriangulationCDTWindow::OnCharPress(unsigned char key, int x, int y)
{
    switch (key)
    {
    case '0':
        UnindexedSimplePolygon();
        OnDisplay();
        return true;
    case '1':
        IndexedSimplePolygon();
        OnDisplay();
        return true;
    case '2':
        OneNestedPolygon();
        OnDisplay();
        return true;
    case '3':
        TwoNestedPolygons();
        OnDisplay();
        return true;
    case '4':
        TreeOfNestedPolygons();
        OnDisplay();
        return true;
    }

    return Window::OnCharPress(key, x, y);
}
bool TriangulationECWindow::OnCharPress(unsigned char key, int x, int y)
{
    switch (key)
    {
    case '0':
        UnindexedSimplePolygon();
        OnDisplay();
        return true;
    case '1':
        IndexedSimplePolygon();
        OnDisplay();
        return true;
    case '2':
        OneNestedPolygon();
        OnDisplay();
        return true;
    case '3':
        TwoNestedPolygons();
        OnDisplay();
        return true;
    case '4':
        TreeOfNestedPolygons();
        OnDisplay();
        return true;
    case '5':
        FourBoxesThreeNested(0, 1, 2);
        OnDisplay();
        return true;
    case '6':
        FourBoxesThreeNested(0, 2, 1);
        OnDisplay();
        return true;
    case '7':
        FourBoxesThreeNested(1, 0, 2);
        OnDisplay();
        return true;
    case '8':
        FourBoxesThreeNested(1, 2, 0);
        OnDisplay();
        return true;
    case '9':
        FourBoxesThreeNested(2, 0, 1);
        OnDisplay();
        return true;
    case 'a':
    case 'A':
        FourBoxesThreeNested(2, 1, 0);
        OnDisplay();
        return true;
    }

    return Window::OnCharPress(key, x, y);
}
TriangulationCDTWindow::TriangulationCDTWindow(Parameters& parameters)
    :
    Window(parameters)
{
    mScreen = std::make_shared<Texture2>(DF_R8G8B8A8_UNORM, mXSize, mYSize);
    mScreen->SetUsage(Resource::DYNAMIC_UPDATE);
    memset(mScreen->GetData(), 0xFF, mScreen->GetNumBytes());
    mScreenTexels = mScreen->Get<unsigned int>();

    mOverlay = std::make_shared<OverlayEffect>(mProgramFactory, mXSize,
        mYSize, mXSize, mYSize, SamplerState::MIN_P_MAG_P_MIP_P,
        SamplerState::CLAMP, SamplerState::CLAMP, true);
    mOverlay->SetTexture(mScreen);

    UnindexedSimplePolygon();
}
TriangulationECWindow::TriangulationECWindow(Parameters& parameters)
    :
    Window(parameters),
    mTree(nullptr),
    mExample(0),
    mColor(0xFF000000),
    mBlack(0xFF000000),
    mBlue(0xFFFF8000),
    mWhite(0xFFFFFFFF)
{
    mScreenTexture = std::make_unique<Texture2>(DF_R8G8B8A8_UNORM, mXSize,
        mYSize);
    mScreenTexture->SetUsage(Resource::DYNAMIC_UPDATE);
    memset(mScreenTexture->GetData(), 0xFF, mScreenTexture->GetNumBytes());
    mScreenTexels = mScreenTexture->Get<unsigned int>();

    mOverlay = std::make_shared<OverlayEffect>(mProgramFactory, mXSize,
        mYSize, mXSize, mYSize, SamplerState::MIN_P_MAG_P_MIP_P,
        SamplerState::CLAMP, SamplerState::CLAMP, true);
    mOverlay->SetTexture(mScreenTexture);

    UnindexedSimplePolygon();
}