Serwis Edukacyjny
Nauczycieli
w I-LO w Tarnowie

Do strony głównej I LO w Tarnowie

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

logo

Autor artykułu: mgr Jerzy Wałaszek

 

SDL2

Interfejs SDL2:

SDL_RenderCopy

Rozdziały:
     Interfejs SDL2 wg nazw
     Interfejs SDL2 wg kategorii

 

Rozdział jest tłumaczeniem oryginalnej instrukcji dla biblioteki SDL2. Oryginał znajdziesz pod tym adresem: https://wiki.libsdl.org/CategoryAPI.

SDL_RenderCopy

Użyj tej funkcji, aby skopiować część tekstury na bieżącą powierzchnię rysunkową.

Składnia

int SDL_RenderCopy(SDL_Renderer*   renderer,
                   SDL_Texture*    texture,
                   const SDL_Rect* srcrect,
                   const SDL_Rect* dstrect)

Parametry funkcji

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.

Wartość zwracana

Zwraca 0 przy sukcesie lub ujemny kod błędu przy niepowodzeniu; wywołaj funkcję SDL_GetError(), aby otrzymać więcej informacji na temat błędu.

Przykładowy kod

#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;
}

Uwagi

Tekstura jest łączona z powierzchnią docelową w oparciu o jej tryb wtapiania, ustawiony przez SDL_SetTextureBlendMode().

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()

Powiązane funkcje

 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2021 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: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.