Mam działający kod, w którym odczytuję wartości vec4 w module cieniującym z bufora tekstury.Jak używać buforów tekstur do odczytu pojedynczej liczby całkowitej zamiast vec4
po stronie klienta, utworzyć bufor wektorów przemieszczenia:
vec4 vector1 : vec4(x1, y1, z1, w1);
vec4 vector2 : vec4(x2, y2, z2, w2);
vec4 vector3 : vec4(x3, y3, z3, w3);
..
następnie utworzyć bufor wierzchołek zawierający vector1, Vector2, Vector3 ....
następnie utworzyć tekstury i wiążą wyżej bufor wykorzystując:
glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA32F, bufferID);
że wybrali GL_RGBA32F ponieważ każdy x1, y1, z1 W1, itp to pływak.
w cieniującego mogę pobrać poszczególne wektory przy użyciu:
vec4 vector1 = texelFetch(samplerObj, 0);
vec4 vector2 = texelFetch(samplerObj, 1);
.
.
Ale teraz załóżmy mój wektor przemieszczenia nie jest vec4, ale jedna liczba całkowita. tj
int vector1 = x1; //(int is 32 bit unsigned)
int vector2 = x2; //(int is 32 bit unsigned)
może ktoś proszę powiedzieć, jaki będzie odpowiedni internalFormat być? jest
glTexBuffer(GL_TEXTURE_BUFFER, GL_R32UI, bufferID);
także jak będę pobrać wartość używając texelFetch w cieniującego? jest
int vector1 = texelFetch(samplerObj, 0);
lub
int vector1 = texelFetch(samplerObj, 0).r ?
jestem zdezorientowany bo texelFetch powinien zwrócić Texel, który ma 4 części, więc muszę korzystać z czerwoną składową wyniku?
Nie wiem o samplerBuffers, ale dla image_load_store, wewnętrzny format musi być zgodny z instrukcją layout() i kiedy wywołuje ImageLoad() zawsze zwraca vec4/uivec4/ivec4 itd. Jeśli nie ma 4 komponentów ignorujesz resztę i, jak mówisz, po prostu przeczytaj .r na przykład. Po prostu spekuluję tutaj, ale może oznacza to, że lepiej jest czytać w 16-bajtowych blokach. – jozxyqk
@jozxyqk: Nie ma czegoś takiego jak kwalifikator formatu dla układów niejednolitych. – thokra
@thokra i dlatego zacząłem od "Nie wiem o samplerBuffers". Próbuję przekazać moją wiedzę na temat czegoś podobnego. Nie pasuje dokładnie, ale być może niektóre nakładają się. Czy texelFetch niejawnie indeksuje bufor usampler z wewnętrznym formatem GL_R32UI w krokach 4 bajtów i pozostawia nieokreśloną wartość gba rgba? Nie wiem – jozxyqk