|
Serwis Edukacyjny Nauczycieli w I-LO w Tarnowie
Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2026 mgr Jerzy Wałaszek
|
SDL_RenderCopy
| SPIS TREŚCI |
Rozdział jest tłumaczeniem oryginalnej instrukcji dla biblioteki SDL2.
Użyj tej funkcji, aby skopiować część tekstury na bieżącą powierzchnię rysunkową.
int SDL_RenderCopy(SDL_Renderer* renderer,
SDL_Texture* texture,
const SDL_Rect* srcrect,
const SDL_Rect* dstrect)
|
| renderer | kontekst graficzny. |
| texture | tekstura źródłowa; zobacz do Uwag. |
| srcrect | struktura prostokąta źródłowego SDL_Rect lub NULL dla całej tekstury. |
| dstrect | struktura prostokąta docelowego SDL_Rect lub NULL dla całej docelowej powierzchni rysunkowej; tekstura zostanie rozciągnięta, aby wypełnić cały docelowy prostokąt. |
#include "SDL.h"
#define SHAPE_SIZE 16
int main(int argc, char *argv[])
{
SDL_Window* Main_Window;
SDL_Renderer* Main_Renderer;
SDL_Surface* Loading_Surf;
SDL_Texture* Background_Tx;
SDL_Texture* BlueShapes;
/* Prostokaty do rysowania, które będą określać źródło (wewnątrz tekstury)
i cel (na ekranie) przy rysowaniu naszych tekstur. */
SDL_Rect SrcR;
SDL_Rect DestR;
SrcR.x = 0;
SrcR.y = 0;
SrcR.w = SHAPE_SIZE;
SrcR.h = SHAPE_SIZE;
DestR.x = 640 / 2 - SHAPE_SIZE / 2;
DestR.y = 580 / 2 - SHAPE_SIZE / 2;
DestR.w = SHAPE_SIZE;
DestR.h = SHAPE_SIZE;
/* Zanim możemy cokolwiek narysować, potrzebujemy okna i kontekstu */
Main_Window = SDL_CreateWindow("SDL_RenderCopy Example",
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 580, 0);
Main_Renderer = SDL_CreateRenderer(Main_Window, -1, SDL_RENDERER_ACCELERATED);
/* Ładowanie tekstury tła. Ponieważ SDL_LoadBMP() zwraca powierzchnię
graficzną, zamieniamy ją w teksturę dla szybkich, przyspieszanych sprzętowo
kopiowań bitów. */
Loading_Surf = SDL_LoadBMP("Background.bmp");
Background_Tx = SDL_CreateTextureFromSurface(Main_Renderer, Loading_Surf);
SDL_FreeSurface(Loading_Surf); /* mamy teraz teksturę -> zwalniamy powierzchnię */
/* Ładujemy dodatkową teksturę */
Loading_Surf = SDL_LoadBMP("Blueshapes.bmp");
BlueShapes = SDL_CreateTextureFromSurface(Main_Renderer, Loading_Surf);
SDL_FreeSurface(Loading_Surf);
/* Teraz zaczyna się zabawa.
To będzie rysowało obracający się wybór niebieskich kształtów
na środku ekranu */
int i;
int n;
for (i = 0; i < 2; ++i)
{
for(n = 0; n < 4; ++n)
{
SrcR.x = SHAPE_SIZE * (n % 2);
if (n > 1)
{
SrcR.y = SHAPE_SIZE;
}
else
{
SrcR.y = 0;
}
/* rysuj tło, gdzie NULL dla prostokątów źródła i celu
po prostu oznacza "użyj wartości standardowych" */
SDL_RenderCopy(Main_Renderer, Background_Tx, NULL, NULL);
/* rysuj bieżący krok animacji naszego kształtu */
SDL_RenderCopy(Main_Renderer, BlueShapes, &SrcR, &DestR);
SDL_RenderPresent(Main_Renderer);
SDL_Delay(500);
}
}
/* Kontekst graficzny działa dosyć podobnie do dużego płótna:
gdy używasz RenderCopy(), nakładasz farbę, za każdym razem nakładając ją
na wierzchu.
Możesz zmienić sposób wtapiania nowych danych w dane już obecne na ekranie.
Gdy twój 'obrazek' jest gotowy, pokazujesz go
za pomocą SDL_RenderPresent(). */
SDL_DestroyTexture(BlueShapes);
SDL_DestroyTexture(Background_Tx);
SDL_DestroyRenderer(Main_Renderer);
SDL_DestroyWindow(Main_Window);
SDL_Quit();
return 0;
}
|
Kolor tekstury jest modyfikowany w oparciu o jej modulację koloru ustawioną przez SDL_SetTextureColorMod().
Przezroczystość tekstury jest modyfikowana w oparciu o jej modulację alfa ustawioną przez SDL_SetTextureAlphaMod()
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.