renderer: reserved colorspace option in target api

API Modification:
- Result WgCanvas::target(void* device, void* instance, void* target, uint32_t w, uint32_t h, int type = 0)
 -> Result WgCanvas::target(void* device, void* instance, void* target, uint32_t w, uint32_t h, ColorSpace cs, int type = 0)
- Tvg_Result tvg_wgcanvas_set_target(Tvg_Canvas* canvas, void* device, void* instance, void* target, uint32_t w, uint32_t h, int type)
 -> Tvg_Result tvg_wgcanvas_set_target(Tvg_Canvas* canvas, void* device, void* instance, void* target, uint32_t w, uint32_t h, Tvg_Colorspace cs, int type)
This commit is contained in:
Hermet Park 2024-11-26 11:50:56 +09:00 committed by Hermet Park
parent 6c452c1fd3
commit 0f409a654a
7 changed files with 16 additions and 12 deletions

View file

@ -440,7 +440,7 @@ struct WgWindow : Window
void resize() override void resize() override
{ {
//Set the canvas target and draw on it. //Set the canvas target and draw on it.
verify(static_cast<tvg::WgCanvas*>(canvas)->target(nullptr, instance, surface, width, height)); verify(static_cast<tvg::WgCanvas*>(canvas)->target(nullptr, instance, surface, width, height, tvg::ColorSpace::ABGR8888S));
} }
void refresh() override void refresh() override

View file

