<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="gl">
	<id>http://web.iesrodeira.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Programaci%C3%B3n_do_FrameBuffer</id>
	<title>Programación do FrameBuffer - Historial de revisións</title>
	<link rel="self" type="application/atom+xml" href="http://web.iesrodeira.com/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Programaci%C3%B3n_do_FrameBuffer"/>
	<link rel="alternate" type="text/html" href="http://web.iesrodeira.com/mediawiki/index.php?title=Programaci%C3%B3n_do_FrameBuffer&amp;action=history"/>
	<updated>2026-09-13T13:33:47Z</updated>
	<subtitle>Historial de revisións desta páxina no wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>http://web.iesrodeira.com/mediawiki/index.php?title=Programaci%C3%B3n_do_FrameBuffer&amp;diff=1833&amp;oldid=prev</id>
		<title>Xavi: Nova páxina: &quot;A seguinte libraría de funcións ilustra como se pode programar o modo gráfico de consola &#039;&#039;&#039;framebuffer&#039;&#039;&#039;.  === Ficheiro de Cabeceira === &lt;source lang=&#039;C&#039;&gt; #ifndef __GRAFICOSH...&quot;</title>
		<link rel="alternate" type="text/html" href="http://web.iesrodeira.com/mediawiki/index.php?title=Programaci%C3%B3n_do_FrameBuffer&amp;diff=1833&amp;oldid=prev"/>
		<updated>2014-06-26T09:32:31Z</updated>

		<summary type="html">&lt;p&gt;Nova páxina: &amp;quot;A seguinte libraría de funcións ilustra como se pode programar o modo gráfico de consola &amp;#039;&amp;#039;&amp;#039;framebuffer&amp;#039;&amp;#039;&amp;#039;.  === Ficheiro de Cabeceira === &amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt; #ifndef __GRAFICOSH...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Páxina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;A seguinte libraría de funcións ilustra como se pode programar o modo gráfico de consola &amp;#039;&amp;#039;&amp;#039;framebuffer&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Ficheiro de Cabeceira ===&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
