Помогите заюзать свою палитру в окне Intuition

Все что связано с программированием на Амиге.

Модераторы: striimii, Vinnny

Помогите заюзать свою палитру в окне Intuition

Сообщение AmiJekot 17 окт 2009, 04:40

Ребята. Хочу использовать свои цвета в окне Intuition. Как это сделать?
Пытаюсь использовать функцию -576 FreeColorMap (colormap) (A0), из graphics.library
Тачка виснет при вызове этой функции, потому, что я незнаю формата таблицы (colormap).
Пытался так:
colormap:
db.w $0000
db.w $00ff
...
db.w $ff00
и так 32 значения, не помогло.
Использую режим 640х256х16col
Как должен выглядеть входной параметр к этой функции?
AmiJekot
Юный Амигофренд
Юный Амигофренд
 
Сообщения: 18
Зарегистрирован: 15 окт 2009, 22:06

Re: Помогите заюзать свою палитру в окне Intuition

Сообщение Q-Master 17 окт 2009, 10:21

FreeColorMap должна использоваться для освобождения палитры вьюпорта. Соответственно ей надо подсовывать указатель на занятую таблицу, а не на свою.
GetColorMap аллоцирует колормап с нужным кол-вом цветов, а SetRGB4CM установит нужные цвета. Потом установишь свой колормап вместо вьюпортовского и вуаля.
WBR, Q-Master^MiR
Q-Master
Престарелый Амигодум
Престарелый Амигодум
 
Сообщения: 200
Зарегистрирован: 20 май 2002, 15:41
Откуда: Иваново, Россия

Re: Помогите заюзать свою палитру в окне Intuition

Сообщение AmiJekot 17 окт 2009, 11:20

Спасибо. Правильно ли я понял?
Выполняем функцию GetСolorMap - она сливает рабочую палитру по указ.адресу.
Меняем по этим адресам цвета- SetRGB
и выполняем FreeColorMap - которая подменят цвета с этих адресов.
AmiJekot
Юный Амигофренд
Юный Амигофренд
 
Сообщения: 18
Зарегистрирован: 15 окт 2009, 22:06

Re: Помогите заюзать свою палитру в окне Intuition

Сообщение AmiJekot 17 окт 2009, 13:37

Q-Master, не мог бы описать функцию
-288 SetRGB4 (viewPort, index, r, g, b) (A0,D0,D1,D2,D3)
Что значит viewPort (A0) и index(D0), что там должно быть?
AmiJekot
Юный Амигофренд
Юный Амигофренд
 
Сообщения: 18
Зарегистрирован: 15 окт 2009, 22:06

Re: Помогите заюзать свою палитру в окне Intuition

Сообщение anny 17 окт 2009, 17:57

@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 тоже не юзал..
anny
Беспардонный Амигофлуд
Беспардонный Амигофлуд
 
Сообщения: 1267
Зарегистрирован: 05 дек 2004, 01:22

Re: Помогите заюзать свою палитру в окне Intuition

Сообщение AmiJekot 17 окт 2009, 20:12

Так это были автодоки....... Я подумал на Си чегото..
Я пишу на асме.
Спасибо за ответы, буду разбираться.
А как выглядит на асме viewport structure, формат?
Я так понимаю, это структура как при открытии окна, параметры разной длинны и разных значений.
Но каких значений, какой формат? У меня нет описания этой структуры. Попробую с автодоков чегото нарыть?

А по поводу твоего примера, это ты под какую конфигу делал? У меня А1200 с M-Tec 1230,8Mb, юзаю через внешний ТВ-тюнер. И пишу под Wb.
AmiJekot
Юный Амигофренд
Юный Амигофренд
 
Сообщения: 18
Зарегистрирован: 15 окт 2009, 22:06

Re: Помогите заюзать свою палитру в окне Intuition

Сообщение anny 17 окт 2009, 22:34

Ну в автодоках оно обычно применительно к С все. В старых (до 3.9), есть также ремарки и для асма (ну вот как сдесь написано под параметрами функции d0,d1 и тд). В новых (os4) уже про асм ничего нет. Насчет того как выглядит на асме структура, ну так просто смотри в инклудах (*.i файлы что ты подключаешь в заголовке твоего основного сорца). Например виевпорт структура она в graphics/view.i. Вот как выглядит:

Код: Выделить всё
   STRUCTURE     ViewPort,0
   LONG    vp_Next
   LONG    vp_ColorMap
   LONG    vp_DspIns
   LONG    vp_SprIns
   LONG    vp_ClrIns
   LONG    vp_UCopIns
   WORD    vp_DWidth
   WORD    vp_DHeight
   WORD    vp_DxOffset
   WORD    vp_DyOffset
   WORD    vp_Modes
   BYTE    vp_SpritePriorities
   BYTE    vp_ExtendedModes
   APTR    vp_RasInfo
   LABEL   vp_SIZEOF


Там же и структуры колормапов и тд.

