BasicC/Projektor
Uwaga ! Od wersji 1.35 unia BASSDLColor została zastąpiona tablicami: Color jest 3-elementową tablicą liczb Uint32, do przechowywania wartości 3 kolorów, zamiast wcześniejszych Color, ColorB, ColorC, a ColorB jest tablicą 12-elementową liczb Uint8 wskazującą na ten sam obszar pamięci, za pomocą której można odczytywać poszczególne składowe RGBA tych kolorów, np: ColorB[0] - wartość składowej R koloru Color[0], ColorB[5] - składowa G Color[1].
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.
Cls
[edytuj]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 w każdym przebiegu pętli. Wykonuje SDL_RenderClear(SDLRenderer);
ClRect(X,Y,W,H)
[edytuj]Jak Cls, ale dla danego prostokątnego obszaru targetu.
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);}
ClipOff
[edytuj]Wyłącza obcinanie ustawione komendą Clip.
SDLColor(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;} Do wersji 1.34 komenda miała postać SDL_Color.
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. Kolejny zdefiniowany tryb to SDL_BLENDMODE_SUB wykonujący SDL_BLENDOPERATION_SUBTRACT, powoduje odwrócenie kolorów jeśli nałożymy na dany obraz piksele w białym kolorze.
ShowPage
[edytuj]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