2012-10-15 10 views
7

Nie tak dawno temu wypróbowałem program z przewodnika OpenGL, o którym mówiono, że jest podwójnie buforowany; na ekranie pojawił się obracający się prostokąt. Niestety, nie mam już tej książki i nie znalazłem jasnej, prostej definicji tego, co ogólnie jest buforem. Domyślam się, że jest to "miejsce" do rysowania rzeczy, gdzie używanie wielu może być jak nakładanie warstw?Czym dokładnie jest bufor w OpenGL i jak mogę korzystać z wielu na swoją korzyść?

Jeśli tak, to zastanawiam się, czy mogę użyć wielu buforów na swoją korzyść dla programu obcinania wieloboków. Mam ładne małe okienko, które pozwala użytkownikowi rysować wielokątów na ekranie, a także narzędzie do przeciągania i rysowania pola wyboru nad poligonami. Gdy użytkownik narysuje prostokąt zaznaczenia i puści mysz, wielokąty zostaną obcięte w oparciu o granice prostokąta.

Jest to wystarczająco wykonalne, ale chcę, aby użytkownik mógł zacząć od nowa: po naciśnięciu klawisza Esc, klips powinien zniknąć, a oryginalne wielokąty powinny zostać przywrócone. Ponieważ robię rzeczy po pikselach po pikselach, bardzo trudno jest wymyślić, jak zmienić kolory pikseli prostokąta z powrotem na czarne, takie jak tło lub kolor określonego wielokąta, w zależności od tego, gdzie zostały narysowane (chyba że znajdę sposób na zapisanie kolorów podczas rysowania każdego piksela wielokąta, ale wydaje się, że jest on za burtą). Zastanawiałem się, czy pomogłoby to nadać prostokątowi własny bufor, w nadziei, że będzie on działał jak rodzaj przezroczystej warstwy, którą można łatwo usunąć (?) Czy w ten sposób można użyć buforów, czy też potrzebuję znaleźć inne rozwiązanie?

Odpowiedz

8

OpenGL zna wiele rodzajów buforów:

  • bufora ramki: porcje wielkości pamięci, do którego kierowane są operacje rysowania zmienia wartości pikseli w buforze. OpenGL domyślnie ma bufory na ekranie, które można podzielić na front i backbuffer, gdzie operacje rysowania stają się niewidoczne na backbufferze i są zamieniane na początek po zakończeniu. Oprócz tego OpenGL używa bufora głębi do implementacji Z sortowania głębi, bufora szablonu służącego do ograniczania renderowania do wycinania (= szablonu), podobnie jak wybrane części bufora ramki. Były kiedyś bufory pomocnicze i akumulacyjne. Jednak zostały one zastąpione tak zwanymi obiektami bufora ramki, które są obiektami tworzonymi przez użytkownika, łączącymi kilka tekstur lub buforów renderowania z nowymi framebufferami, na które można renderować.

  • Renderbuffers: tworzone przez użytkownika obiekty renderujące, dołączane do obiektów bufora ramki.

  • Obiekty buforowe (wierzchołki i piksele): Zdefiniowane przez użytkownika przechowywanie danych. Używane do geometrii i danych obrazu.

  • Tekstury: Tekstury są swego rodzaju buforów, to znaczy posiadają one dane, które mogą być źródłem w operacjach rysunkowych

Zwykłe podejście z OpenGL do rerender całą scenę, gdy coś się zmienia. Jeśli chcesz zapisać te operacje rysowania, możesz skopiować zawartość bufora ramki do tekstury, a następnie narysować tę teksturę do pojedynczego kwadratu i nadpisać ją za pomocą prostokąta zaznaczenia gumki.