LibWeb/WebGL2: Implement bufferData with offset and length

This commit is contained in:
Luke Wilde 2024-12-16 19:22:41 +00:00 committed by Alexander Kalenik
commit 18ea91715b
Notes: github-actions[bot] 2025-01-08 15:01:00 +00:00
4 changed files with 45 additions and 1 deletions

View file

@ -29,6 +29,21 @@ u32 BufferableObjectBase::byte_length() const
[](GC::Ref<JS::ArrayBuffer> array_buffer) { return static_cast<u32>(array_buffer->byte_length()); });
}
u32 BufferableObjectBase::element_size() const
{
return m_bufferable_object.visit(
[](GC::Ref<JS::TypedArrayBase> typed_array) -> u32 {
auto typed_array_record = JS::make_typed_array_with_buffer_witness_record(typed_array, JS::ArrayBuffer::Order::SeqCst);
return typed_array_record.object->element_size();
},
[](GC::Ref<JS::DataView>) -> u32 {
return 1;
},
[](GC::Ref<JS::ArrayBuffer>) -> u32 {
return 1;
});
}
GC::Ref<JS::Object> BufferableObjectBase::raw_object()
{
return m_bufferable_object.visit([](auto const& obj) -> GC::Ref<JS::Object> { return obj; });

View file

@ -27,6 +27,7 @@ public:
virtual ~BufferableObjectBase() override = default;
u32 byte_length() const;
u32 element_size() const;
GC::Ref<JS::Object> raw_object();
GC::Ref<JS::Object const> raw_object() const { return const_cast<BufferableObjectBase&>(*this).raw_object(); }