BlueGrey
calm
Elegant
Català-Valencià – Catalan
中文 – Chinese (Simplified)
中文 – Chinese (Traditional)
Česky – Czech
Dansk – Danish
Nederlands – Dutch
English – English
Suomi – Finnish
Français – French
Deutsch – German
עברית – Hebrew
हिंदी – Hindi
Magyar – Hungarian
Bahasa Indonesia – Indonesian
Italiano – Italian
日本語 – Japanese
한국어 – Korean
Македонски – Macedonian
मराठी – Marathi
Norsk – Norwegian
Polski – Polish
Português – Portuguese
Português – Portuguese (Brazil)
Русский – Russian
Slovenčina – Slovak
Slovenščina – Slovenian
Español – Spanish
Svenska – Swedish
Türkçe – Turkish
Українська – Ukrainian
Oëzbekcha – Uzbek
Subversion Repositories
Kolibri OS
(root)
/
programs
/
develop
/
libraries
/
TinyGL
/
src
/
zline.h
– Rev 7972
Rev
Go to most recent revision
|
Blame
|
Last modification
|
View Log
|
Download
|
RSS feed
{
int
n, dx, dy, sx, pp_inc_1, pp_inc_2
;
register
int
a
;
register
PIXEL
*
pp
;
#if defined(INTERP_RGB) || TGL_FEATURE_RENDER_BITS == 24
register
unsigned
int
r, g, b
;
#endif
#ifdef INTERP_RGB
register
unsigned
int
rinc, ginc, binc
;
#endif
#ifdef INTERP_Z
register
unsigned
short
*
pz
;
int
zinc
;
register
int
z, zz
;
#endif
if
(
p1
-
>
y
>
p2
-
>
y
||
(
p1
-
>
y
==
p2
-
>
y
&&
p1
-
>
x
>
p2
-
>
x
)
)
{
ZBufferPoint
*
tmp
;
tmp
=
p1
;
p1
=
p2
;
p2
=
tmp
;
}
sx
=
zb
-
>
xsize
;
pp
=
(
PIXEL
*
)
(
(
char
*
)
zb
-
>
pbuf
+
zb
-
>
linesize
*
p1
-
>
y
+
p1
-
>
x
*
PSZB
)
;
#ifdef INTERP_Z
pz
=
zb
-
>
zbuf
+
(
p1
-
>
y
*
sx
+
p1
-
>
x
)
;
z
=
p1
-
>
z
;
#endif
dx
=
p2
-
>
x
-
p1
-
>
x
;
dy
=
p2
-
>
y
-
p1
-
>
y
;
#ifdef INTERP_RGB
r
=
p1
-
>
r
<<
8
;
g
=
p1
-
>
g
<<
8
;
b
=
p1
-
>
b
<<
8
;
#elif TGL_FEATURE_RENDER_BITS == 24
/* for 24 bits, we store the colors in different variables */
r
=
p2
-
>
r
>>
8
;
g
=
p2
-
>
g
>>
8
;
b
=
p2
-
>
b
>>
8
;
#endif
#ifdef INTERP_RGB
#define RGB(x) x
#if TGL_FEATURE_RENDER_BITS == 24
#define RGBPIXEL pp[0] = r >> 16, pp[1] = g >> 16, pp[2] = b >> 16
#else
#define RGBPIXEL *pp = RGB_TO_PIXEL(r >> 8,g >> 8,b >> 8)
#endif
#else /* INTERP_RGB */
#define RGB(x)
#if TGL_FEATURE_RENDER_BITS == 24
#define RGBPIXEL pp[0] = r, pp[1] = g, pp[2] = b
#else
#define RGBPIXEL *pp = color
#endif
#endif /* INTERP_RGB */
#ifdef INTERP_Z
#define ZZ(x) x
#define PUTPIXEL() \
{ \
zz=z >> ZB_POINT_Z_FRAC_BITS; \
if (ZCMP(zz,*pz)) { \
RGBPIXEL; \
*pz=zz; \
} \
}
#else /* INTERP_Z */
#define ZZ(x)
#define PUTPIXEL() RGBPIXEL
#endif /* INTERP_Z */
#define DRAWLINE(dx,dy,inc_1,inc_2) \
n=dx;\
ZZ(zinc=(p2->z-p1->z)/n);\
RGB(rinc=((p2->r-p1->r) << 8)/n;\
ginc=((p2->g-p1->g) << 8)/n;\
binc=((p2->b-p1->b) << 8)/n);\
a=2*dy-dx;\
dy=2*dy;\
dx=2*dx-dy;\
pp_inc_1 = (inc_1) * PSZB;\
pp_inc_2 = (inc_2) * PSZB;\
do {\
PUTPIXEL();\
ZZ(z+=zinc);\
RGB(r+=rinc;g+=ginc;b+=binc);\
if (a>0) { pp=(PIXEL *)((char *)pp + pp_inc_1); ZZ(pz+=(inc_1)); a-=dx; }\
else { pp=(PIXEL *)((char *)pp + pp_inc_2); ZZ(pz+=(inc_2)); a+=dy; }\
} while (--n >= 0);
/* fin macro */
if
(
dx
==
0
&&
dy
==
0
)
{
PUTPIXEL
(
)
;
}
else
if
(
dx
>
0
)
{
if
(
dx
>=
dy
)
{
DRAWLINE
(
dx, dy, sx
+
1
,
1
)
;
}
else
{
DRAWLINE
(
dy, dx, sx
+
1
, sx
)
;
}
}
else
{
dx
=
-
dx
;
if
(
dx
>=
dy
)
{
DRAWLINE
(
dx, dy, sx
-
1
,
-
1
)
;
}
else
{
DRAWLINE
(
dy, dx, sx
-
1
, sx
)
;
}
}
}
#undef INTERP_Z
#undef INTERP_RGB
/* internal defines */
#undef DRAWLINE
#undef PUTPIXEL
#undef ZZ
#undef RGB
#undef RGBPIXEL