Wpis z mikrobloga

#programowanie #programista15k #gamedev #opengl #directx #cpp Cześć, mam takie pytanko odnośnie wywalania grafiki na ekran i double buffer. Weżmy winAPI i winGDI czyli podstawową biblioteke wyswietlania w Windowsie. Tam ponoć najszybszą funkcją jest BltBlit() - ale z tego co mi się kojarzy to "blitowanie" to inaczej kopiowanie jakiegoś kawałka na ekran. Jeśli wywalam cały bufor do okna czy na ekran, a który i tak musiałem "zarysować" w całości (tj. nie musialem go czyścić) to po prostu mam jeden bufor pamieci i za pomocą BltBlit go wyświetlam - obraz zostaje na ekranie do czawsu aż ponownie wywołam BltBlit(). I tu pojawia sie pytanie - czy ta funkcja tylko kopiuje zawartosc jednego buforwa na drugi (ekranowy) - raczej tak. Ale czy nie proścej i szybciej by było - użyć dwóch buforów i zamiast robić kopiowanie - tylko zmieniać wskaźnik na pamięć zawierający aktualnie gotowy bufor? Przełaczanie wskaźników (show buffer) zamiast kopiować buffer (blit buffer) - jest coś takeigo w Win API? Jak to jest w OpenGL i DirectX bo już nie pamiętam - jest tam jakieś "swapchain" czyli odpowiednik double buffer i to juz jest riobne wewnetrze.. ale cieawe czy też poprzez kopiowanie czy zmiane wskaników?
  • 4
@ZawzietyRobaczek: Porównujesz jabłka z pomarańczami. BltBit to kopiowanie bloku bitmapy z jednego Device Context na drugi, albo nawet w ramach jednego DC, ale to nie ma żadnego bezposredniego związku z framebuferrem. To jst inny poziom abstrakcji.

@zibizz1: A swapowanie buforów na GPU to nie jest ściśle rzecz biorąc podmiana wskaźnika bo framebuffery mają okreslona lokalizację w pamięci GPU i ich adres się nie zmienia. Jest to tylko flipowanie jednego bitu
@zibizz1: Myślę że mówimy tutaj o różnych pojęciach, ja mam na myśli wsparcie sprzętowe dla double bufferingu. Triple buffering nie jest oczywistością i nie każda GPU go wspiera. Nawet jeśli to wtedy potrzebne są 2 bity do przełączania.
Oczywiście można zrobić n-buffering softwarewo i trzymać n-buferrów w RAMie, ale nie o to mi chodziło.