WebGPU wrapper wip: add texture & texture view methods
This commit is contained in:
parent
0555243990
commit
1144d4a46c
8 changed files with 173 additions and 9 deletions
|
|
@ -21,7 +21,7 @@ namespace psemek::wgpu
|
||||||
static instance create(descriptor const & desc);
|
static instance create(descriptor const & desc);
|
||||||
|
|
||||||
void process_events();
|
void process_events();
|
||||||
surface create_surface(surface::descriptor const & desc) const;
|
surface create_surface(surface::descriptor const & desc);
|
||||||
void request_adapter(adapter::request_options const & request_options, adapter::request_callback callback);
|
void request_adapter(adapter::request_options const & request_options, adapter::request_callback callback);
|
||||||
|
|
||||||
static void reference(void * ptr);
|
static void reference(void * ptr);
|
||||||
|
|
|
||||||
|
|
@ -81,15 +81,10 @@ namespace psemek::wgpu
|
||||||
};
|
};
|
||||||
|
|
||||||
void configure(configuration const & conf);
|
void configure(configuration const & conf);
|
||||||
|
|
||||||
capabilities get_capabilities(adapter const & adapter);
|
capabilities get_capabilities(adapter const & adapter);
|
||||||
|
|
||||||
current_texture get_current_texture();
|
current_texture get_current_texture();
|
||||||
|
|
||||||
wgpu::texture::format get_preferred_format(adapter const & adapter);
|
wgpu::texture::format get_preferred_format(adapter const & adapter);
|
||||||
|
|
||||||
void present();
|
void present();
|
||||||
|
|
||||||
void unconfigure();
|
void unconfigure();
|
||||||
|
|
||||||
struct from_android_native_window
|
struct from_android_native_window
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,12 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <psemek/wgpu/detail/object.hpp>
|
#include <psemek/wgpu/detail/object.hpp>
|
||||||
|
#include <psemek/wgpu/texture_view.hpp>
|
||||||
|
#include <psemek/wgpu/chained_struct.hpp>
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
namespace psemek::wgpu
|
namespace psemek::wgpu
|
||||||
{
|
{
|
||||||
|
|
@ -122,6 +126,32 @@ namespace psemek::wgpu
|
||||||
render_attachment = 0x00000010,
|
render_attachment = 0x00000010,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class dimension : std::uint32_t
|
||||||
|
{
|
||||||
|
_1d = 0x00000000,
|
||||||
|
_2d = 0x00000001,
|
||||||
|
_3d = 0x00000002,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class aspect : std::uint32_t
|
||||||
|
{
|
||||||
|
all = 0x00000000,
|
||||||
|
stencil_only = 0x00000001,
|
||||||
|
depth_only = 0x00000002,
|
||||||
|
};
|
||||||
|
|
||||||
|
// TODO: WGPU_EXPORT WGPUTextureView wgpuTextureCreateView(WGPUTexture texture, WGPU_NULLABLE WGPUTextureViewDescriptor const * descriptor) WGPU_FUNCTION_ATTRIBUTE;
|
||||||
|
texture_view create_view(texture_view::descriptor const & desc);
|
||||||
|
void destroy();
|
||||||
|
std::uint32_t get_width();
|
||||||
|
std::uint32_t get_height();
|
||||||
|
std::uint32_t get_depth();
|
||||||
|
dimension get_dimension();
|
||||||
|
format get_format();
|
||||||
|
std::uint32_t get_mip_level_count();
|
||||||
|
usage get_usage();
|
||||||
|
void set_label(std::string const & label);
|
||||||
|
|
||||||
static void reference(void * ptr);
|
static void reference(void * ptr);
|
||||||
static void release(void * ptr);
|
static void release(void * ptr);
|
||||||
|
|
||||||
|
|
@ -134,6 +164,19 @@ namespace psemek::wgpu
|
||||||
friend struct device;
|
friend struct device;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct texture_view::descriptor
|
||||||
|
{
|
||||||
|
std::vector<chained_struct> chain = {};
|
||||||
|
std::string label = {};
|
||||||
|
texture::format format;
|
||||||
|
texture_view::dimension dimension;
|
||||||
|
std::uint32_t base_mip_level = 0;
|
||||||
|
std::uint32_t mip_level_count = 1;
|
||||||
|
std::uint32_t base_array_layer = 0;
|
||||||
|
std::uint32_t array_layer_count = 1;
|
||||||
|
texture::aspect aspect = texture::aspect::all;
|
||||||
|
};
|
||||||
|
|
||||||
inline texture::usage operator | (texture::usage u1, texture::usage u2)
|
inline texture::usage operator | (texture::usage u1, texture::usage u2)
|
||||||
{
|
{
|
||||||
return static_cast<texture::usage>(static_cast<unsigned int>(u1) | static_cast<unsigned int>(u2));
|
return static_cast<texture::usage>(static_cast<unsigned int>(u1) | static_cast<unsigned int>(u2));
|
||||||
|
|
|
||||||
43
libs/wgpu/include/psemek/wgpu/texture_view.hpp
Normal file
43
libs/wgpu/include/psemek/wgpu/texture_view.hpp
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <psemek/wgpu/detail/object.hpp>
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace psemek::wgpu
|
||||||
|
{
|
||||||
|
|
||||||
|
struct texture_view
|
||||||
|
: detail::object<texture_view>
|
||||||
|
{
|
||||||
|
using detail::object<texture_view>::object;
|
||||||
|
|
||||||
|
enum class dimension : std::uint32_t
|
||||||
|
{
|
||||||
|
undefined = 0x00000000,
|
||||||
|
_1d = 0x00000001,
|
||||||
|
_2d = 0x00000002,
|
||||||
|
_2d_array = 0x00000003,
|
||||||
|
cube = 0x00000004,
|
||||||
|
cube_array = 0x00000005,
|
||||||
|
_3d = 0x00000006,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Defined in wgpu/texture.hpp to break circular dependencies
|
||||||
|
struct descriptor;
|
||||||
|
|
||||||
|
void set_label(std::string const & label);
|
||||||
|
|
||||||
|
static void reference(void * ptr);
|
||||||
|
static void release(void * ptr);
|
||||||
|
|
||||||
|
private:
|
||||||
|
explicit texture_view(void * ptr)
|
||||||
|
: detail::object<texture_view>(ptr)
|
||||||
|
{}
|
||||||
|
|
||||||
|
friend struct texture;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -18,5 +18,5 @@
|
||||||
WGPUSampler
|
WGPUSampler
|
||||||
WGPUShaderModule
|
WGPUShaderModule
|
||||||
+ WGPUSurface
|
+ WGPUSurface
|
||||||
WGPUTexture
|
+ WGPUTexture
|
||||||
WGPUTextureView
|
+ WGPUTextureView
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ namespace psemek::wgpu
|
||||||
wgpuInstanceProcessEvents((WGPUInstance)get());
|
wgpuInstanceProcessEvents((WGPUInstance)get());
|
||||||
}
|
}
|
||||||
|
|
||||||
surface instance::create_surface(surface::descriptor const & desc) const
|
surface instance::create_surface(surface::descriptor const & desc)
|
||||||
{
|
{
|
||||||
WGPUSurfaceDescriptor descriptor = {};
|
WGPUSurfaceDescriptor descriptor = {};
|
||||||
descriptor.nextInChain = (WGPUChainedStruct const *)detail::fill_chain(desc.chain);
|
descriptor.nextInChain = (WGPUChainedStruct const *)detail::fill_chain(desc.chain);
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,67 @@
|
||||||
namespace psemek::wgpu
|
namespace psemek::wgpu
|
||||||
{
|
{
|
||||||
|
|
||||||
|
texture_view texture::create_view(texture_view::descriptor const & desc)
|
||||||
|
{
|
||||||
|
WGPUTextureViewDescriptor descriptor = {};
|
||||||
|
descriptor.nextInChain = (WGPUChainedStruct const *)detail::fill_chain(desc.chain);
|
||||||
|
descriptor.label = desc.label.data();
|
||||||
|
descriptor.format = (WGPUTextureFormat)desc.format;
|
||||||
|
descriptor.dimension = (WGPUTextureViewDimension)desc.dimension;
|
||||||
|
descriptor.baseMipLevel = desc.base_mip_level;
|
||||||
|
descriptor.mipLevelCount = desc.mip_level_count;
|
||||||
|
descriptor.baseArrayLayer = desc.base_array_layer;
|
||||||
|
descriptor.arrayLayerCount = desc.array_layer_count;
|
||||||
|
descriptor.aspect = (WGPUTextureAspect)desc.aspect;
|
||||||
|
|
||||||
|
return texture_view(wgpuTextureCreateView((WGPUTexture)get(), &descriptor));
|
||||||
|
}
|
||||||
|
|
||||||
|
void texture::destroy()
|
||||||
|
{
|
||||||
|
wgpuTextureDestroy((WGPUTexture)get());
|
||||||
|
}
|
||||||
|
|
||||||
|
std::uint32_t texture::get_width()
|
||||||
|
{
|
||||||
|
return wgpuTextureGetWidth((WGPUTexture)get());
|
||||||
|
}
|
||||||
|
|
||||||
|
std::uint32_t texture::get_height()
|
||||||
|
{
|
||||||
|
return wgpuTextureGetHeight((WGPUTexture)get());
|
||||||
|
}
|
||||||
|
|
||||||
|
std::uint32_t texture::get_depth()
|
||||||
|
{
|
||||||
|
return wgpuTextureGetDepthOrArrayLayers((WGPUTexture)get());
|
||||||
|
}
|
||||||
|
|
||||||
|
texture::dimension texture::get_dimension()
|
||||||
|
{
|
||||||
|
return (dimension)wgpuTextureGetDimension((WGPUTexture)get());
|
||||||
|
}
|
||||||
|
|
||||||
|
texture::format texture::get_format()
|
||||||
|
{
|
||||||
|
return (format)wgpuTextureGetFormat((WGPUTexture)get());
|
||||||
|
}
|
||||||
|
|
||||||
|
std::uint32_t texture::get_mip_level_count()
|
||||||
|
{
|
||||||
|
return wgpuTextureGetMipLevelCount((WGPUTexture)get());
|
||||||
|
}
|
||||||
|
|
||||||
|
texture::usage texture::get_usage()
|
||||||
|
{
|
||||||
|
return (usage)wgpuTextureGetUsage((WGPUTexture)get());
|
||||||
|
}
|
||||||
|
|
||||||
|
void texture::set_label(std::string const & label)
|
||||||
|
{
|
||||||
|
wgpuTextureSetLabel((WGPUTexture)get(), label.data());
|
||||||
|
}
|
||||||
|
|
||||||
void texture::reference(void * ptr)
|
void texture::reference(void * ptr)
|
||||||
{
|
{
|
||||||
wgpuTextureReference((WGPUTexture)ptr);
|
wgpuTextureReference((WGPUTexture)ptr);
|
||||||
|
|
|
||||||
22
libs/wgpu/source/texture_view.cpp
Normal file
22
libs/wgpu/source/texture_view.cpp
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
#include <psemek/wgpu/texture_view.hpp>
|
||||||
|
#include <psemek/wgpu/external/webgpu.h>
|
||||||
|
|
||||||
|
namespace psemek::wgpu
|
||||||
|
{
|
||||||
|
|
||||||
|
void texture_view::set_label(std::string const & label)
|
||||||
|
{
|
||||||
|
wgpuTextureViewSetLabel((WGPUTextureView)get(), label.data());
|
||||||
|
}
|
||||||
|
|
||||||
|
void texture_view::reference(void * ptr)
|
||||||
|
{
|
||||||
|
wgpuTextureViewReference((WGPUTextureView)ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void texture_view::release(void * ptr)
|
||||||
|
{
|
||||||
|
wgpuTextureViewRelease((WGPUTextureView)ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue