BasicC/Projektor

ColorRGBA(r,g,b,a)Edytuj

Ustawia kolor rysowania w formacie RGBA. Dotyczy on takich komend jak Cls, Plot, Line... Nie dotyczy np. GPrint, dla którego kolor ustawia się oddzielnie. Jest to podstawowa i najszybsza komenda ustawiania koloru.
Uwaga: komenda nie zmienia wartości zmiennej Color.

Color(k)Edytuj

Ustawia kolor rysowania w formacie liczby typu Uint32 (całkowita, dodatnia, 32-bitowa). Ustawiana jest też zmienna Color używana np. do pisania czcionką TTF.

W celu konwersji między tymi formatami w BasicSDL zadeklarowana jest unia BASSDLColor o polach Uint32 BAS i SDL_Color SDL.

SDL_Color to struktura przechowująca kolor RGBA o polach:

Uint8 r składowa czerwona w zakresie 0-255
Uint8 g składowa zielona w zakresie 0-255
Uint8 b składowa niebieska w zakresie 0-255
Uint8 a składowa alfa (przezroczystość) w zakresie 0-255

Ponadto w BasicSDL zadeklarowane są zmienne pomocnicze Color, ColorB, ColorC typu BASSDLColor wykorzystywane np. do wyświetlania tekstu TTF. Jeśli kolor zapisujemy pojedynczą liczbą odwołujemy się np. przez Color.BAS, np. Color.BAS=65535;, jeśli w formacie RGBA: Color.SDL.r, Color.SDL.g, Color.SDL.b, Color.SDL.a.

Colors(F,B)Edytuj

Ustawia zmienne Color i ColorB w formacie liczby, czyli wykonuje {Color.BAS=F;ColorB.BAS=B;}

ColorSDL(C)Edytuj

Ustawia kolor rysowania na zapisany w zmiennej C typu SDL_Color. Wywołuje SDL_SetRenderDrawColor(SDLRenderer,C.r,C.g,C.b,C.a);

RGBA(R,G,B,A)Edytuj

Funkcja zwraca nr koloru podanego w formacie RGBA.

ClsEdytuj

Czyści ekran. Dokładnie wypełnia projektor (lub inny target) wybranym wcześniej kolorem (domyślnie czarny). Wskazane jest okresowe czyszczenie ekranu i wygenerowanie całego widoku ponownie. Wykonuje SDL_RenderClear(SDLRenderer);

IntScaling(enable)Edytuj

Gdy enable wynosi 1 komenda włącza skalowanie całkowite przy rysowaniu niezależnym od rozdzielczości, gdy 0 - wyłącza. Wykonuje SDL_RenderSetIntegerScale(SDLRenderer,enable);

SetScale(scaleX,scaleY)Edytuj

Ustawia wspólczynniki skalowania dla rysowania. Wywołuje SDL_RenderSetScale(SDLRenderer,scaleX,scaleY);

Clip(X,Y,W,H)Edytuj

Ustawia obszar dla rysowania. Obekty poza tym obszarem nie będa wyświetlane. Wykonuje {DST.x=X;DST.y=Y;DST.w=W;DST.h=H;SDL_RenderSetClipRect(SDLRenderer,&DST);}
By wyłączyć obcinanie należy wywołać SDL_RenderSetClipRect(SDLRenderer,NULL);

SDL_Color(C,R,G,B,A)Edytuj

Wpisuje odpowiednie wartości R G B A w zmiennej C typu SDL_Color. Wykonuje {C.r=R;C.g=G;C.b=B;C.a=A;}

SetDrawBlendMode(Mode)Edytuj

Ustawia tryb mieszania używany przy operacjach rysunkowych (np. linie). Najpopularniejszy to SDL_BLENDMODE_BLEND czyli 1, 0 to brak mieszania. Wywołuje SDL_SetRenderDrawBlendMode(SDLRenderer,Mode);, szczegóły w dokumentacji. Zdefiniowany jest dodatkowy tryb zwracany przez SDL_BLENDMODE_REV (jest to makro wywołujące SDL_ComposeCustomBlendMode), obraz w tym trybie (jeśli jest on obsługiwany przez system) skopiowany do targetu w kolorze białym daje obraz w odwróconych kolorach. Wykonuje operację SDL_BLENDOPERATION_REV_SUBTRACT, która, wg dokumentacji SDL, wykonuje odejmowanie kolorów i kanału alfa SRC-DST, gdzie SRC to obraz źródłowy, a DSC - target, wydaję się jednak, że faktycznie wykonywane jest DST-SRC.

ShowPageEdytuj

Powoduje wyświetlenie zawartości projektora, czyli odświeża widok okna. Jeśli VSYNC jest 1 (domyślnie) program jest wstrzymywany do czasu odświeżenia ekranu monitora. Wywołuje SDL_RenderPresent(SDLRenderer);

Viewport(X,Y,W,H)Edytuj

Ustawia obszar rysowania. Wykonuje {DST.x=X;DST.y=Y;DST.w=W;DST.h=H;SDL_RenderSetViewport(SDLRenderer,&DST);}

Przykład:

#include "BasicSDL.h"

MAIN
  SDLOpen(0)
  Color(-255)
  Viewport(100,100,300,300)
  Circle(50,50,100)
  PRect(50,100,50,50)
  Color(255)
  PRect(75,125,50,50)
  SetScale(2,2)
  Circle(50,50,100)
  SetDrawBlendMode(1)
  ColorRGBA(255,255,0,127)
  PRect(0,0,50,60)
  ShowPage
  WaitInKey
  SDLQuit
ENDMAIN