@ -365,7 +365,7 @@ void runWg()
auto canvas = unique_ptr<tvg::WgCanvas>(tvg::WgCanvas::gen()); auto canvas = unique_ptr<tvg::WgCanvas>(tvg::WgCanvas::gen());
//Set the canvas target and draw on it. //Set the canvas target and draw on it.
tvgexam::verify(canvas->target(device, instance, renderTarget, SIZE, SIZE, 1)); tvgexam::verify(canvas->target(device, instance, renderTarget, SIZE, SIZE, tvg::ColorSpace::ABGR8888S, 1));
content(canvas.get()); content(canvas.get());
if (tvgexam::verify(canvas->draw())) { if (tvgexam::verify(canvas->draw())) {

View file

@ -1776,10 +1776,11 @@ public:
* *
* @param[in] device WGPUDevice, a desired handle for the wgpu device. If it is @c nullptr, ThorVG will assign an appropriate device internally. * @param[in] device WGPUDevice, a desired handle for the wgpu device. If it is @c nullptr, ThorVG will assign an appropriate device internally.
* @param[in] instance WGPUInstance, context for all other wgpu objects. * @param[in] instance WGPUInstance, context for all other wgpu objects.
* @param[in] target Either WGPUSurface or WGPUTexture, serving as handles to a presentable surface or texture * @param[in] target Either WGPUSurface or WGPUTexture, serving as handles to a presentable surface or texture.
* @param[in] w The width of the target. * @param[in] w The width of the target.
* @param[in] h The height of the target. * @param[in] h The height of the target.
* @param[in] type 0: surface, 1: texture are used as pesentable target * @param[in] cs Specifies how the pixel values should be interpreted. Currently, it only allows @c ColorSpace::ABGR8888S as @c WGPUTextureFormat_RGBA8Unorm.
* @param[in] type @c 0: surface, @c 1: texture are used as pesentable target.
* *
* @retval Result::InsufficientCondition if the canvas is performing rendering. Please ensure the canvas is synced. * @retval Result::InsufficientCondition if the canvas is performing rendering. Please ensure the canvas is synced.
* @retval Result::NonSupport In case the wg engine is not supported. * @retval Result::NonSupport In case the wg engine is not supported.
@ -1789,7 +1790,7 @@ public:
* @see Canvas::viewport() * @see Canvas::viewport()
* @see Canvas::sync() * @see Canvas::sync()
*/ */
Result target(void* device, void* instance, void* target, uint32_t w, uint32_t h, int type = 0) noexcept; Result target(void* device, void* instance, void* target, uint32_t w, uint32_t h, ColorSpace cs, int type = 0) noexcept;
/** /**
* @brief Creates a new WgCanvas object. * @brief Creates a new WgCanvas object.

View file

@ -562,10 +562,11 @@ TVG_API Tvg_Canvas* tvg_wgcanvas_create(void);
* *
* @param[in] device WGPUDevice, a desired handle for the wgpu device. If it is @c nullptr, ThorVG will assign an appropriate device internally. * @param[in] device WGPUDevice, a desired handle for the wgpu device. If it is @c nullptr, ThorVG will assign an appropriate device internally.
* @param[in] instance WGPUInstance, context for all other wgpu objects. * @param[in] instance WGPUInstance, context for all other wgpu objects.
* @param[in] target Either WGPUSurface or WGPUTexture, serving as handles to a presentable surface or texture * @param[in] target Either WGPUSurface or WGPUTexture, serving as handles to a presentable surface or texture.
* @param[in] w The width of the target. * @param[in] w The width of the target.
* @param[in] h The height of the target. * @param[in] h The height of the target.
* @param[in] type 0: surface, 1: texture are used as pesentable target * @param[in] cs Specifies how the pixel values should be interpreted. Currently, it only allows @c TVG_COLORSPACE_ABGR8888S as @c WGPUTextureFormat_RGBA8Unorm.
* @param[in] type @c 0: surface, @c 1: texture are used as pesentable target.
* *
* \return Tvg_Result enumeration. * \return Tvg_Result enumeration.
* \retval TVG_RESULT_INSUFFICIENT_CONDITION if the canvas is performing rendering. Please ensure the canvas is synced. * \retval TVG_RESULT_INSUFFICIENT_CONDITION if the canvas is performing rendering. Please ensure the canvas is synced.
@ -573,7 +574,7 @@ TVG_API Tvg_Canvas* tvg_wgcanvas_create(void);
* *
* \note Experimental API * \note Experimental API
*/ */
TVG_API Tvg_Result tvg_wgcanvas_set_target(Tvg_Canvas* canvas, void* device, void* instance, void* target, uint32_t w, uint32_t h, int type = 0); TVG_API Tvg_Result tvg_wgcanvas_set_target(Tvg_Canvas* canvas, void* device, void* instance, void* target, uint32_t w, uint32_t h, Tvg_Colorspace cs, int type = 0);
/** \} */ // end defgroup ThorVGCapi_WgCanvas /** \} */ // end defgroup ThorVGCapi_WgCanvas

View file

@ -109,10 +109,10 @@ TVG_API Tvg_Result tvg_glcanvas_set_target(Tvg_Canvas* canvas, int32_t id, uint3
} }
TVG_API Tvg_Result tvg_wgcanvas_set_target(Tvg_Canvas* canvas, void* device, void* instance, void* target, uint32_t w, uint32_t h, int type) TVG_API Tvg_Result tvg_wgcanvas_set_target(Tvg_Canvas* canvas, void* device, void* instance, void* target, uint32_t w, uint32_t h, Tvg_Colorspace cs, int type)
{ {
if (!canvas) return TVG_RESULT_INVALID_ARGUMENT; if (!canvas) return TVG_RESULT_INVALID_ARGUMENT;
return (Tvg_Result) reinterpret_cast<WgCanvas*>(canvas)->target(device, instance, target, w, h, type); return (Tvg_Result) reinterpret_cast<WgCanvas*>(canvas)->target(device, instance, target, w, h, static_cast<ColorSpace>(cs), type);
} }

View file

@ -150,7 +150,7 @@ struct TvgWgEngine : TvgEngineMethod
void resize(Canvas* canvas, int w, int h) override void resize(Canvas* canvas, int w, int h) override
{ {
#ifdef THORVG_WG_RASTER_SUPPORT #ifdef THORVG_WG_RASTER_SUPPORT
static_cast<WgCanvas*>(canvas)->target(device, instance, surface, w, h); static_cast<WgCanvas*>(canvas)->target(device, instance, surface, w, h, ColorSpace::ABGR8888S);
#endif #endif
} }
}; };

View file

@ -57,9 +57,11 @@ WgCanvas::~WgCanvas()
} }
Result WgCanvas::target(void* device, void* instance, void* target, uint32_t w, uint32_t h, int type) noexcept Result WgCanvas::target(void* device, void* instance, void* target, uint32_t w, uint32_t h, ColorSpace cs, int type) noexcept
{ {
#ifdef THORVG_WG_RASTER_SUPPORT #ifdef THORVG_WG_RASTER_SUPPORT
if (cs != ColorSpace::ABGR8888S) return Result::NonSupport;
if (Canvas::pImpl->status != Status::Damaged && Canvas::pImpl->status != Status::Synced) { if (Canvas::pImpl->status != Status::Damaged && Canvas::pImpl->status != Status::Synced) {
return Result::InsufficientCondition; return Result::InsufficientCondition;
} }