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

📄 ncolor.h

📁 NEO SDK是一个跨平台的免费开源图形软件开发包。它支持基本绘图、多种格式图形显示、鼠标操 作、扩展内存和扩充内存的操作、时钟、音频播放、多种字体的汉字及英文显示等等特性;更激动人心的是
💻 H
📖 第 1 页 / 共 2 页
字号:
/*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, &reg);

      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, &regs);
   }
}


/*---------------------------------------------------*
 *函数功能: 设置硬件调色板中指定颜色号的颜色分量.    *
 *参数说明: 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 + -