Przejdź do zawartości

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). Ustawia również wartość zmiennej Color[0] używanej np. do pisania czcionką TTF.

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

Colors(F,B)

[edytuj]

Ustawia zmienne Color[0] i Color[1], czyli wykonuje {Color[0]=F;Color[1]=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 czyszczenie ekranu i wygenerowanie całego widoku ponownie w każdym przebiegu pętli głównej. Wykonuje SDL_RenderClear(SDLRenderer);

ClRect(X,Y,W,H)

[edytuj]

Jak Cls, ale dla danego prostokątnego obszaru targetu.

IntScaling(enable)

[edytuj]

Gdy włączone 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ółczynniki skalowania dla rysowania. Wywołuje SDL_RenderSetScale(SDLRenderer,scaleX,scaleY);

Clip(X,Y,W,H)

[edytuj]

Ustawia obszar dla rysowania. Obiekty poza tym obszarem nie będą 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