mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-23 09:22:30 +00:00
LibWeb/WebGL2: Implement bufferSubData with offset and length
This commit is contained in:
parent
18ea91715b
commit
63b792c205
Notes:
github-actions[bot]
2025-01-08 15:00:53 +00:00
Author: https://github.com/Lubrsi
Commit: 63b792c205
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/2943
Reviewed-by: https://github.com/kalenikaliaksandr
2 changed files with 29 additions and 1 deletions
|
@ -11,7 +11,7 @@ interface mixin WebGL2RenderingContextOverloads {
|
||||||
undefined bufferSubData(GLenum target, GLintptr dstByteOffset, BufferSource srcData);
|
undefined bufferSubData(GLenum target, GLintptr dstByteOffset, BufferSource srcData);
|
||||||
// WebGL2:
|
// WebGL2:
|
||||||
undefined bufferData(GLenum target, [AllowShared] ArrayBufferView srcData, GLenum usage, unsigned long long srcOffset, optional GLuint length = 0);
|
undefined bufferData(GLenum target, [AllowShared] ArrayBufferView srcData, GLenum usage, unsigned long long srcOffset, optional GLuint length = 0);
|
||||||
[FIXME] undefined bufferSubData(GLenum target, GLintptr dstByteOffset, [AllowShared] ArrayBufferView srcData, unsigned long long srcOffset, optional GLuint length = 0);
|
undefined bufferSubData(GLenum target, GLintptr dstByteOffset, [AllowShared] ArrayBufferView srcData, unsigned long long srcOffset, optional GLuint length = 0);
|
||||||
|
|
||||||
// WebGL1 legacy entrypoints:
|
// WebGL1 legacy entrypoints:
|
||||||
undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels);
|
undefined texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView? pixels);
|
||||||
|
|
|
@ -830,6 +830,34 @@ public:
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (webgl_version == 2 && function.name == "bufferSubData"sv && function.overload_index == 1) {
|
||||||
|
function_impl_generator.append(R"~~~(
|
||||||
|
VERIFY(src_data);
|
||||||
|
auto const& viewed_array_buffer = src_data->viewed_array_buffer();
|
||||||
|
auto const& byte_buffer = viewed_array_buffer->buffer();
|
||||||
|
auto src_data_length = src_data->byte_length();
|
||||||
|
auto src_data_element_size = src_data->element_size();
|
||||||
|
u8 const* buffer_ptr = byte_buffer.data();
|
||||||
|
|
||||||
|
u64 copy_length = length == 0 ? src_data_length - src_offset : length;
|
||||||
|
copy_length *= src_data_element_size;
|
||||||
|
|
||||||
|
if (src_offset > src_data_length) {
|
||||||
|
set_error(GL_INVALID_VALUE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (src_offset + copy_length > src_data_length) {
|
||||||
|
set_error(GL_INVALID_VALUE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer_ptr += src_offset * src_data_element_size;
|
||||||
|
glBufferSubData(target, dst_byte_offset, copy_length, buffer_ptr);
|
||||||
|
)~~~");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (function.name == "readPixels"sv) {
|
if (function.name == "readPixels"sv) {
|
||||||
function_impl_generator.append(R"~~~(
|
function_impl_generator.append(R"~~~(
|
||||||
if (!pixels) {
|
if (!pixels) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue