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

📄 dda888.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 ByteLen         3

int
_GL_ddaRGB888(GL_WP *gp)
{
    DWORD   color ;
    BYTE    *adr ;
    int     i, rx, ry, count ;
    int     xbytes, ybytes ;
    long    dx, dy, si, sj ;
    DWORD   style ;

    color   = (long)gp->dda.color ;
    adr     = (BYTE *)gp->hwork.VRAMadr[gp->hwork.page][0] + gp->dda.offs ;

    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 ;
    xbytes  = (ByteLen^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 ;

    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){
                adr[0] = (BYTE)(color>>16) ;
                adr[1] = (BYTE)(color>>8) ;
                adr[2] = (BYTE)(color) ;
                adr   += xbytes ;
                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){
                    adr[0] = (BYTE)(color>>16) ;
                    adr[1] = (BYTE)(color>>8) ;
                    adr[2] = (BYTE)(color) ;
                }
                adr   += xbytes ;
                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){
                adr[0] = (BYTE)(color>>16) ;
                adr[1] = (BYTE)(color>>8) ;
                adr[2] = (BYTE)(color) ;
                adr += ybytes ;
                count += dx ;
                if(count>=dy){
                    adr   += xbytes ;
                    count -= dy ;
                }
            }
        } else {
            style   = (style << sj) | (style >> (32-sj)) ;
            while(i++<ry){
                style = (style>>31)|(style<<1) ;
                if(style&1){
                    adr[0] = (BYTE)(color>>16) ;
                    adr[1] = (BYTE)(color>>8) ;
                    adr[2] = (BYTE)(color) ;
                }
                adr += ybytes ;
                count += dx ;
                if(count>=dy){
                    adr   += xbytes ;
                    count -= dy ;
                }
            }
        }
    }
    return GL_Ok ;
}


⌨️ 快捷键说明

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