#ifndef __GRAFICOSH__&lt;br /&gt;
#define __GRAFICOSH__&lt;br /&gt;
&lt;br /&gt;
#define NEGRO    0&lt;br /&gt;
#define BLANCO   1&lt;br /&gt;
#define GRIS     2&lt;br /&gt;
#define ROJO     3&lt;br /&gt;
#define VERDE    4&lt;br /&gt;
#define AZUL     5&lt;br /&gt;
#define AMARILLO 6&lt;br /&gt;
#define NARANJA  7&lt;br /&gt;
#define MORADO   8&lt;br /&gt;
&lt;br /&gt;
typedef struct tagPALETA {&lt;br /&gt;
  unsigned char r;&lt;br /&gt;
  unsigned char b;&lt;br /&gt;
  unsigned char g;&lt;br /&gt;
} PALETA;&lt;br /&gt;
&lt;br /&gt;
void setcolor(int idx,int r,int g,int b);&lt;br /&gt;
int addcolor(int r,int g,int b);&lt;br /&gt;
PALETA *getcolor(int idx);&lt;br /&gt;
void initcolors(void);&lt;br /&gt;
int sizex(void);&lt;br /&gt;
int sizey(void);&lt;br /&gt;
&lt;br /&gt;
void lineaH(int y,int x,int sz,int color);&lt;br /&gt;
void lineaV(int y,int x,int sz,int color);&lt;br /&gt;
void putpixel(int y,int x,int r,int g,int b);&lt;br /&gt;
void setpixel(int y,int x,int color);&lt;br /&gt;
void clrscr(void);&lt;br /&gt;
void putsprite(int y,int x,int *sprite);&lt;br /&gt;
char *initgraphics (int *resy, int *resx);&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Libraría ===&lt;br /&gt;
&amp;lt;source lang=&amp;#039;C&amp;#039;&amp;gt;&lt;br /&gt;
#include &amp;lt;linux/fb.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/mman.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/ioctl.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
#include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;
#include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;graficos.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
char *__memvid;&lt;br /&gt;
int __resx;&lt;br /&gt;
int __resy;&lt;br /&gt;
int __Bpp;&lt;br /&gt;
int __sizevid;&lt;br /&gt;
&lt;br /&gt;
PALETA __paleta[2048];&lt;br /&gt;
int __maxcolor=0;&lt;br /&gt;
&lt;br /&gt;
int sizex(void)&lt;br /&gt;
{&lt;br /&gt;
  return __resx;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int sizey(void)&lt;br /&gt;
{&lt;br /&gt;
  return __resy;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void initcolors(void)&lt;br /&gt;
{&lt;br /&gt;
  addcolor(0,0,0);&lt;br /&gt;
  addcolor(255,255,255);&lt;br /&gt;
  addcolor(128,128,128);&lt;br /&gt;
  addcolor(255,0,0);&lt;br /&gt;
  addcolor(0,255,0);&lt;br /&gt;
  addcolor(0,0,255);&lt;br /&gt;
  addcolor(246,243,24);&lt;br /&gt;
  addcolor(249,143,4);&lt;br /&gt;
  addcolor(249,4,196);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void setcolor(int idx,int r,int g,int b)&lt;br /&gt;
{&lt;br /&gt;
   __paleta[idx].r=r;&lt;br /&gt;
   __paleta[idx].g=g;&lt;br /&gt;
   __paleta[idx].b=b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int addcolor(int r,int g,int b)&lt;br /&gt;
{&lt;br /&gt;
   int ret=-1;&lt;br /&gt;
&lt;br /&gt;
   if (__maxcolor&amp;lt;2048)&lt;br /&gt;
   {&lt;br /&gt;
      ret=__maxcolor;&lt;br /&gt;
      __paleta[__maxcolor].r=r;&lt;br /&gt;
      __paleta[__maxcolor].g=g;&lt;br /&gt;
      __paleta[__maxcolor].b=b;&lt;br /&gt;
      __maxcolor++;&lt;br /&gt;
   }&lt;br /&gt;
   return ret;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
PALETA *getcolor(int idx)&lt;br /&gt;
{&lt;br /&gt;
   return &amp;amp;__paleta[idx];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void clrscr()&lt;br /&gt;
{&lt;br /&gt;
  memset(__memvid,0,__sizevid);&lt;br /&gt;
  system(&amp;quot;clear&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void putsprite(int y, int x, int *dibujo)&lt;br /&gt;
{&lt;br /&gt;
  int sy=*dibujo;&lt;br /&gt;
  int sx=*(dibujo+1);&lt;br /&gt;
  int i,j;&lt;br /&gt;
&lt;br /&gt;
  dibujo+=2;&lt;br /&gt;
  for (i=0;i&amp;lt;sy;i++)&lt;br /&gt;
  {&lt;br /&gt;
    for (j=0;j&amp;lt;sx;j++)&lt;br /&gt;
    {&lt;br /&gt;
       //printf(&amp;quot;%d&amp;quot;,*dibujo);&lt;br /&gt;
       setpixel(y+i,x+j,*dibujo);&lt;br /&gt;
       dibujo++;&lt;br /&gt;
    }&lt;br /&gt;
    //printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
                                                                                                                                                                                                                                                                                                                             void setpixel(int y,int x,int color)&lt;br /&gt;
{&lt;br /&gt;
 putpixel(y,x,__paleta[color].r,__paleta[color].g,__paleta[color].b);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void lineaH(int y,int x,int sz,int color)&lt;br /&gt;
{&lt;br /&gt;
  int i;&lt;br /&gt;
&lt;br /&gt;
  for(i=x;i&amp;lt;x+sz;i++) setpixel(y,i,color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void lineaV(int y,int x,int sz,int color)&lt;br /&gt;
{&lt;br /&gt;
  int i;&lt;br /&gt;
&lt;br /&gt;
  for(i=y;i&amp;lt;y+sz;i++) setpixel(i,x,color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void putpixel(int y,int x,int r,int g,int b)&lt;br /&gt;
{&lt;br /&gt;
   char *pos;&lt;br /&gt;
   unsigned char col;&lt;br /&gt;
&lt;br /&gt;
   if ((y&amp;gt;__resy-1)||(x&amp;gt;__resx-1)||(y&amp;lt;0)||(x&amp;lt;0)) return;&lt;br /&gt;
   pos=__memvid+y*__resx*__Bpp+x*__Bpp;&lt;br /&gt;
   switch(__Bpp)&lt;br /&gt;
   {&lt;br /&gt;
      case 2: r=r&amp;gt;&amp;gt;3;&lt;br /&gt;
              g=g&amp;gt;&amp;gt;3;&lt;br /&gt;
              b=b&amp;gt;&amp;gt;3;&lt;br /&gt;
              col=(r&amp;lt;&amp;lt;3)+(g&amp;gt;&amp;gt;2);&lt;br /&gt;
              *(pos+1)=col;&lt;br /&gt;
              col=((g&amp;amp;0x03)&amp;lt;&amp;lt;6)+(b&amp;gt;&amp;gt;1);&lt;br /&gt;
              *(pos)=col;&lt;br /&gt;
              break;&lt;br /&gt;
      case 3: *pos=b;&lt;br /&gt;
              *(pos+1)=g;&lt;br /&gt;
              *(pos+2)=r;&lt;br /&gt;
              break;&lt;br /&gt;
      case 4: *pos=b;&lt;br /&gt;
              *(pos+1)=g;&lt;br /&gt;
              *(pos+2)=r;&lt;br /&gt;
              *(pos+3)=0;&lt;br /&gt;
              break;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
char *initgraphics (int *resy, int *resx)&lt;br /&gt;
{&lt;br /&gt;
        int framebuffer_device;&lt;br /&gt;
        int line_size, buffer_size, i;&lt;br /&gt;
        struct fb_var_screeninfo var_info;&lt;br /&gt;
&lt;br /&gt;
        framebuffer_device = open (&amp;quot;/dev/fb0&amp;quot;, O_RDWR);&lt;br /&gt;
        ioctl (framebuffer_device, FBIOGET_VSCREENINFO, &amp;amp;var_info);&lt;br /&gt;
        __Bpp=var_info.bits_per_pixel/8;&lt;br /&gt;
&lt;br /&gt;
        line_size = var_info.xres * __Bpp;&lt;br /&gt;
        __sizevid = line_size * var_info.yres;&lt;br /&gt;
&lt;br /&gt;
        var_info.xoffset = 0;&lt;br /&gt;
        var_info.yoffset = 0;&lt;br /&gt;
        ioctl (framebuffer_device, FBIOPAN_DISPLAY, &amp;amp;var_info); // == -1);&lt;br /&gt;
&lt;br /&gt;
        __memvid = (char *) mmap (NULL, __sizevid, PROT_READ | PROT_WRITE, MAP_SHARED, framebuffer_device, 0);&lt;br /&gt;
&lt;br /&gt;
        *resx=__resx=var_info.xres;&lt;br /&gt;
        *resy=__resy=var_info.yres;&lt;br /&gt;
        return __memvid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xavi</name></author>
	</entry>
</feed>