A számítógépes demoscene csúcsprodukciói — real-time grafika, kézzel csiszolt assembly, 4k és 64k intrók, amelyek a lehetetlent tolták a képernyőre. Fent az ikonikus válogatás (PC, Amiga, C64, oldschool), lejjebb pedig a Revision-demoparty évről évre nyertes produkciói (2014→2026) három kategóriában: PC demo, 4k intro és 64k intro. Minden kártya a produkció pouet.net oldalára és egy videó-felvételre mutat.
Saját, működő SDL2-tutorial macOS-re: a nulláról egy animált plazmáig.
Az SDL2 egy hordozható ablak-, input- és renderelő-réteg (macOS, Linux, Windows), a demoscene-kódolás ideális belépője. Ez a mini tutorial saját, kommentelt példakóddal vezet végig: a telepítéstől egy futó ablakon és az esemény-cikluson át egészen egy animált plazma-effektig. A kód a miénk — másold, fordítsd, és bütyköld tovább.
Teljes SDL demoscene-tanfolyam → ~20 rész, alapoktól az effektekig — saját írású, kommentelt C++/SDL2 kóddalmacOS-en a legrövidebb út a Homebrew.
Telepítsd az SDL2-t, majd a sdl2-config adja a fordító- és linker-kapcsolókat —
nincs kézi útvonal-bűvészkedés:
# SDL2 telepítése
brew install sdl2
# Fordítás clang++-szal (a $(...) beszúrja a -I és -l kapcsolókat)
clang++ main.cpp $(sdl2-config --cflags --libs) -o app
# Futtatás
./app
Minden real-time program váza ugyanez: SDL_Init → ablak és renderer
létrehozása → fő ciklus, amely SDL_PollEvent-tel figyeli a bemenetet,
töröl (SDL_RenderClear), rajzol, majd kirakja a képkockát
(SDL_RenderPresent). Kilépés az ablak bezárására (SDL_QUIT) vagy
ESC-re. Az alábbi teljes, fordítható program pont ezt csinálja — és rögtön be is teszi a
demoscene-ízű extrát: egy időben hullámzó plazmát.
#include <SDL2/SDL.h>
#include <math.h>
int main(int argc, char** argv) {
// 1) SDL inicializálás – csak a videó-alrendszer kell most
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
SDL_Log("SDL_Init hiba: %s", SDL_GetError());
return 1;
}
const int W = 640, H = 360;
// 2) Ablak + hardveresen gyorsított, vsync-elt renderer
SDL_Window* win = SDL_CreateWindow(
"3d-scene :: SDL plazma",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
W, H, SDL_WINDOW_SHOWN);
SDL_Renderer* ren = SDL_CreateRenderer(
win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
// 3) A FŐ CIKLUS
int running = 1;
Uint32 start = SDL_GetTicks();
while (running) {
// 3a) Eseménykezelés: kilépés X-re vagy ESC-re
SDL_Event e;
while (SDL_PollEvent(&e)) {
if (e.type == SDL_QUIT) running = 0;
if (e.type == SDL_KEYDOWN &&
e.key.keysym.sym == SDLK_ESCAPE) running = 0;
}
// 3b) Idő másodpercben – ez hajtja az animációt
float t = (SDL_GetTicks() - start) / 1000.0f;
// 3c) Háttér törlése feketére
SDL_SetRenderDrawColor(ren, 0, 0, 0, 255);
SDL_RenderClear(ren);
// 3d) DEMOSCENE-EXTRA: egyszerű plazma 8x8-as blokkokból.
// Három szinusz összege ad egy hullámzó "v" értéket,
// amit RGB-fázistolással színné alakítunk.
for (int y = 0; y < H; y += 8) {
for (int x = 0; x < W; x += 8) {
float v = sinf(x * 0.03f + t)
+ sinf(y * 0.03f - t)
+ sinf((x + y) * 0.02f + t * 1.7f); // -3..3
Uint8 r = (Uint8)(128 + 127 * sinf(v + 0.0f));
Uint8 g = (Uint8)(128 + 127 * sinf(v + 2.1f));
Uint8 b = (Uint8)(128 + 127 * sinf(v + 4.2f));
SDL_SetRenderDrawColor(ren, r, g, b, 255);
SDL_Rect cell = { x, y, 8, 8 };
SDL_RenderFillRect(ren, &cell);
}
}
// 3e) A kész képkocka kirakása a képernyőre
SDL_RenderPresent(ren);
}
// 4) Takarítás – fordított sorrendben, ahogy létrehoztuk
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
SDL_Quit();
return 0;
}
A plazma a legolcsóbb „scene-hatás", de a váz ugyanez marad minden effekthez.
Próbáld ki: told a 0.03f frekvenciákat, tegyél a plazmára egy mozgó
SDL_Rect „spritot", vagy cseréld a blokk-kitöltést pixelenkénti
SDL_RenderDrawPoint-ra egy SDL_Texture streamelésével a
finomabb felbontásért. A time-alapú animáció (t) a kulcs: minden mozgás
ebből az egy változóból jön.
SDL_CreateRenderer,
SDL_RenderFillRect, SDL_PollEvent …) teljes, hivatalos leírása.
https://wiki.libsdl.org/SDL2/FrontPage