ba_wang_mao 发表于 2006-12-19 09:16

采用虚拟屏幕技术清除整个屏幕就是快,如何将将画线函数也改用本方法实现呢?

<P>采用如下方法清除800X600X256屏幕为黑色太快了,比用PutPixel直接写屏方式快多了,而且没有闪烁感,如何将将画线函数也改用本方法实现呢?<BR><BR>/////////////////////////////////////////////////////////////////////////////////////////////////<BR>//    快速清除屏幕子程序<BR>//    由于分辨率为800*600*256色(8位深度),因此共需800*600/65535=8页=512K<BR>/////////////////////////////////////////////////////////////////////////////////////////////////<BR>void _Cdecl GuiQuickClsScreen(int color)<BR>{<BR>    unsigned int i,j;<BR>    unsigned char VDCBuf[800];<BR>    unsigned int dest_off = 0;</P>
<P>    memset(VDCBuf,color,800);<BR>    for (j = 0 ; j &lt; 8 ; j++)            //    页号(共需8页)<BR>    {<BR>        set_vbe_page(j);                        // 依次选择页号0-页号7<BR>        dest_off = 0;                            // 偏移<BR>        for (i = 0 ; i &lt; 81 ; i++)        // 由于显卡每页65535,因此先送64800个像素<BR>        {<BR>            movedata(FP_SEG(VDCBuf),FP_OFF(VDCBuf),0xa000,dest_off,800);<BR>            dest_off += 800;            // 指向下一根扫描线<BR>        }                                        <BR>        movedata(FP_SEG(VDCBuf),FP_OFF(VDCBuf),0xa000,dest_off,735);<BR>        // 将每页余下的735个像素单独送<BR>    }<BR>}</P>

一笔苍穹 发表于 2006-12-19 10:09

画水平线可以用这种方法优化,其它角度的线就不行了。所以可以专门做一个hline()函数。但显示位图函数可以采用这个方法,我以前做过测试,很快的。

页: [1]

编程论坛