Да. Код в файле draw_controls.inc Только код полностью на C. Если написать на ассемблере, то быстрее будет работать. Реализовать функцию рисующую и на экране и в буфере можно по разному. У меня реализовано так:ты имееш ввиду libGUI ? В каком файле код ?
Code: Select all
void DrawPixel(int x,int y,DWORD color)
{
char r,g,b;
char *ptr;
DWORD *ptr2;
if (x>screen.size_x-1) {x=screen.size_x-1;}
if (y>screen.size_y-1) {y=screen.size_y-1;}
if (x<0) {x=0;}
if (y<0) {y=0;}
switch(screen.draw_output)
{
case DRAW_OUTPUT_SCREEN:
{
x+=screen.x;
y+=screen.y;
gui_ksys_put_pixel_window(x,y,color);
break;
}
case DRAW_OUTPUT_BUFFER:
{
ptr=screen.buffer;
switch(screen.bits_per_pixel)
{
case 24:
{
ptr=ptr+(y*screen.size_x+x)*3;
b=color & 0xff;
color=color >>8;
g=color & 0xff;
color=color >>8;
r=color & 0xff;
ptr[0]=b;
ptr[1]=g;
ptr[2]=r;
break;
}
case 32:
{
ptr2=(DWORD*)ptr+y*screen.size_x+x;
*ptr2=color;
break;
}
default: break;
}
break;
}
}
}
Функций, непосредственно работающих с экраном/буффером 4: DrawPixel(),DrawHorizontalLine(),DrawVerticalLine(),DrawImage(). Все остальные функции рисования используют эти 4. В результате можно рисовать как на экране, так и в буффере.