Т.е. если у тебя уже чтото компилится, то значит что ты инклуды системные уже подключаешь. Т.е. просто смотри в них где и чего. Я когда мне надо чтото найти, но не знаю где именно лежит, тупо делаю поиск на нужное мне слово по всем инклудам, что находится в том уже и ищу конкретно нужное.

По поводу моего примера и конфига - работает на любом конфиге, где есть AGA и/или RTG. Т.е. тут не память не важна, не скорость проца, ничего. Даже на 020 все будет плавно быстро и красиво. И все системно полностью, т.е. чипсет не обязателен, но будет и на нем работать (т.е. другим словами под систему (под wb) ). Можешь посмотреть пример всей этой фигни в AGA/RTG версии нашего мага (в котором я это все и кодил). Там сначала просто картинка fadein/out, затем уже fade in сам маг, и в нем уже фейдятся части экрана (т.е. меняется палитра только для кусков).
anny
Беспардонный Амигофлуд
Беспардонный Амигофлуд
 
Сообщения: 1267
Зарегистрирован: 05 дек 2004, 01:22

Re: Помогите заюзать свою палитру в окне Intuition

Сообщение AmiJekot 17 окт 2009, 23:24

Спасибо большое за структуру. Вроде все ясно. А colormap - там адрес на цвета, я вроде понял.
Буду пробовать и разбираться.
А инклуды некакие я не использую.
Делаю так. В Devpac и тело проги и данные. Открываю библиотеки и все.
Картинки вывожу через Intuition - DrawScreen, а в код их копирую из текстового редактора, которым
открываю подготовленный файл. А файл готовлю утилитой на Аминете взял. Она из граф. файлов делает блоки данных, для вставки в код Асма или Си.
Пока так. Все сложно из за незнания. Будут знания будет все оптимальнее. :)
AmiJekot
Юный Амигофренд
Юный Амигофренд
 
Сообщения: 18
Зарегистрирован: 15 окт 2009, 22:06

Re: Помогите заюзать свою палитру в окне Intuition

Сообщение Q-Master 19 окт 2009, 10:04

Только не вздумай сам создавать ручками вьюпорт. 8) Оно у окна уже есть. А если хочешь подключить свой, чтобы сделать дабл-буффер, то есть ф-ция CreateViewPort вроде.
WBR, Q-Master^MiR
Q-Master
Престарелый Амигодум
Престарелый Амигодум
 
Сообщения: 200
Зарегистрирован: 20 май 2002, 15:41
Откуда: Иваново, Россия

Re: Помогите заюзать свою палитру в окне Intuition

Сообщение AmiJekot 21 окт 2009, 22:49

Решил тоже заюзать LoadRGB4, так будет проще.
Но пока ничего не выходит. Вокруг да около хожу. И не могу понять главного - где находится ViewPort,
по какому адресу или как его вычислить.
LoadRGB4 (???,цвет,сколько цветов грузить)
AmiJekot
Юный Амигофренд
Юный Амигофренд
 
Сообщения: 18
Зарегистрирован: 15 окт 2009, 22:06

Re: Помогите заюзать свою палитру в окне Intuition

Сообщение Q-Master 22 окт 2009, 09:43

Адрес вьюпорта указан в структуре окна или экрана (я уже сейчас не помню точно).
WBR, Q-Master^MiR
Q-Master
Престарелый Амигодум
Престарелый Амигодум
 
Сообщения: 200
Зарегистрирован: 20 май 2002, 15:41
Откуда: Иваново, Россия

Re: Помогите заюзать свою палитру в окне Intuition

Сообщение AmiJekot 22 окт 2009, 14:44

Ура!!! Заработало!!!!

А адресс ViewPort`а берем функцией ViewPortAddress() из библиотеки intuition.lib
Палитру гружу LoadGRB4 из библиотеки graphics.lib
Все Ок. Всем спасибо за помощь.
AmiJekot
Юный Амигофренд
Юный Амигофренд
 
Сообщения: 18
Зарегистрирован: 15 окт 2009, 22:06

Re: Помогите заюзать свою палитру в окне Intuition

Сообщение anny 22 окт 2009, 15:18

@AmiJekot
Ну норм что все заработало. А что хоть делаешь ? (в смысле что будет в итоге или что уже в итоге есть) ?
anny
Беспардонный Амигофлуд
Беспардонный Амигофлуд
 
Сообщения: 1267
Зарегистрирован: 05 дек 2004, 01:22

Re: Помогите заюзать свою палитру в окне Intuition

Сообщение AmiJekot 22 окт 2009, 16:55

Делаю игрушку. Не большую под WB. Своя идея, давно хотел попробовать реализовать. Жанр смешен, но скорее больше казуал. Такого я еще не видел. Палитру свою прикрутил. Сейчас займусь графикой уже из созданой палитры.
AmiJekot
Юный Амигофренд
Юный Амигофренд
 
Сообщения: 18
Зарегистрирован: 15 окт 2009, 22:06


Вернуться в Программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

cron