@AmiJekot
Ну Q-master тебе и сказал, что есть автодоки в которых все полностью описано (каждая функция). Но если ты не в курсе что за автодоки и где их брать, то вот чисто по graphics.library залил тебе
суда.
Кусок с этой автодоки касаемо того что ты спрашиваешь:
graphics.library/SetRGB4 graphics.library/SetRGB4
NAME
SetRGB4 -- Set one color register for this viewport.
SYNOPSIS
SetRGB4( vp, n, r, g, b)
a0 d0 d1:4 d2:4 d3:4
void SetRGB4( struct ViewPort *, SHORT, UBYTE, UBYTE, UBYTE );
FUNCTION
Change the color look up table so that this viewport displays
the color (r,g,b) for pen number n.
INPUTS
vp - pointer to viewport structure
n - the color number (range from 0 to 31)
r - red level (0-15)
g - green level (0-15)
b - blue level (0-15)
RESULT
If there is a ColorMap for this viewport, then the value will
be stored in the ColorMap.
The selected color register is changed to match your specs.
If the color value is unused then nothing will happen.
BUGS
NOTE: Under V36 and up, it is not safe to call this function
from an interrupt, due to semaphore protection of graphics
copper lists.
SEE ALSO
LoadRGB4() GetRGB4() graphics/view.h
graphics.library/SetRGB4CM graphics.library/SetRGB4CM
Виевпорт а0 занчит что в а0 должен быть указатель на виевпорт, а d0 номер цвета от 0 до 31 (ну собственно это и написано в автодоке).
По режиму 640х256х16col не могу подсказать, но я делал под 640x512x256col fade in/out путем изменения палитры. Могу залить сорцы/бинарь если интересно .. (правда это все на С , никакого асма). Юзал я для этого только LoadRGB32 (тоесть установка своей палитры) и больше ничего. Т.е. никаких SetRGB и прочего. Формат таблицы (если ты имеешь ввиду таблицу цветов) слегка неадекватный, в том смысле что для 256 цветов, я юзаю такое:
- Код: Выделить всё
ULONG logo_table[] = { (256 <<16) | 0,
0x00000000, 0x00000000, 0x00000000,
...256 строк такого плана...
0};
Т.е. не просто скажем 0x00,0x00,0x00 строка, а именно 4 раза повторяется одно и тоже (сделано это якобы на будущее, когда будут милионы и милиарды цветов).
Структура когда я делаю тупо фейд с черного в картинку:
- Код: Выделить всё
LoadRGB32(&screen->ViewPort, &black_table[0]); // устанавливаю черную палитру
temp_rp = *window->RPort;
temp_rp.Layer = NULL;
temp_rp.BitMap = AllocBitMap ((ULONG)logo,1,GetBitMapAttr(window->RPort->BitMap,BMA_DEPTH),0,NULL);
WritePixelArray8(window->RPort, 0, 0, 640-1,480-1, (char *)logo, &temp_rp); // вывожу картину (тоесть ее не видно сейчас, т.к. черная палитра)
fade_from_black_to_col_all(screen,logo_table,4); // фукнция по увеличению палитры с черного до 256.
Сама fade функция выглядит так:
- Код: Выделить всё
void fade_from_black_to_col_all(struct Screen *s,APTR to,UWORD fspd)
{
int cols,a,b;
APTR from=0;
ULONG *pa,*pb;
UWORD cur=0;
if((from=AllocVec(3080,MEMF_FAST|MEMF_CLEAR)))
{
SetSpeed(fspd);
*(UWORD *)from=0x0100; //160
cols=256;
do
{
pa=(ULONG *)((ULONG)to+(ULONG)4);
pb=(ULONG *)((ULONG)from+(ULONG)4);
cur=256*3; // ! how many colors in table !
for(a=0;a<cols;a++)
{
for(b=0;b<3;b++)
{
if((*(pa)-*pb)>step) { *(pb++)+=step; pa++; }
else { *(pb++)=*(pa++); cur--; }
}
}
WaitTOF();
LoadRGB32(&s->ViewPort,(ULONG *)from);
} while(cur);
FreeVec(from);
}
return;
}
Никакого freecolormap тоже не юзал..