psemek/libs/wgpu/source/buffer.cpp

72 lines
1.6 KiB
C++

#include <psemek/wgpu/buffer.hpp>
#include <psemek/wgpu/external/webgpu.h>
#include <memory>
namespace psemek::wgpu
{
void buffer::destroy()
{
wgpuBufferDestroy((WGPUBuffer)get());
}
std::uint64_t buffer::get_size()
{
return wgpuBufferGetSize((WGPUBuffer)get());
}
buffer::usage buffer::get_usage()
{
return (usage)wgpuBufferGetUsage((WGPUBuffer)get());
}
buffer::map_state buffer::get_map_state()
{
return (map_state)wgpuBufferGetMapState((WGPUBuffer)get());
}
void const * buffer::get_const_mapped_range(std::size_t offset, std::size_t size)
{
return wgpuBufferGetConstMappedRange((WGPUBuffer)get(), offset, size);
}
void * buffer::get_mapped_range(std::size_t offset, std::size_t size)
{
return wgpuBufferGetMappedRange((WGPUBuffer)get(), offset, size);
}
void buffer::map_async(map_mode flags, std::size_t offset, std::size_t size, map_callback const & callback)
{
auto userdata = new map_callback(callback);
auto real_callback = [](WGPUBufferMapAsyncStatus status, void * userdata)
{
std::unique_ptr<map_callback> callback((map_callback *)userdata);
if (*callback) (*callback)((map_async_status)status);
};
wgpuBufferMapAsync((WGPUBuffer)get(), (WGPUMapModeFlags)flags, offset, size, real_callback, userdata);
}
void buffer::unmap()
{
wgpuBufferUnmap((WGPUBuffer)get());
}
void buffer::set_label(std::string const & label)
{
wgpuBufferSetLabel((WGPUBuffer)get(), label.data());
}
void buffer::reference(void * ptr)
{
wgpuBufferReference((WGPUBuffer)ptr);
}
void buffer::release(void * ptr)
{
wgpuBufferRelease((WGPUBuffer)ptr);
}
}