亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gpeaccel.cpp

?? EP931X系列的WinCE顯示器驅動源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//****************************************************************************
// 
// 
SCODE GPEAccel::MovePointer(INT xPosition, INT yPosition)
{
    DEBUGMSG(GPE_ZONE_CURSOR, (TEXT("GPEAccel::MovePointer(%d, %d)\r\n"), xPosition, yPosition));
    ULONG ulXYLOC;

    
    if (xPosition != -1 || yPosition != -1)
    {
        m_xPosition = xPosition;
        m_yPosition = yPosition;

        //
        // Compute new cursor rect
        //
        m_CursorRect.left = xPosition - m_CursorHotspot.x;
        m_CursorRect.right = m_CursorRect.left + m_CursorSize.x;
        m_CursorRect.top = yPosition - m_CursorHotspot.y;
        m_CursorRect.bottom = m_CursorRect.top + m_CursorSize.y;

        if(m_bCursorHasShape)
        {
            ulXYLOC = CURSORXYLOC_XMASK & ((m_StartStop.ulHActiveStart  - m_CursorRect.left)<<CURSORXYLOC_XSHIFT);
            ulXYLOC |= CURSORXYLOC_YMASK & ((m_StartStop.ulVActiveStart - m_CursorRect.top)<<CURSORXYLOC_YSHIFT);
            ulXYLOC |= m_bCursorEnabled? CURSORXYLOC_CEN: 0;

        }
        m_bCursorEnabled = TRUE;
    }
    else
    {
        ulXYLOC             = 0;
        m_bCursorEnabled    = FALSE;        
    }

    //
    // Write the New XY Cursor value.
    //
    *RASTER_CURSORXYLOC = ulXYLOC;

    return  S_OK;
}

//****************************************************************************
// GPEAccel::WaitForNotBusy
//****************************************************************************
// In the EP9312 Video is never busy. 
//
void   GPEAccel::WaitForNotBusy(void)
{
    DEBUGMSG (GPE_ZONE_INIT, (TEXT("GPEAccel::WaitForNotBusy\r\n")));
    return;
}

//****************************************************************************
// GPEAccel::IsBusy
//****************************************************************************
// In the EP9312 Video is never busy. 
// 
int  GPEAccel::IsBusy(void)
{
    DEBUGMSG (GPE_ZONE_INIT, (TEXT("GPEAccel::IsBusy\r\n")));
    return  0;
}


//****************************************************************************
// GPEAccel::GetPhysicalVideoMemory
//****************************************************************************
// Get the Physical memory base and video memory size.
//
void  GPEAccel::GetPhysicalVideoMemory
(
    unsigned long *physicalMemoryBase, 
    unsigned long *videoMemorySize
)
{
    DEBUGMSG (GPE_ZONE_INIT, (TEXT("GPEAccel::GetPhysicalVideoMemory\r\n")));

    *physicalMemoryBase = m_pvFlatFrameBuffer;
    *videoMemorySize = m_cbScanLineLength * m_cyPhysicalScreen;
}

//****************************************************************************
// GPEAccel::AllocSurface
//****************************************************************************
// AllocateSurface
SCODE   GPEAccel::AllocSurface
(
    GPESurf     **surface, 
    INT         width, 
    INT         height, 
    EGPEFormat  format, 
    INT         surfaceFlags
)
{
    DEBUGMSG (GPE_ZONE_INIT, (TEXT("GPEAccel::AllocSurface\r\n")));

    if (surfaceFlags & GPE_REQUIRE_VIDEO_MEMORY)
    {

            RETAILMSG(1,(TEXT("AllocSurface out of memory error.\r\n")));
        return  E_OUTOFMEMORY;
    }

    //
    // Allocate from system memory
    //
    *surface = new GPESurf(width, height, format);

    if (*surface != NULL)
    {
        //
        // Check that the bits were allocated succesfully
        //
        if (((*surface)->Buffer()) == NULL)
        {
            //
            // Clean up
            //
            delete *surface;                
            RETAILMSG(1,(TEXT("BPESurf->Buffer error\r\n")));
        }
        else
        {
            return S_OK;
        }
    }
    RETAILMSG(1,(TEXT("New GPESurf() error\r\n")));
    return E_OUTOFMEMORY;
}

//****************************************************************************
// GPEAccel::WrappedEmulatedLine
//****************************************************************************
// 
// 
//
SCODE GPEAccel::WrappedEmulatedLine (GPELineParms *lineParameters)
{
    SCODE   retval;
    RECT    bounds;
    int     N_plus_1;               // Minor length of bounding rect + 1

    // calculate the bounding-rect to determine overlap with cursor
    if (lineParameters->dN)         // The line has a diagonal component (we'll refresh the bounding rect)
    {
        N_plus_1 = 2 + ((lineParameters->cPels * lineParameters->dN) / lineParameters->dM);
    }
    else
    {
        N_plus_1 = 1;
    }

    switch(lineParameters->iDir)
    {
        case 0:
            bounds.left = lineParameters->xStart;
            bounds.top = lineParameters->yStart;
            bounds.right = lineParameters->xStart + lineParameters->cPels + 1;
            bounds.bottom = bounds.top + N_plus_1;
            break;
        case 1:
            bounds.left = lineParameters->xStart;
            bounds.top = lineParameters->yStart;
            bounds.bottom = lineParameters->yStart + lineParameters->cPels + 1;
            bounds.right = bounds.left + N_plus_1;
            break;
        case 2:
            bounds.right = lineParameters->xStart + 1;
            bounds.top = lineParameters->yStart;
            bounds.bottom = lineParameters->yStart + lineParameters->cPels + 1;
            bounds.left = bounds.right - N_plus_1;
            break;
        case 3:
            bounds.right = lineParameters->xStart + 1;
            bounds.top = lineParameters->yStart;
            bounds.left = lineParameters->xStart - lineParameters->cPels;
            bounds.bottom = bounds.top + N_plus_1;
            break;
        case 4:
            bounds.right = lineParameters->xStart + 1;
            bounds.bottom = lineParameters->yStart + 1;
            bounds.left = lineParameters->xStart - lineParameters->cPels;
            bounds.top = bounds.bottom - N_plus_1;
            break;
        case 5:
            bounds.right = lineParameters->xStart + 1;
            bounds.bottom = lineParameters->yStart + 1;
            bounds.top = lineParameters->yStart - lineParameters->cPels;
            bounds.left = bounds.right - N_plus_1;
            break;
        case 6:
            bounds.left = lineParameters->xStart;
            bounds.bottom = lineParameters->yStart + 1;
            bounds.top = lineParameters->yStart - lineParameters->cPels;
            bounds.right = bounds.left + N_plus_1;
            break;
        case 7:
            bounds.left = lineParameters->xStart;
            bounds.bottom = lineParameters->yStart + 1;
            bounds.right = lineParameters->xStart + lineParameters->cPels + 1;
            bounds.top = bounds.bottom - N_plus_1;
            break;
        default:
            RETAILMSG(1,(TEXT("Invalid direction: %d\r\n"), lineParameters->iDir));
            return E_INVALIDARG;
    }


    // do emulated line
    retval = EmulatedLine (lineParameters);

    return  retval;

}
//****************************************************************************
// GPEAccel::Line
//****************************************************************************
// 
// 
SCODE GPEAccel::Line
(   
    GPELineParms    *lineParameters, 
    EGPEPhase       phase
)
{
    DEBUGMSG (GPE_ZONE_INIT, (TEXT("GPEAccel::Line\r\n")));

    if (phase == gpeSingle || phase == gpePrepare)
    {

        if ((lineParameters->pDst != m_pPrimarySurface))
        {
            lineParameters->pLine = EmulatedLine;
        }
        else
        {
            lineParameters->pLine = (SCODE (GPE::*)(struct GPELineParms *)) WrappedEmulatedLine;
        }
    }
    return S_OK;
}

//****************************************************************************
// GPEAccel::BltPrepare
//****************************************************************************
// 

SCODE   GPEAccel::BltPrepare(GPEBltParms *blitParameters)
{
    // RECTL   rectl;

    DEBUGMSG (GPE_ZONE_INIT, (TEXT("GPEAccel::BltPrepare\r\n")));

    //
    // default to base EmulatedBlt routine
    //
    blitParameters->pBlt = EmulatedBlt;

    //
    // see if there are any optimized software blits available
    //
    EmulatedBltSelect02(blitParameters);
    EmulatedBltSelect08(blitParameters);
    EmulatedBltSelect16(blitParameters);

    return S_OK;
}

