Serwis Edukacyjny
Nauczycieli
w I-LO w Tarnowie

obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: mgr Jerzy Wałaszek
Uaktualniono: 31.07.2022

©2024 mgr Jerzy Wałaszek
I LO w Tarnowie

Interfejs SDL2:

SDL_CreateSoftwareRenderer

SPIS TREŚCI

Rozdział jest tłumaczeniem oryginalnej instrukcji dla biblioteki SDL2.

SDL_CreateSoftwareRenderer

Użyj tej funkcji, aby stworzyć programowy dwuwymiarowy kontekst graficzny dla powierzchni.

Składnia

SDL_Renderer* SDL_CreateSoftwareRenderer(SDL_Surface* surface)

Parametry funkcji

surface wskaźnik do struktury the SDL_Surface reprezentującej powierzchnię graficzną, na której będzie operował kontekst.

Wartość zwracana

Zwraca kontekst graficzny lub NULL przy błędzie; wywołaj funkcję SDL_GetError(), aby otrzymać więcej informacji na temat błędu.

Przykładowy kod

#include "SDL.h"

SDL_Window *window;
SDL_Renderer *renderer;
int done;

void DrawChessBoard(SDL_Renderer * renderer)
{
    int row = 0,column = 0,x = 0;
    SDL_Rect rect, darea;

    /* Pobierz rozmiar powierzchni rysunkowej */
    SDL_RenderGetViewport(renderer, &darea);

    for ( ; row < 8; row++)
    {
        column = row%2;
        x = column;
        for ( ; column < 4+(row%2); column++)
        {
            SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0xFF);

            rect.w = darea.w/8;
            rect.h = darea.h/8;
            rect.x = x * rect.w;
            rect.y = row * rect.h;
            x = x + 2;
            SDL_RenderFillRect(renderer, &rect);
        }
    }
}

void loop()
{
    SDL_Event e;
    while (SDL_PollEvent(&e))
    {
        if (e.type == SDL_QUIT)
        {
            done = 1;
            return;
        }

        if ((e.type == SDL_KEYDOWN) && (e.key.keysym.sym == SDLK_ESCAPE))
        {
            done = 1;
            return;
        }
    }

    DrawChessBoard(renderer);

    /* Mamy wszystko na powierzchni kontekstu,
       teraz uaktualniamy rysunek w oknie ekranowym */
    SDL_UpdateWindowSurface(window);
}

int main(int argc, char *argv[])
{
    SDL_Surface *surface;

    /* Włącz standardowy log aplikacji */
    SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);

    /* Inicjalizuj SDL */
    if (SDL_Init(SDL_INIT_VIDEO) != 0)
    {
        SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init fail : %s\n", SDL_GetError());
        return 1;
    }

    /* Utwórz okno i kontekst dla danej powierzchni */
    window = SDL_CreateWindow("Szachownica", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0);
    if (!window)
    {
        SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Window creation fail : %s\n",SDL_GetError());
        return 1;
    }
    surface = SDL_GetWindowSurface(window);
    renderer = SDL_CreateSoftwareRenderer(surface);
    if (!renderer)
    {
        SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Render creation for surface fail : %s\n",SDL_GetError());
        return 1;
    }

    /* Wymaż powierzchnię kontekstu określonym kolorem */
    SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
    SDL_RenderClear(renderer);

    /* Narysuj obrazek na powierzchni */
    done = 0;

    while (!done)
    {
        loop();
    }

    SDL_Quit();
    return 0;
}

Uwagi

Dwie pozostałe funkcje API (ang. Aplication Programming Interface = programistyczny interfejs aplikacji) do tworzenia SDL_Renderer:

1) SDL_CreateRenderer()

2) SDL_CreateWindowAndRenderer()

Powiązane funkcje


Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2024 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.