Zamiast używać glGenTextures()
, aby uzyskać nieużywany identyfikator tekstury. Czy mogę losowo wybrać liczbę, powiedzmy 99999 i użyć jej?Czy można użyć losowego identyfikatora tekstury?
będę, oczywiście, zapytań:
glIsTexture(m_texture)
i upewnij się, że to fałszywy przed kontynuowaniem.
Oto niektóre tła:
Zajmuję się tworzeniem aplikacji pokaz obrazu dla Mac. Podgląd pokazu slajdów jest bezbłędny. Aby zapisać pokaz slajdów, renderuję do operatora FBO. Tworzę kontekst AGL, tworzę teksturę z glGenTextures()
i renderuję do bufora ramki. Wszystko w porządku, z wyjątkiem drobnego problemu.
Po zapisaniu pokazu slajdów i powrocie do głównego okna wszystkie moje miniatury obrazów są szare, tzn. Tekstury zostały wyczyszczone.
Zbadałem to i okazało się, że miniatury obrazów i moja struktura FBO mają w pewnym sensie ten sam identyfikator tekstury. Kiedy usuwam teksturę FBO na końcu operacji zapisu pokazu slajdów, tekstury miniaturek są również tracone. To dziwne, ponieważ podczas zapisywania mam kontekst AGL, a główny interfejs ma inny kontekst AGL, prawdopodobnie stworzony w tle przez Core Image i na który nie mam wpływu.
więc moje opcje, jak ja to widzę teraz, jest:
- Nie usuwać FBO tekstury.
- Losowo wybierz wysoki identyfikator tekstury w nadziei, że główny interfejs nie będzie go używał.
Właściwie czytałem, że niekoniecznie trzeba usunąć teksturę, jeśli usuwa się kontekst AGL OpenGL. Ponieważ usunięcie kontekstu OpenGL powoduje automatyczne usunięcie wszystkich powiązanych tekstur. Czy to prawda? Jeśli tak, opcja 1 ma więcej sensu.
Zdaję sobie sprawę, że zdarzają się zabawne rzeczy, których naprawdę nie potrafię wyjaśnić. Na przykład po zapisaniu pokazu slajdów z obrazem do pliku .mov
usuwam kontekst, który został utworzony w tej samej klasie. Z prawej strony nie powinno to wpływać na tekstury utworzone w innym kontekście. Ale tak jest, a ja na poważnie nie mogę tego wyjaśnić.
Dzięki za odpowiedź. Ręczne przypisanie identyfikatora tekstury nie wchodzi w grę, ponieważ musimy obsługiwać OpenGL 1.4 aż do wersji 3.2. Teraz najlepiej jest nie usuwać tekstury. Przy okazji nie mogę głosować na twoją odpowiedź, ponieważ nie mam wystarczającej liczby punktów. –
@Nicol: Twój drugi akapit wydaje się raczej * niekompletny *. – genpfault
@genpfault: Naprawiono. Dzięki! –