//****************************************************************************
// GPEAccel::BltComplete
//****************************************************************************
// 
SCODE   GPEAccel::BltComplete(GPEBltParms *blitParameters)
{
    DEBUGMSG (GPE_ZONE_INIT, (TEXT("GPEAccel::BltComplete\r\n")));

    return S_OK;
}

//****************************************************************************
// GPEAccel::InVBlank
//****************************************************************************
// We don't have to worry about blanking.
//
INT    GPEAccel::InVBlank(void)
{
    DEBUGMSG (GPE_ZONE_INIT, (TEXT("GPEAccel::InVBlank\r\n")));
    return 0;
}

//****************************************************************************
// PrintPalette
//****************************************************************************
// Debug routine to print out the current palette
// 
//
void PrintPalette()
{
    #ifdef DEBUG
    ULONG   ulEntry;
    DEBUGMSG (GPE_ZONE_PALETTE, (L"GPEAccel: Current Palette, "));
    
    //
    // If the print Palette zone is enabled print out the palette whenever
    // we open the palette.
    //
    if(GPE_ZONE_PALETTE)
    {
        for(ulEntry = 0; ulEntry < 256 ; ulEntry+=4)
        {
            DEBUGMSG
            (
                GPE_ZONE_PALETTE, 
                (
                    L"Entry 0x%03x:  0x%08x  0x%08x  0x%08x  0x%08x\n",
                    ulEntry,
                    RASTER_COLOR_LUT[ulEntry],
                    RASTER_COLOR_LUT[ulEntry + 1],
                    RASTER_COLOR_LUT[ulEntry + 2],
                    RASTER_COLOR_LUT[ulEntry + 3]
                )
            );
        }
    }        
    #endif //DEBUG
}
//****************************************************************************
// GPEAccel::SetPalette
//****************************************************************************
// Set up the Color Look up table.   There are two LUT's in hardware.
// the lookup table that is visible is not the one that is accessable.
// 
//
SCODE  GPEAccel::SetPalette
(
    const PALETTEENTRY  *source, 
    USHORT              firstEntry, 
    USHORT              numEntries
)
{
    DEBUGMSG (GPE_ZONE_INIT, (TEXT("GPEAccel::SetPalette\r\n")));
    ULONG   ulEntry;
    ULONG   ulCount;

    if (firstEntry < 0 || firstEntry + numEntries > 256 || source == NULL)
    {
        RETAILMSG(1,(TEXT("SetPalette invalid arguments\r\n")));
        return  E_INVALIDARG;
    }

    //
    // Copy into our palette.
    //
    memcpy((void *)&m_Palette[firstEntry], source, sizeof(PALETTEENTRY) * numEntries);
    

    //
    // I would do a memory copy but the red and blue
    // palette entries are reversed.
    //
    for(ulEntry = firstEntry ; ulEntry < numEntries; ulEntry++)
    {
        unsigned char red, green, blue;

        //
        // Get the values for Red, Green and Blue.
        //
        red     = source[ulEntry].peRed ;
        green   = source[ulEntry].peGreen;
        blue    = source[ulEntry].peBlue;

        //
        // Program up the Color lookup table.
        //
        RASTER_COLOR_LUT[ulEntry] = ((ULONG)red<< 16) + ((ULONG)green << 8) + (ULONG)blue;
    }
    
    //
    // Switch to the other LUT and program the same values.
    //                                       
    *RASTER_LUTCONT          ^= LUTCONT_SWTCH;
    
    //
    // Wait until a palette switch occurs at the end of the frame.
    //
    for(ulCount = 0 ;; ulCount++)
    {
        //
        // Put a small delay to wait for the change.
        //
        Sleep(1);
        
        //
        // Has the switch occured.
        //
        if(((*RASTER_LUTCONT & LUTCONT_SSTAT) && (*RASTER_LUTCONT &LUTCONT_SWTCH)) ||
          (!(*RASTER_LUTCONT & LUTCONT_SSTAT) && !(*RASTER_LUTCONT & LUTCONT_SWTCH)))
        {
            break;
        }
        
        if(ulCount > 100)
        {
            DEBUGMSG (GPE_ZONE_INIT, (TEXT("ERROR: Palette switch never occured.\n")));
        }
    }

    
    //
    // I would do a memory copy but the red and blue
    // palette entries are reversed.
    //
    for(ulEntry = firstEntry ; ulEntry < numEntries; ulEntry++)
    {
        unsigned char    red, green, blue;

        //
        // Get the values for Red, Green and Blue.
        //
        red     = source[ulEntry].peRed ;
        green   = source[ulEntry].peGreen;
        blue    = source[ulEntry].peBlue;

        //
        // Program up the Color lookup table.
        //
        RASTER_COLOR_LUT[ulEntry] = ((ULONG)red<< 16) + ((ULONG)green << 8) + (ULONG)blue;
    }
    
    //
    // Print out the palette to the debugger if the debug zone is enabled.
    //
    PrintPalette();


    return  S_OK;
}

