Kiedy zadzwonić do glEnable (GL_FRAMEBUFFER_SRGB)?

Mam system renderowania, w którym rysuję do FBO z wielopróbkowym buforem renderującym, a następnie blituję go do innego FBO teksturą w celu rozwiązania próbek w celu odczytania tekstury w celu wykonania cieniowania po przetwarzaniu podczas rysowania do bufora wstecznego ( Indeks FBO 0).

Teraz chciałbym uzyskać poprawne wyjście sRGB ... Problem polega na tym, że zachowanie programu jest raczej niespójne, gdy uruchamiam go w systemie OS X i Windows, a to również zmienia się w zależności od urządzenia: W systemie Windows z Intel HD 3000 nie zastosuje nieliniowości sRGB, ale na mojej drugiej maszynie z Nvidią GTX 670 tak. W Intel HD 3000 w OS X będzie to również stosowane.

To prawdopodobnie oznacza, że ​​nie ustawiam mojegoGL_FRAMEBUFFER_SRGB włącz stan we właściwych punktach programu. Jednak nie mogę znaleźć żadnych samouczków, które rzeczywiście mówią mi, kiedy powinienem je włączyć, wspominają tylko, że jest to łatwe i nie kosztuje żadnych kosztów.

Obecnie nie ładuję żadnych tekstur, więc nie musiałem jeszcze zajmować się linearyzowaniem ich kolorów.

Aby zmusić program, aby nie wypluwał po prostu liniowych wartości kolorów, próbowałem po prostu skomentować mojeglDisable(GL_FRAMEBUFFER_SRGB) co oznacza, że ​​to ustawienie jest włączone dla całego rurociągu, a ja faktycznie wymuszam go z powrotem na każdej ramce.

Nie wiem, czy to prawda, czy nie. Z pewnością nie stosuje się do nieliniowości kolorów, ale nie mogę powiedzieć, czy jest to stosowane dwukrotnie (co byłoby złe). Mógłby zastosować gamma, gdy renderuję na moim pierwszym FBO. Mogłoby to zrobić, gdy zmienię pierwszy FBO na drugi FBO. Dlaczego nie?

Posunąłem się nawet do zrobienia zrzutów ekranu mojej ostatniej klatki i porównania surowych wartości kolorów pikseli z kolorami, które ustawiłem w programie:

Ustawiłem kolor wejścia na RGB (1,2,3), a wyjście na RGB (13,22,28).

To wydaje się dość dużą kompresją kolorów na niskim końcu i prowadzi mnie do pytania, czy gamma jest stosowana wielokrotnie.

Właśnie przejrzałem równanie sRGB i mogę zweryfikować, że konwersja jest stosowana tylko raz jako liniowa 1/255, 2/255 i 3/255 rzeczywiście odwzorowuje sRGB 13/255, 22/255 i 28/255 za pomocą równania1.055*C^(1/2.4)+0.055. Biorąc pod uwagę, że rozszerzenie jest tak duże dla tych niskich wartości kolorów, naprawdę powinno być oczywiste, czy transformacja kolorów sRGB jest stosowana więcej niż raz.

Więc nadal nie ustaliłem, co należy zrobić. robiglEnable(GL_FRAMEBUFFER_SRGB) odnoszą się tylko do końcowych wartości bufora ramki, w którym to przypadku mogę po prostu ustawić to podczas mojej procedury startowej GL i zapomnieć o tym dalej?

questionAnswers(1)

yourAnswerToTheQuestion