Chętnie używam klasy SpriteBatch z LibGDX Framework. Moim celem jest modyfikowanie reprezentacji ikonki za pomocą modułu cieniującego.Multitekstura LibGDX SpriteBatch jest możliwa?
batch = new SpriteBatch(2, shaderProgram);
skopiowane domyślny shader z klasy SpriteBatch i dodaje inny jednolitego Sampler 2d
+ "uniform sampler2D u_Texture2;\n"//
Czy istnieje sposób stara się dać tekstury do shadera. Postępując w ten sposób, zawsze kończy się na ekranie ClearColor.
batch.begin();
texture2.bind(1);
shaderProgram.setUniformi("u_Texture2", 1);
batch.draw(spriteTexture,positions[0].x,positions[0].y);
batch.draw(spriteTexture,positions[1].x,positions[1].y);
batch.end();
Każda tekstura działa. Ręczne rysowanie przy pomocy klasy Mesh działa zgodnie z oczekiwaniami. Więc co mogę zrobić, aby skorzystać z wygody SpriteBatch?
THX Pomocy
hej wreszcie dostałem odpowiedź, dzięki! Masz rację. Jest to spowodowane sposobem, w jaki klasa wiąże teksturę. Muszę powiedzieć, że stworzyłem już własną niestandardową klasę SpriteBatch. SpriteBatch wykazał również pewne problemy z renderowaniem większych rozmiarów tekstur bufora ramki. I zawsze wiążę TEXTURE0 wcześniej. To dlatego postanowiłem zrobić to po swojemu. Mniej wygodna, ale bardziej elastyczna. Teraz mam Partię Sprite, która obsługuje tylko generowanie wierzchołków. Wszystko wokół można dostosować za pomocą własnych shaderów. – fky
Należy pamiętać, że funkcja SpriteBatch wykonuje trochę więcej niż generowanie wierzchołków, jeśli nie jest to ostrożne, wystąpią problemy z wydajnością. Sam SpriteBatch ma pewne problemy z użytecznością, ale jest to decyzja projektowa. Ma to na celu uproszczenie najpowszechniejszych operacji rysowania i w jakiś sposób to boli elastyczność. W każdym razie udało mi się rozwiązać większość problemów, na które natknąłem się dotychczas (większość czasu włącza/wyłącza odpowiednie flagi OpenGL przed użyciem). Może dziś wieczorem spróbuję zaimplementować multiteksturę, tak jak ty, i dam ci znać;) –
sry za spóźnienie i dzięki za wsparcie. Działa tak, jak edytowaliście. ALE, nie podoba mi się to. To dla mnie niebezpieczne. Preferuję moją wyspecjalizowaną wersję, która jest również szybsza i lepiej debugowalna z powodu jej mniejszego rozmiaru. SpriteBatch stara się uszczęśliwić wszystkich. W mojej opinii nie jest to klasa zoptymalizowana pod kątem wydajności. Ale w każdym razie, dzięki za wyjaśnienie, że SpriteBatch używa tekstury LAST BOUND, a nie tylko TEXTURE0 – fky