📄 dda888.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 + -