BasicC/Projektor

Z Wikibooks, biblioteki wolnych podręczników.
 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. 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);

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.

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