//****************************************************************************
// GPEAccel::GetGraphicsCaps
//****************************************************************************
// 
// 
ULONG   GPEAccel::GetGraphicsCaps()
{
    if (m_pMode)
    {
        //
        // if in 16bpp mode, return GCAPS_GRAY16 to denote that we support 
        // anti-aliased fonts
        if (m_pMode->Bpp == 16)     
        {
            return  GCAPS_GRAY16;
        }
    }
    return  0;
}

//****************************************************************************
// RegisterDDHALAPI
//****************************************************************************
// no DDHAL support
// 
void  RegisterDDHALAPI(void)
{
    return; 
}

ULONG gBitMasks[] = { 0x0001,0x0002,0x0000 };


//****************************************************************************
// DrvGetMasks
//****************************************************************************
//
//
ULONG *APIENTRY DrvGetMasks(DHPDEV dhpdev)
{
    return gBitMasks;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久在线免费观看| 精品国产电影一区二区| 激情小说亚洲一区| 亚洲免费在线播放| 精品久久国产字幕高潮| 在线亚洲精品福利网址导航| 精品在线一区二区三区| 亚洲一区二区免费视频| 欧美国产乱子伦 | 91在线porny国产在线看| 免费日韩伦理电影| 一区二区三区高清不卡| 日本一区二区三区在线不卡 | 色8久久精品久久久久久蜜| 国内精品免费**视频| 污片在线观看一区二区| 亚洲男人的天堂在线观看| 久久综合九色综合97_久久久| 欧美日韩免费一区二区三区视频| 粉嫩高潮美女一区二区三区| 精品一区二区三区免费播放| 视频一区在线播放| 一区二区高清视频在线观看| 国产精品美女久久久久久| 久久影院视频免费| 精品电影一区二区| 日韩午夜电影av| 亚洲欧洲日韩综合一区二区| 精品欧美乱码久久久久久1区2区| 精品视频在线看| 在线日韩国产精品| 色老头久久综合| 在线免费观看日本一区| 91视频免费播放| 色吊一区二区三区| 色香蕉成人二区免费| 96av麻豆蜜桃一区二区| aaa亚洲精品| 97久久精品人人做人人爽| 99久久久无码国产精品| 99视频有精品| 91视频91自| 欧美视频一区二| 777午夜精品免费视频| 91麻豆精品国产91久久久使用方法| 欧美婷婷六月丁香综合色| 欧洲视频一区二区| 欧美三电影在线| 欧美一区二区三区免费观看视频| 在线播放视频一区| 88在线观看91蜜桃国自产| 欧美一区二区三区免费| 欧美本精品男人aⅴ天堂| 久久色.com| 中文字幕一区二区三区四区| 亚洲欧美日韩一区二区三区在线观看| 亚洲精品视频在线观看免费| 亚洲二区视频在线| 日韩美女视频一区二区| 欧美一区二区三区男人的天堂| 欧美一区二区二区| 26uuu精品一区二区三区四区在线| 337p粉嫩大胆色噜噜噜噜亚洲| 国产欧美中文在线| 亚洲视频一二区| 亚洲6080在线| 久久国产精品色| 成人精品小蝌蚪| 欧美日韩在线播放一区| 日韩精品综合一本久道在线视频| 久久久久国产精品人| 国产精品你懂的| 一区二区三区成人| 老色鬼精品视频在线观看播放| 国产精品自拍三区| 一本色道亚洲精品aⅴ| 欧美日韩你懂得| 国产日韩欧美a| 一区二区三国产精华液| 九色|91porny| 91免费看片在线观看| 91精品福利在线一区二区三区| 国产欧美综合在线观看第十页| 一区二区三区欧美视频| 免费成人性网站| 99精品视频在线观看免费| 91精品国产色综合久久不卡蜜臀 | 91黄色小视频| 26uuu欧美| 欧美二区在线观看| 欧美一级理论片| 亚洲欧美另类综合偷拍| 久久国产视频网| 在线观看一区日韩| 国产日韩欧美综合一区| 亚洲福利电影网| 成人天堂资源www在线| 日韩一级完整毛片| 亚洲精品免费一二三区| 国产精品一区二区不卡| 在线播放国产精品二区一二区四区| 国产欧美中文在线| 日本不卡高清视频| 欧美视频一二三区| 中文字幕日韩欧美一区二区三区| 男男视频亚洲欧美| 欧美性色黄大片| 中文字幕制服丝袜成人av| 久久国产乱子精品免费女| 欧美三级日本三级少妇99| 日韩理论片在线| 国产激情一区二区三区四区 | 99久久99久久综合| 2020国产精品| 美女精品一区二区| 欧美高清视频一二三区| 亚洲一区成人在线| 色综合一区二区三区| 中文字幕国产精品一区二区| 久国产精品韩国三级视频| 91精品综合久久久久久| 亚洲国产你懂的| 欧美亚洲愉拍一区二区| 亚洲激情网站免费观看| 波多野结衣中文一区| 国产自产2019最新不卡| 日韩免费视频一区二区| 视频一区免费在线观看| 欧洲亚洲精品在线| 亚洲综合免费观看高清完整版| 成人黄色在线视频| 中文字幕第一区综合| 国产成人精品一区二区三区四区 | 一区二区三区在线视频播放| 成人av一区二区三区| 欧美国产日韩a欧美在线观看 | 色婷婷综合久久久久中文一区二区| 国产午夜精品美女毛片视频| 黄网站免费久久| 精品国产91洋老外米糕| 激情图片小说一区| 国产人妖乱国产精品人妖| 粉嫩aⅴ一区二区三区四区| 国产亚洲美州欧州综合国 | 91精品国产一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎| 日韩午夜在线观看视频| 免费亚洲电影在线| 久久免费精品国产久精品久久久久| 国产剧情一区二区| 国产精品每日更新在线播放网址 | 精品国产3级a| 国产精品亚洲午夜一区二区三区 | 成人精品鲁一区一区二区| 中文字幕不卡的av| 91网上在线视频| 亚洲一二三区在线观看| 日韩三级在线免费观看| 国产一区不卡精品| 国产精品灌醉下药二区| 在线观看日产精品| 青青草原综合久久大伊人精品优势| 日韩精品影音先锋| 成a人片国产精品| 亚洲成人动漫在线观看| 日韩欧美aaaaaa| 99久久久久久99| 日韩国产精品大片| 国产女人aaa级久久久级 | 美女视频第一区二区三区免费观看网站| 日韩午夜中文字幕| 成人动漫中文字幕| 亚洲成人免费av| 久久精品欧美一区二区三区不卡 | 国产91精品一区二区麻豆网站 | 色哟哟欧美精品| 蜜臀av一级做a爰片久久| 国产欧美一区二区三区在线老狼| 欧美日韩一级片网站| 色偷偷88欧美精品久久久| 亚洲va欧美va人人爽| 精品国一区二区三区| 91影院在线免费观看| 日韩av电影免费观看高清完整版| 亚洲国产精品成人综合色在线婷婷| 欧美性生活久久| 高清免费成人av| 婷婷成人激情在线网| 国产精品无码永久免费888| 欧美日韩性生活| jlzzjlzz亚洲日本少妇| 日本欧美在线看| 亚洲欧美日韩系列| 久久久久久久久久久黄色| 精品婷婷伊人一区三区三| 国产精品综合一区二区三区| 天堂影院一区二区| 中文字幕一区三区| 久久久久青草大香线综合精品| 欧美偷拍一区二区|