📄 ncolor.h
字号:
/*NEO SDK V2.1.90 For DOS
Copyleft Cker Home 2003-2006.
Open Source Obey NEO_PL.TXT.
http://neo.coderlife.net
ckerhome@yahoo.com.cn
文件名称 : ndraw.h
摘 要 : 本头文件包含了NEO SDK里有关显卡硬件加速及显存、屏幕底层处理的函数、结构、全局
变量的声明及定义
当前版本 : 2.43
作 者 : 董凯
完成日期 : 2006.02.10
取代版本 : 2.42
原 作 者 : 董凯
完成日期 : 2006.01.22
*/
#ifndef __NCOLOR_H__
#define __NCOLOR_H__
#define NEO_INT_MAX 2147483647L
#define NEO_INT_MIN (-NEO_INT_MAX - 1)
/* dark colors */
#define _BLACK makecol(0, 0, 0)
#define _BLUE makecol(0, 0, 128)
#define _GREEN makecol(0, 128, 0)
#define _CYAN makecol(0, 128, 128)
#define _RED makecol(128, 0, 0)
#define _MAGENTA makecol(128, 0, 128)
#define _BROWN makecol(128, 0, 64)
#define _LIGHTGRAY makecol(192, 192, 192)
#define _DARKGRAY makecol(128, 128, 128)
/* light colors */
#define _LIGHTBLUE makecol(0, 0, 255)
#define _LIGHTGREEN makecol(0, 255, 0)
#define _LIGHTCYAN makecol(0, 255, 255)
#define _LIGHTRED makecol(255, 0, 0)
#define _LIGHTMAGENTA makecol(255, 0, 255)
#define _YELLOW makecol(255, 255, 0)
#define _WHITE makecol(255, 255, 255)
#define _WHITE_ 0xf/*makecol(255, 255, 255)*/
#ifndef MASK_COLOR_
#define MASK_COLOR_ g_tptcolor
#endif
#define retrace_count neo_clock()
char g_dac_size_fix = 2; /*记录DAC调色板宽度修正值,由8-当前DAC宽度得来,默认为2*/
Uint8 get_rgb(int index, int flags);
void set_neo_color(void);
void make_332_palette(PALETTE pal);
void set_332_palette(void);
char palette_cmp(PALETTE pal1, PALETTE pal2);
char is_332_palette(void);
Uint8 bestfit_color(PALETTE pal, int r, int g, int b);
void set_palette_range(char *pal_buf, int from, int to, int vsync_flag);
void set_color(int index, char red, char green, char blue);
void get_color(int index, char *red, char *green, char *blue);
void set_dac_size(Uint8 size);
char get_dac_size(void);
void set_palette(char *pal_buf);
void _set_palette(PALETTE pal_buf);
void get_palette(char *pal_buf);
void _get_palette(PALETTE pal_buf);
Uint8 makecol8(int r, int g, int b);
void (*fade_callback)() = NULL;
void fade_interpolate(PALETTE source, PALETTE dest, PALETTE output, int pos, int from, int to);
void fade_from_range(PALETTE source, PALETTE dest, int speed, int from, int to);
void fade_in_range(PALETTE p, int speed, int from, int to);
void fade_out_range(int speed, int from, int to);
void _fade_in(PALETTE p, int speed);
void fade_in(PALETTE p, Uint8 dest_color, int speed);
void _fade_out(int speed);
void fade_out(Uint8 dest_color, int speed);
int makecol(int r, int g, int b);
#define makecol16(r, g, b) ((((((r)>>3)<<g_green_mask)+((g)>>g_green_bit))<<5)+((b)>>3))
#define makecol15(r, g, b) makecol16(r,g,b)
#ifndef NEO_color_depth_8_unused
#ifndef NEO_palette_unused
#define _set_palette_range(pal, from, to, vsync_f) set_palette_range((char *)pal, from, to, vsync_f)
#define makecol8( r, g, b) bestfit_color(g_sys_palette, (r>>2), (g>>2), (b>>2))
#define get_red(i) (g_sys_palette[i].r)
#define get_green(i) (g_sys_palette[i].g)
#define get_blue(i) (g_sys_palette[i].b)
#endif
#define getr8(c) get_rgb(i, 0)
#define getg8(c) get_rgb(i, 1)
#define getb8(c) get_rgb(i, 2)
#endif
#define getr15(c) (((c)&0x7c00)>>10)
#define getg15(c) (((c)&0x3e0) >>5)
#define getb15(c) ((c)&0x1f)
#define getr16(c) (((c)&0xf800)>>11)
#define getg16(c) (((c)&0x7e0) >>5)
#define getb16(c) ((c)&0x1f)
#define getr24(c) (((c)&0xff0000)>>16)
#define getg24(c) (((c)&0xff00)>>8)
#define getb24(c) (c&0xff)
#define getr(i) get_rgb(i, 0)
#define getg(i) get_rgb(i, 1)
#define getb(i) get_rgb(i, 2)
/*flags标志:为0返回红色分量,为1返回绿色分量,为2返回蓝色分量*/
Uint8 get_rgb(int index, int flags)
{
Uint8 rgb[3];
/*对不同的颜色深度进行分别处理*/
switch(get_color_depth())
{
case 8:
#ifndef NEO_color_depth_8_unused
#ifndef NEO_palette_unused
get_palette_range((char *)rgb, index, index);
#endif
#endif
break;
case 15:
rgb[0] = getr15(index);
rgb[1] = getg15(index);
rgb[2] = getb15(index);
break;
case 16:
/* fall through */
default:
rgb[0] = getr16(index);
rgb[1] = getg16(index);
rgb[2] = getb16(index);
break;
}
return rgb[flags];
}
int makecol(int r, int g, int b)
{
switch (get_color_depth())
{
case 8:
#ifndef NEO_color_depth_8_unused
return makecol8(r, g, b);
#endif
case 15:
/* fall through */
case 16:
/* fall through */
default:
return makecol16(r, g, b);
}
}
#ifndef NEO_color_depth_8_unused
#ifndef NEO_palette_unused
#define set_palette(pal_buf) set_palette_range(pal_buf, 0, 255, TRUE)
#define _set_palette(pal) _set_palette_range(pal, 0, 255, TRUE)
#define get_palette(pal_buf) get_palette_range(pal_buf, 0, 255)
#define _get_palette(pal) _get_palette_range(pal, 0, 255)
/* make_332_palette:
* Used when loading a truecolor image into an 8 bit bitmap, to generate
* a 3.3.2 RGB palette.Just adapt a 6 bits DAC.
*/
void make_332_palette(PALETTE pal)
{
int r, g, b, k = 0;
for(r = 0; r < 64; r += 9)
{
for(g = 0; g < 64; g += 9)
{
for(b = 0; b < 64; b += 21)
{
pal[k].r = r;
pal[k].g = g;
pal[k].b = b;
k++;
}
}
}
}
char palette_cmp(PALETTE pal1, PALETTE pal2)
{
int *x = (int *)pal1;
int *y = (int *)pal2;
int i;
for (i = 0; i < 384; ++i)
{
if (x[i] != y[i])
{
return FALSE;
}
}
return TRUE;
}
char is_332_palette(void)
{
PALETTE pal332;
make_332_palette(pal332);
if (palette_cmp(pal332, g_sys_palette))
{
return (common_flags |= 0x1);
}
else
{
return (common_flags &= 0xfffe);
}
}
void set_palette_range(char *pal_buf, int from, int to, int vsync_flag)
{
struct REGPACK reg;
int i;
char *syspal = (char *)g_sys_palette;
if (from <= to && from >= 0 && to < 256)
{
/*同步到内存中的调色板映射*/
if (from == 0 && to == 255)
{
memcpy((char *)g_sys_palette, (char *)pal_buf, 768);
}
else
{
for (i = from * 3; i <= to * 3; i += 3)
{
syspal[i] = pal_buf[i];
syspal[i + 1] = pal_buf[i + 1];
syspal[i + 2] = pal_buf[i + 2];
}
}
if (vsync_flag) vsync();
reg.r_ax = 0x1012;
reg.r_bx = from;
reg.r_cx = to - from + 1;
reg.r_es = FP_SEG(pal_buf);
reg.r_dx = FP_OFF(pal_buf);
intr(0x10, ®);
is_332_palette();
}
}
void get_palette_range(char *pal_buf, int from, int to)
{
struct REGPACK regs;
if (from <= to && from >= 0 && to < 256)
{
regs.r_ax = 0x1017;
regs.r_bx = from;
regs.r_cx = to - from + 1;
regs.r_es = FP_SEG(pal_buf);
regs.r_dx = FP_OFF(pal_buf);
intr(0x10, ®s);
}
}
/*---------------------------------------------------*
*函数功能: 设置硬件调色板中指定颜色号的颜色分量. *
*参数说明: index为颜色号. *
* red,green,blue为此颜色号对应的红,绿,兰三 *
* 原色分量,均应小于64) *
*返回说明: *
*备 注: 颜色设置函数.用户程序可直接调用. *
*---------------------------------------------------*/
void set_color(int index, char red, char green, char blue)
{
char color[3];
g_sys_palette[index].r = color[0] = red;
g_sys_palette[index].g = color[1] = green;
g_sys_palette[index].b = color[2] = blue;
set_palette_range(color, index, index, FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -