コード例 #1
0
ファイル: hline.c プロジェクト: Nekrofage/DoomRPi
static inline void
do_drawhline(ggi_visual *vis, int x, int y, int w)
{
	int i, w32;
	uint32_t *fb32;
	uint16_t *fb16;
	uint32_t val = LIBGGI_GC_FGCOLOR(vis) | (LIBGGI_GC_FGCOLOR(vis) << 16);

	PREPARE_FB(vis);
	fb16 = (uint16_t*)((uint8_t*)LIBGGI_CURWRITE(vis)
			 + y*LIBGGI_FB_W_STRIDE(vis) + x*2);
	
	if (x%2) {
		*(fb16++) = val;
		w--;
	}

	w32 = w/2;
	fb32 = (uint32_t*) fb16;
	for (i = 0; i < w32; i++) {
		*(fb32++) = val;
	}

	if (w%2) {
		fb16 = (uint16_t *) fb32;
		*fb16 = val;
	}
}
コード例 #2
0
ファイル: hline.c プロジェクト: antrik/libggi
static inline void
do_drawhline(struct ggi_visual *vis, int x, int y, int w)
{
	uint8_t *fb;
	uint8_t fg;

	fb = (uint8_t *) LIBGGI_CURWRITE(vis)+y*LIBGGI_FB_W_STRIDE(vis)+(x/2);
	fg = (uint8_t) LIBGGI_GC_FGCOLOR(vis) | (LIBGGI_GC_FGCOLOR(vis)<<4);
	
	PREPARE_FB(vis);

	/* x is odd.  Read-modify-write right pixel. */
	if (x & 0x01) {
		*fb = (*fb & 0x0f) | (fg & 0xf0);
		fb++;
		w--;
	}
	
	memset(fb, fg, (size_t)(w/2));

	/* Dangling right pixel. */
	if (w & 0x01) {
		fb += w/2;
		*fb = (*fb & 0xf0) | (fg & 0x0f);
	}
}
コード例 #3
0
ファイル: fillscreen.c プロジェクト: Nekrofage/DoomRPi
int GGI_vgagl_fillscreen(ggi_visual *vis)
{
	if (LIBGGICLIP_FULLSCREEN(vis)) {
		gl_clearscreen(LIBGGI_GC_FGCOLOR(vis));
	} else {
		gl_fillbox(LIBGGI_GC(vis)->cliptl.x, LIBGGI_GC(vis)->cliptl.y,
			   LIBGGI_GC(vis)->clipbr.x - LIBGGI_GC(vis)->cliptl.x,
			   LIBGGI_GC(vis)->clipbr.y - LIBGGI_GC(vis)->cliptl.y,
			   LIBGGI_GC_FGCOLOR(vis));
	}

	return 0;
}
コード例 #4
0
ファイル: text.c プロジェクト: antrik/libggi
int GGI_tele_puts(struct ggi_visual *vis, int x, int y, const char * s)
{
	ggi_tele_priv *priv = TELE_PRIV(vis);
	TeleCmdPutStrData *p;
	TeleEvent ev;
	int err = 0;
	unsigned int i = 0;

	T_Long * data;

	p = tclient_new_event(priv->client, &ev, TELE_CMD_PUTSTR,
				sizeof(TeleCmdPutStrData)-4,
				(signed)((strlen(s) + 1) * sizeof(T_Long)));

	p->x = (T_Long)(x);
	p->y = (T_Long)(y);
	p->length = (T_Long)strlen(s);
	p->fg = (T_Long)(LIBGGI_GC_FGCOLOR(vis));
	p->bg = (T_Long)(LIBGGI_GC_BGCOLOR(vis));

	data = (T_Long *)(p->text);

	for (i = 0 ; i <= strlen(s); ++i) {	/* Copy the trailing \0! */
		data[i] = (T_Long)(s[i]);
	}

	err = tclient_write(priv->client, &ev);

	if (err == TELE_ERROR_SHUTDOWN) {
		TELE_HANDLE_SHUTDOWN;
	}	/* if */

	return err;
}	/* GGI_tele_puts */
コード例 #5
0
ファイル: draw.c プロジェクト: Nekrofage/DoomRPi
int GGI_tele_drawbox(ggi_visual *vis, int x, int y, int w, int h)
{
	ggi_tele_priv *priv = TELE_PRIV(vis);
	TeleCmdDrawBoxData *p;
	TeleEvent ev;

	int err;

	LIBGGICLIP_XYWH(vis, x, y, w, h);

	p = tclient_new_event(priv->client, &ev, TELE_CMD_DRAWBOX,
			      sizeof(TeleCmdDrawBoxData), 0);
	p->x = x;
	p->y = y;
	p->width  = w;
	p->height = h;
	p->pixel  = LIBGGI_GC_FGCOLOR(vis);

	err = tclient_write(priv->client, &ev);

	if (err == TELE_ERROR_SHUTDOWN) {
		TELE_HANDLE_SHUTDOWN;
	}	/* if */

	return err;
}	/* GGI_tele_drawbox */
コード例 #6
0
ファイル: pixel.c プロジェクト: Nekrofage/DoomRPi
int GGI_lin32_drawpixel_nc(ggi_visual *vis,int x,int y)
{
	*((uint32_t *) ((uint8_t *)LIBGGI_CURWRITE(vis)
	   + y*LIBGGI_FB_W_STRIDE(vis)+x*sizeof(uint32_t)))
		= LIBGGI_GC_FGCOLOR(vis);

	return 0;
}
コード例 #7
0
ファイル: pixel.c プロジェクト: antrik/libggi
int GGI_t16_drawpixel(struct ggi_visual *vis, int x, int y)
{
	CHECKXY(vis, x, y);
 
	*PIXEL_WADDR(vis, x, y) = LIBGGI_GC_FGCOLOR(vis);

	return 0;
}
コード例 #8
0
ファイル: pixela.c プロジェクト: Nekrofage/DoomRPi
int GGI_t32_drawpixel_nca(ggi_visual *vis, int x, int y)
{
	PREPARE_FB(vis);

	*PIXEL_WADDR(vis, x, y) = LIBGGI_GC_FGCOLOR(vis);

	return 0;
}
コード例 #9
0
ファイル: hline.c プロジェクト: Nekrofage/DoomRPi
int GGI_svga_drawhline_nc(ggi_visual *vis, int x, int y, int w)
{
	vga_setcolor(LIBGGI_GC_FGCOLOR(vis));
	y += vis->w_frame_num * LIBGGI_VIRTY(vis);
	vga_drawline(x,y,x+w-1,y);

	return 0;
}
コード例 #10
0
ファイル: pixel.c プロジェクト: antrik/libggi
int GGI_vgagl_drawpixel(struct ggi_visual *vis, int x, int y)
{
	CHECKXY(vis, x, y);
	
	gl_setpixel(x, y, LIBGGI_GC_FGCOLOR(vis));

	return 0;
}
コード例 #11
0
ファイル: pixel.c プロジェクト: antrik/libggi
int GGIdrawpixel_nc(struct ggi_visual *vis,int x,int y)
{
	/* Supports only 8, 16, 32 bit modes -- 
	   impossible to pixel nonaligned */ 
	memcpy(BANKFB + ((y * LIBGGI_FB_W_STRIDE(vis) + x) << LOGBYTPP),
	       &LIBGGI_GC_FGCOLOR(vis), (1 << LOGBYTPP));

	return 0;
}
コード例 #12
0
ファイル: pixel.c プロジェクト: antrik/libggi
int GGI_lin1r_drawpixel_nc(struct ggi_visual *vis, int x, int y)
{
    if (LIBGGI_GC_FGCOLOR(vis) & 1) {
        *PIXEL_WADDR(vis,x,y) |=  (0x01 << (x & 7));
    } else {
        *PIXEL_WADDR(vis,x,y) &= ~(0x01 << (x & 7));
    }

    return 0;
}
コード例 #13
0
ファイル: pixela.c プロジェクト: antrik/libggi
int GGI_lin32_drawpixela(struct ggi_visual *vis,int x,int y)
{
	CHECKXY(vis,x,y);
	PREPARE_FB(vis);
 
	*((uint32_t *) ((uint8_t *)LIBGGI_CURWRITE(vis)
	   + y*LIBGGI_FB_W_STRIDE(vis)+x*sizeof(uint32_t)))
		= LIBGGI_GC_FGCOLOR(vis);

	return 0;
}
コード例 #14
0
ファイル: pixel.c プロジェクト: antrik/libggi
int GGIdrawpixel(struct ggi_visual *vis,int x,int y)
{
        /* This already clips right */
	CHECKXY(vis,x,y);

	/* Supports only 8, 16, 32 bit modes -- 
	   impossible to pixel nonaligned */ 
	memcpy(BANKFB + ((y * LIBGGI_FB_W_STRIDE(vis) + x) << LOGBYTPP),
	       &LIBGGI_GC_FGCOLOR(vis), (1 << LOGBYTPP));

	return 0;
}
コード例 #15
0
ファイル: gc.c プロジェクト: antrik/libggi
void GGI_kgi_mach64_gcchanged(struct ggi_visual *vis, int mask)
{
	if(mask & GGI_GCCHANGED_FG){
		MACH64_CHECK(vis, 2);
		MACH64_WRITE(vis, MACH64_DP_FRGD_CLR);
		MACH64_WRITE(vis, LIBGGI_GC_FGCOLOR(vis));
	}
	if(mask & GGI_GCCHANGED_BG){
		MACH64_CHECK(vis, 2);
		MACH64_WRITE(vis, MACH64_DP_BKGD_CLR);
		MACH64_WRITE(vis, LIBGGI_GC_BGCOLOR(vis));
	}
}
コード例 #16
0
ファイル: box.c プロジェクト: antrik/libggi
int GGI_lin16_drawbox(struct ggi_visual *vis, int x, int y, int origw, int h)
{
	uint32_t *buf32;
	uint16_t *buf16;
	uint32_t val;
	int linediff, oddx;

	LIBGGICLIP_XYWH(vis, x, y, origw, h);
	PREPARE_FB(vis);

	val = LIBGGI_GC_FGCOLOR(vis) | (LIBGGI_GC_FGCOLOR(vis) << 16);
	buf16 = (uint16_t*)((uint8_t*)LIBGGI_CURWRITE(vis)
			 + y*LIBGGI_FB_W_STRIDE(vis) + x*2);
	linediff = LIBGGI_FB_W_STRIDE(vis) - origw*2;
	if (x%2) oddx = 1;
	else oddx = 0;

	while (h--) {
		int w = origw; 
		if (oddx) {
			*(buf16++) = val;
			w--;
		}

		buf32 = (uint32_t*) buf16;
		while (w > 1) {
			*(buf32++) = val;
			w -= 2;
		}
		buf16 = (uint16_t*) buf32;
		if (w) {
			*(buf16++) = val;
		}
		buf16 = (uint16_t*) ((uint8_t*)buf16 + linediff);
	}

	return 0;
}
コード例 #17
0
ファイル: line.c プロジェクト: Nekrofage/DoomRPi
int GGI_kgi_radeon_drawline_2d(ggi_visual *vis, int x1, int y1, int x2, int y2)
{
	struct {
	
		cce_type3_header_t h;
		cce_gui_control_t gc;
		cce_scissor_t tl;
		cce_scissor_t br;
		uint32_t bp;
		cce_polyline_t pl;
	} packet;

	memset(&packet, 0, sizeof(packet));
	
	packet.h.it_opcode = CCE_IT_OPCODE_POLYLINE;
	packet.h.count     = sizeof(packet) / 4 - 2;
	packet.h.type      = 0x3;

	packet.gc.dst_clipping = 1;
	packet.gc.brush_type = 14;
	packet.gc.dst_type   = RADEON_CONTEXT(vis)->dst_type;
	packet.gc.src_type   = 3;
	packet.gc.win31_rop  = ROP3_PATCOPY;

	packet.gc.dst_type = RADEON_CONTEXT(vis)->dst_type;

	packet.tl.x = LIBGGI_GC(vis)->cliptl.x;
	packet.tl.y = LIBGGI_GC(vis)->cliptl.y;
	packet.br.x = LIBGGI_GC(vis)->clipbr.x;
	packet.br.y = LIBGGI_GC(vis)->clipbr.y;

	packet.bp = LIBGGI_GC_FGCOLOR(vis);

	packet.pl.x0 = x1;
	packet.pl.y0 = y1;
	packet.pl.x1 = x2;
	packet.pl.y1 = y2;

	RADEON_WRITEPACKET(vis, packet);
        if (!(LIBGGI_FLAGS(vis) & GGIFLAG_ASYNC)) RADEON_FLUSH(vis);

	return 0;
}
コード例 #18
0
ファイル: draw.c プロジェクト: Nekrofage/DoomRPi
int GGI_tele_drawline(struct ggi_visual *vis, int x,int y, int xe,int ye)
{
	ggi_tele_priv *priv = TELE_PRIV(vis);
	TeleCmdDrawLineData *p;
	TeleEvent ev;

	int err;

	p = tclient_new_event(priv->client, &ev, TELE_CMD_DRAWLINE,
			      sizeof(TeleCmdDrawLineData), 0);
	p->x = x;
	p->y = y;
	p->xe  = xe;
	p->ye = ye;
	p->pixel  = LIBGGI_GC_FGCOLOR(vis);

	err = tclient_write(priv->client, &ev);

	if (err == TELE_ERROR_SHUTDOWN) {
		TELE_HANDLE_SHUTDOWN;
	}	/* if */

	return err;
}	/* GGI_tele_drawline */
コード例 #19
0
ファイル: pixel.c プロジェクト: antrik/libggi
int GGI_t32_drawpixel_nc(struct ggi_visual *vis, int x, int y)
{
	*PIXEL_WADDR(vis, x, y) = LIBGGI_GC_FGCOLOR(vis);

	return 0;
}
コード例 #20
0
ファイル: pixel.c プロジェクト: antrik/libggi
int GGI_stubs_drawpixel_nc(struct ggi_visual *vis, int x, int y)
{
	return _ggiPutPixelNC(vis, x, y, LIBGGI_GC_FGCOLOR(vis));
}
コード例 #21
0
ファイル: draw.c プロジェクト: Nekrofage/DoomRPi
int GGI_tele_drawpixel_nc(ggi_visual *vis, int x, int y)
{
	return GGI_tele_putpixel_nc(vis, x, y, LIBGGI_GC_FGCOLOR(vis));
}	/* GGI_tele_drawpixel_nc */
コード例 #22
0
ファイル: draw.c プロジェクト: Nekrofage/DoomRPi
int GGI_tele_drawpixel(ggi_visual *vis, int x, int y)
{
	CHECKXY(vis, x, y);

	return GGI_tele_putpixel_nc(vis, x, y, LIBGGI_GC_FGCOLOR(vis));
}	/* GGI_tele_drawpixel */
コード例 #23
0
ファイル: pixel.c プロジェクト: antrik/libggi
int GGI_vgagl_drawpixel_nc(struct ggi_visual *vis, int x, int y)
{
	gl_setpixel(x, y, LIBGGI_GC_FGCOLOR(vis));

	return 0;
}
コード例 #24
0
ファイル: pixel.c プロジェクト: Nekrofage/DoomRPi
int GGI_stubs_drawpixel(ggi_visual *vis, int x, int y)
{
	return LIBGGIPutPixel(vis, x, y, LIBGGI_GC_FGCOLOR(vis));
}
コード例 #25
0
ファイル: gtext.c プロジェクト: antrik/libggi
int GGI_lin8_putc(struct ggi_visual *vis, int x, int y, char c)
{
#define char_width 8
#define char_height 8
	int offset, x_run, y_run;
	uint8_t *bitmap;

	bitmap = (uint8_t *)(font) + ( c * char_height );
	x_run = char_width;
	y_run = char_height;
	offset = 0;

	{
		int delta;

		delta = LIBGGI_GC(vis)->cliptl.x - x;
		if ( delta > 0 ) {
			if ( delta >= x_run ) {
				return 0;
			} else {
				x_run -= delta;
				offset += delta;
				x += delta;
			}
		}
		delta = ( x + x_run ) - LIBGGI_GC(vis)->clipbr.x;
		if ( delta > 0 ) {
			if ( delta >= x_run ) {
				return 0;
			} else {
				x_run -= delta;
			}
		}
		delta = LIBGGI_GC(vis)->cliptl.y - y;
		if ( delta > 0 ) {
			if ( delta >= y_run ) {
				return 0;
			} else {
				y_run -= delta;
				bitmap += delta;
				y += delta;
			}
		}
		delta = ( y + y_run ) - LIBGGI_GC(vis)->clipbr.y;
		if ( delta > 0 ) {
			if ( delta >= y_run ) {
				return 0;
			} else {
				y_run -= delta;
			}
		}
	}

	{
		int y_iter;
		register uint8_t *fb;
		int add_stride;

		PREPARE_FB(vis);

		add_stride = LIBGGI_FB_W_STRIDE(vis);
		fb = (uint8_t *)LIBGGI_CURWRITE(vis) + ( y * add_stride ) + x;
		add_stride -= x_run;
		y_run += y; x_run += x;

		for ( y_iter = y ; y_iter < y_run ; y_iter++, bitmap++,
		      fb += add_stride )
		{
			register int x_iter;
			register uint8_t row;

			row = *bitmap << offset;

			for ( x_iter = x ; x_iter < x_run ; x_iter++,
			      row <<= 1, fb++ )
			{
				*fb = ( row & 128 )
				      ? (uint8_t)LIBGGI_GC_FGCOLOR(vis)
				      : (uint8_t)LIBGGI_GC_BGCOLOR(vis);
			}
		}
	}

	return 0;
#undef char_width
#undef char_height
}