avm2: Implement IndexBuffer3D.uploadFromByteArray
This commit is contained in:
parent
8b92b2cf7c
commit
24c7ca838b
|
@ -3,7 +3,6 @@ use crate::avm2::parameters::ParametersExt;
|
||||||
use crate::avm2::Activation;
|
use crate::avm2::Activation;
|
||||||
use crate::avm2::Value;
|
use crate::avm2::Value;
|
||||||
use crate::avm2::{Error, Object};
|
use crate::avm2::{Error, Object};
|
||||||
use crate::avm2_stub_method;
|
|
||||||
|
|
||||||
pub fn index_buffer_3d_allocator<'gc>(
|
pub fn index_buffer_3d_allocator<'gc>(
|
||||||
_class: ClassObject<'gc>,
|
_class: ClassObject<'gc>,
|
||||||
|
@ -14,14 +13,32 @@ pub fn index_buffer_3d_allocator<'gc>(
|
||||||
|
|
||||||
pub fn upload_from_byte_array<'gc>(
|
pub fn upload_from_byte_array<'gc>(
|
||||||
activation: &mut Activation<'_, 'gc>,
|
activation: &mut Activation<'_, 'gc>,
|
||||||
_this: Option<Object<'gc>>,
|
this: Option<Object<'gc>>,
|
||||||
_args: &[Value<'gc>],
|
args: &[Value<'gc>],
|
||||||
) -> Result<Value<'gc>, Error<'gc>> {
|
) -> Result<Value<'gc>, Error<'gc>> {
|
||||||
avm2_stub_method!(
|
if let Some(index_buffer) = this.and_then(|this| this.as_index_buffer()) {
|
||||||
|
let byte_array = args.get_object(activation, 0, "byteArray")?;
|
||||||
|
let byte_array = byte_array
|
||||||
|
.as_bytearray()
|
||||||
|
.ok_or_else(|| Error::from("ArgumentError: Parameter must be a ByteArray"))?;
|
||||||
|
|
||||||
|
let byte_offset = args.get_u32(activation, 1)?;
|
||||||
|
let start_offset = args.get_u32(activation, 2)?;
|
||||||
|
let count = args.get_u32(activation, 3)?;
|
||||||
|
|
||||||
|
let data = byte_array
|
||||||
|
// Each index is always 16 bits (2 bytes)
|
||||||
|
.read_at(count as usize * 2, byte_offset as usize)
|
||||||
|
.map_err(|e| e.to_avm(activation))?
|
||||||
|
.to_vec();
|
||||||
|
|
||||||
|
index_buffer.context3d().upload_index_buffer_data(
|
||||||
|
index_buffer,
|
||||||
|
data,
|
||||||
|
start_offset as usize,
|
||||||
activation,
|
activation,
|
||||||
"flash.display3D.IndexBuffer3D",
|
|
||||||
"uploadFromByteArray"
|
|
||||||
);
|
);
|
||||||
|
}
|
||||||
Ok(Value::Undefined)
|
Ok(Value::Undefined)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue