Как написать в IndexBuffer3D с помощью uploadFromByteArray (...) - PullRequest
0 голосов
/ 25 января 2012

Я действительно не понимаю, что я делаю неправильно, но, по словам Adobe, вы используете uploadFromByteArray(...) для объекта IndexBuffer3D:

Что я не понимаю, так это какой метод записи мне нужно использовать для записи целых чисел моих вершинных индексов? Я пробовал writeFloat, writeUnsignedInt, writeInt, даже writeShort, и все терпит неудачу. Я установил для своего экземпляра ByteArray значение ba.endian = Endian.LITTLE_ENDIAN, но все равно нет.

Я удостоверился, что сбросил свою позицию ByteArray в 0, прежде чем пытаться загрузить ее в свой индекс-буфер, но ничего не появляется!

Если я загружу Vector.<uint>, это работает! Так что я знаю, что проблема не в шейдере AGAL.

Есть идеи?

1 Ответ

2 голосов
/ 25 января 2012

Неважно, только что нашел, что я делаю не так:

НЕВЕРНО

_buffer.uploadFromByteArray(_dataBytes, 0, 0, _dataBytes.length >> 2);

Сначала я делил на 4 (битовое смещение дважды одинаково), потому что я, хотя число байтов на индекс составляло 4 байта. Нет ах! Некорректное!

ByteArrays для целей IndexBuffer3D должен быть записан с writeShort(), так как он использует 16-битные числа вместо 32-битных. Поэтому он использует только 2 байта для индексов.

ПРАВИЛЬНО

_buffer.uploadFromByteArray(_dataBytes, 0, 0, _dataBytes.length >> 1);

Надеюсь, это прояснит это для других пользователей Stage3D! :)

...