⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dda422s.c

📁 linux嵌入式开发程序
💻 C
字号:

/*===========================================================================
        2D Graphics Library
        ALL RIGHTS RESERVED, COPYRIGHT (C) FUJITSU LIMITED 1993-2002
        LICENSED MATERIAL - PROGRAM PROPERTY OF FUJITSU LIMITED
 ===========================================================================*/

#include "gl.h"
#include "defhook.h"

#define BitLen          16


#define PSET(a,c)                                               \
{                                                               \
    register DWORD *p = (DWORD *)((long)(a)-((long)(a)&3)) ;    \
    if(((long)(a)&3)!=0)                                        \
        *p = *p & 0xff000000 | (c) & 0x00ffffff ;               \
    else                                                        \
        *p = *p & 0x0000ff00 | (c) & 0xffff00ff ;               \
}


int
_GL_ddaYUV422_single(GL_WP *gp)
{
    DWORD   color   = (long)gp->dda.color ;
    BYTE    *adr    = (BYTE *)gp->hwork.VRAMadr[gp->hwork.page][0] + gp->dda.offs ;
    int     i, rx, ry, count, bitp ;
    int     xbits, ybytes ;
    long    dx, dy, si, sj ;
    DWORD   style ;

    dx      = gp->dda.org[1][0] - gp->dda.org[0][0] ;
    dy      = gp->dda.org[1][1] - gp->dda.org[0][1] ;
    si      = dx >> 31 ;
    sj      = dy >> 31 ;
    dx      = ((dx^si)-si) << 1 ;
    dy      = ((dy^sj)-sj) << 1 ;
    xbits   = (BitLen^si)-si ;
    ybytes  = (gp->dda.lbytes^sj)-sj ;

    rx      = gp->dda.rx ;
    ry      = gp->dda.ry ;
    si      = (long)rx >> 31 ;
    sj      = (long)ry >> 31 ;
    rx      = (rx^si)-si ;
    ry      = (ry^sj)-sj ;

    i       = gp->dda.flag&1 ;
    style   = gp->dda.style ;
    bitp    = gp->dda.bitp ;

    if(dx>dy){
        count   = dx>>1 ;
        si      = gp->dda.org[0][0]-gp->dda.x ;
        if(si){
            sj      = (long)si >> 31 ;
            si      = (si^sj)-sj ;
            count   = (si * dy + count) % dx ;
        }
        sj      = si & 0x1f ;
        if((style+1)==0){
            while(i++<rx){
                PSET(adr,color) ;
                bitp  += xbits ;
                adr   += bitp >> 3 ;
                bitp  &= 7 ;
                count += dy ;
                if(count>=dx){
                    adr   += ybytes ;
                    count -= dx ;
                }
            }
        } else {
            style   = (style << sj) | (style >> (32-sj)) ;
            while(i++<rx){
                style = (style>>31)|(style<<1) ;
                if(style&1){
                    PSET(adr,color) ;
                }
                bitp  += xbits ;
                adr   += bitp >> 3 ;
                bitp  &= 7 ;
                count += dy ;
                if(count>=dx){
                    adr   += ybytes ;
                    count -= dx ;
                }
            }
        }

    } else {

        si      = gp->dda.org[0][1]-gp->dda.y ;
        sj      = (long)si >> 31 ;
        si      = (si^sj)-sj ;
        sj      = si & 0x1f ;
        count   = 0 ;
        if(dy){
            count = dy>>1 ;
            if(si)
                count = ( si * dx + count ) % dy ;
        }
        if((style+1)==0){
            while(i++<ry){
                PSET(adr,color) ;
                adr += ybytes ;
                count += dx ;
                if(count>=dy){
                    bitp  += xbits ;
                    adr   += bitp >> 3 ;
                    bitp  &= 7 ;
                    count -= dy ;
                }
            }
        } else {
            style   = (style << sj) | (style >> (32-sj)) ;
            while(i++<ry){
                style = (style>>31)|(style<<1) ;
                if(style&1){
                    PSET(adr,color) ;
                }
                adr += ybytes ;
                count += dx ;
                if(count>=dy){
                    bitp  += xbits ;
                    adr   += bitp >> 3 ;
                    bitp  &= 7 ;
                    count -= dy ;
                }
            }
        }
    }
    return GL_Ok ;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -