Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
86
Src/Plugins/Visualization/vis_nsfs/linedraw.cpp
Normal file
86
Src/Plugins/Visualization/vis_nsfs/linedraw.cpp
Normal file
|
@ -0,0 +1,86 @@
|
|||
#include <windows.h>
|
||||
|
||||
static void __inline DrawPixel(int color, unsigned char *fb)
|
||||
{
|
||||
int a=*fb;
|
||||
a+=color;
|
||||
if (a>255)a=255;
|
||||
*fb=(unsigned char)a;
|
||||
}
|
||||
|
||||
// based on abrash's wu antialiasing routine
|
||||
void line(unsigned char *fb, int X0, int Y0, int X1, int Y1, int w, int h)
|
||||
{
|
||||
unsigned int ErrorAdj=0, ErrorAcc;
|
||||
int DeltaX, DeltaY, XDir=1;
|
||||
|
||||
if (Y0 > Y1)
|
||||
{
|
||||
int t = Y0; Y0 = Y1; Y1 = t;
|
||||
t = X0; X0 = X1; X1 = t;
|
||||
}
|
||||
|
||||
DeltaY = Y1 - Y0;
|
||||
DeltaX = X1 - X0;
|
||||
if (DeltaX < 0)
|
||||
{
|
||||
XDir = -1;
|
||||
DeltaX = -DeltaX;
|
||||
}
|
||||
|
||||
if (DeltaY > DeltaX) {
|
||||
|
||||
ErrorAcc = (X0&0xffff);
|
||||
Y0>>=16;
|
||||
X0>>=16;
|
||||
DeltaY += 65535;
|
||||
DeltaY >>= 16;
|
||||
if (DeltaY) ErrorAdj = DeltaX/DeltaY;
|
||||
fb+=Y0*w+X0;
|
||||
while (DeltaY-- >= 0) {
|
||||
if (X0 > 0 && Y0 >= 0 && X0 < w-1 && Y0 < h)
|
||||
{
|
||||
int Weighting = ErrorAcc >> 10;
|
||||
DrawPixel(Weighting^63,fb);
|
||||
DrawPixel(Weighting,fb+XDir);
|
||||
}
|
||||
|
||||
ErrorAcc += ErrorAdj;
|
||||
if (ErrorAcc >= 65536) {
|
||||
X0 += XDir;
|
||||
fb += XDir;
|
||||
ErrorAcc -= 65536;
|
||||
}
|
||||
fb+=w;
|
||||
Y0++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ErrorAcc = (Y0&0xffff);
|
||||
X0>>=16;
|
||||
Y0>>=16;
|
||||
DeltaX += 65535;
|
||||
DeltaX >>= 16;
|
||||
if (DeltaX) ErrorAdj = DeltaY/DeltaX;
|
||||
|
||||
fb+=Y0*w+X0;
|
||||
while (DeltaX-- >= 0) {
|
||||
if (Y0 >= 0 && Y0 < h-1 && X0 >= 0 && X0 < w)
|
||||
{
|
||||
int Weighting = ErrorAcc >> 10;
|
||||
DrawPixel(Weighting^63,fb);
|
||||
DrawPixel(Weighting,fb+w);
|
||||
}
|
||||
|
||||
ErrorAcc += ErrorAdj;
|
||||
if (ErrorAcc >= 65536) {
|
||||
Y0++;
|
||||
fb+=w;
|
||||
ErrorAcc-=65536;
|
||||
}
|
||||
fb+=XDir;
|
||||
X0+=XDir;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue