2012-03-31 8 views
5

Co się stanie, jeśli powiązać (różne tekstury) z GL_TEXTURE_2D i GL_TEXTURE_CUBE_MAP w tej samej jednostce obrazu tekstury?OpenGL ES 2.x: Powiąż oba "GL_TEXTURE_2D" i "GL_TEXTURE_CUBE_MAP" w tej samej jednostce obrazu tekstury?

Załóżmy na przykład, że wiążę jedną teksturę z celem GL_TEXTURE0 i inną teksturę z tym samym obiektem docelowym dla tego samego obiektu tekstury. Czy mogę następnie mieć dwie jednolite zmienne, jedną sampler2D i drugą samplerCube i ustawić zarówno na 0 (w odniesieniu do GL_TEXTURE0)?

Podejrzewam, że odpowiedź brzmi "nie" (lub że wynik jest nieokreślony), ale nie znalazłem niczego w specyfikacji, która wyraźnie zabrania stosowania wielu obiektów teksturowanych w tej samej jednostce obrazu tekstury.

Odpowiedz

7

Nie znalazłem niczego, co by opisało, czy można powiązać teksturę 2D i teksturę mapy sześcianu w tej samej jednostce tekstury, ale (lub , czyli). Sądzę, że jest to całkowicie możliwe. Zezwalanie na to ma sens, ponieważ wszystkie funkcje modyfikacji tekstur wymagają w każdym razie określenia docelowej tekstury.

Ale OpenGL ES 2 Spec wyraźnie uniemożliwia użycie zarówno w tym samym czasie w cieniującego, jak rozdział 2.10 mówi:

To nie może mieć zmienne różnych typów samplera wskazujących na to samo jednostka obrazu tekstury w obiekcie programu. Tę sytuację można wykryć tylko przy następnym wydanym poleceniu renderowania, , a następnie wygenerowany zostanie błąd INVALID_OPERATION.

Więc nie można używać zarówno sampler2D i samplerCube odnosząc się do tej samej jednostki tekstury zginać limity jednostkowe tekstury implementacji tych.