Skip to content

Commit 715b09f

Browse files
committed
sokol_gfx_imgui.h: view objects wip
1 parent 8b88e4f commit 715b09f

2 files changed

Lines changed: 81 additions & 21 deletions

File tree

sokol_gfx.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3212,6 +3212,7 @@ typedef enum sg_view_type {
32123212
SG_VIEWTYPE_COLORATTACHMENT,
32133213
SG_VIEWTYPE_RESOLVEATTACHMENT,
32143214
SG_VIEWTYPE_DEPTHSTENCILATTACHMENT,
3215+
_SG_VIEWTYPE_FORCE_U32 = 0x7FFFFFFF
32153216
} sg_view_type;
32163217

32173218
/*
@@ -19150,7 +19151,7 @@ _SOKOL_PRIVATE bool _sg_validate_view_desc(const sg_view_desc* desc) {
1915019151
_SG_VALIDATE(img->cmn.usage.depth_stencil_attachment, VALIDATE_VIEWDESC_DEPTHSTENCILATTACHMENT_USAGE);
1915119152
_SG_VALIDATE(_sg_is_valid_attachment_depth_format(img->cmn.pixel_format), VALIDATE_VIEWDESC_DEPTHSTENCILATTACHMENT_PIXELFORMAT);
1915219153
break;
19153-
case SG_VIEWTYPE_INVALID:
19154+
default:
1915419155
SOKOL_UNREACHABLE;
1915519156
break;
1915619157
}

util/sokol_gfx_imgui.h

Lines changed: 79 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1557,6 +1557,18 @@ _SOKOL_PRIVATE const char* _sgimgui_shaderattrbasetype_string(sg_shader_attr_bas
15571557
}
15581558
}
15591559

1560+
_SOKOL_PRIVATE const char* _sgimgui_viewtype_string(sg_view_type t) {
1561+
switch (t) {
1562+
case SG_VIEWTYPE_STORAGEBUFFER: return "SG_VIEWTYPE_STORAGEBUFFER";
1563+
case SG_VIEWTYPE_STORAGEIMAGE: return "SG_VIEWTYPE_STORAGEIMAGE";
1564+
case SG_VIEWTYPE_TEXTURE: return "SG_VIEWTYPE_TEXTURE";
1565+
case SG_VIEWTYPE_COLORATTACHMENT: return "SG_VIEWTYPE_COLORATTACHMENT";
1566+
case SG_VIEWTYPE_RESOLVEATTACHMENT: return "SG_VIEWTYPE_RESOLVEATTACHMENT";
1567+
case SG_VIEWTYPE_DEPTHSTENCILATTACHMENT: return "SG_VIEWTYPE_DEPTHSTENCILATTACHMENT";
1568+
default: return "???";
1569+
}
1570+
}
1571+
15601572
_SOKOL_PRIVATE const char* _sgimgui_bool_string(bool b) {
15611573
return b ? "true" : "false";
15621574
}
@@ -3462,24 +3474,22 @@ _SOKOL_PRIVATE bool _sgimgui_image_renderable(sg_image_type type, sg_pixel_forma
34623474
&& sample_count == 1;
34633475
}
34643476

3465-
_SOKOL_PRIVATE void _sgimgui_draw_texture_view(sgimgui_t* ctx, sg_view view, float* scale) {
3466-
(void)ctx; (void)view; (void)scale;
3467-
_sgimgui_igtext("FIXME: render texture view");
3468-
/* FIXME FIXME FIXME
3469-
if (sg_query_image_state(img) == SG_RESOURCESTATE_VALID) {
3470-
sgimgui_image_t* img_ui = &ctx->image_window.slots[_sgimgui_slot_index(img.id)];
3471-
if (_sgimgui_image_renderable(img_ui->desc.type, img_ui->desc.pixel_format, img_ui->desc.sample_count)) {
3472-
_sgimgui_igpushidint((int)img.id);
3473-
_sgimgui_igsliderfloatex("Scale", scale, 0.125f, 8.0f, "%.3f", ImGuiSliderFlags_Logarithmic);
3474-
float w = (float)img_ui->desc.width * (*scale);
3475-
float h = (float)img_ui->desc.height * (*scale);
3476-
_sgimgui_igimage(simgui_imtextureid(img_ui->res_id), IMVEC2(w, h));
3477-
_sgimgui_igpopid();
3478-
} else {
3479-
_sgimgui_igtext("Image not renderable.");
3480-
}
3477+
_SOKOL_PRIVATE void _sgimgui_draw_texture_view(sg_view view, float* scale) {
3478+
if (sg_query_view_state(view) != SG_RESOURCESTATE_VALID) {
3479+
_sgimgui_igtext("View not in valid state.");
3480+
return;
34813481
}
3482-
*/
3482+
if (sg_query_view_type(view) != SG_VIEWTYPE_TEXTURE) {
3483+
_sgimgui_igtext("View not a texture view.");
3484+
return;
3485+
}
3486+
_sgimgui_igpushidint((int)view.id);
3487+
_sgimgui_igsliderfloatex("Scale", scale, 0.125f, 8.0f, "%.3f", ImGuiSliderFlags_Logarithmic);
3488+
sg_image img = sg_query_view_image(view);
3489+
float w = (float)sg_query_image_width(img) * (*scale);
3490+
float h = (float)sg_query_image_height(img) * (*scale);
3491+
_sgimgui_igimage(simgui_imtextureid(view), IMVEC2(w, h));
3492+
_sgimgui_igpopid();
34833493
}
34843494

34853495
_SOKOL_PRIVATE void _sgimgui_draw_image_panel(sgimgui_t* ctx, sg_image img) {
@@ -3905,10 +3915,59 @@ _SOKOL_PRIVATE void _sgimgui_draw_pipeline_panel(sgimgui_t* ctx, sg_pipeline pip
39053915
}
39063916
}
39073917

3918+
_SOKOL_PRIVATE void _sgimgui_draw_buffer_view(sgimgui_t* ctx, const char* title, const sg_buffer_view_desc* desc) {
3919+
_sgimgui_igtext("%s:", title);
3920+
_sgimgui_igtext(" Buffer: "); _sgimgui_igsameline();
3921+
if (_sgimgui_draw_buffer_link(ctx, desc->buffer)) {
3922+
_sgimgui_show_buffer(ctx, desc->buffer);
3923+
}
3924+
_sgimgui_igtext(" Offset: %d", desc->offset);
3925+
}
3926+
3927+
_SOKOL_PRIVATE void _sgimgui_draw_image_view(sgimgui_t* ctx, const sg_image_view_desc* desc) {
3928+
3929+
}
3930+
3931+
_SOKOL_PRIVATE void _sgimgui_draw_texture_view(sgimgui_t* ctx, const sg_texture_view_desc* desc) {
3932+
3933+
}
3934+
39083935
_SOKOL_PRIVATE void _sgimgui_draw_view_panel(sgimgui_t* ctx, sg_view view) {
39093936
if (view.id != SG_INVALID_ID) {
3910-
_sgimgui_igbeginchild("views", IMVEC2(0,0), false, 0);
3911-
_sgimgui_igtext("FIXME FIXME FIXME"); (void)ctx;
3937+
_sgimgui_igbeginchild("view", IMVEC2(0,0), false, 0);
3938+
sg_view_info info = sg_query_view_info(view);
3939+
if (info.slot.state == SG_RESOURCESTATE_VALID) {
3940+
sgimgui_view_t* view_ui = &ctx->view_window.slots[_sgimgui_slot_index(view.id)];
3941+
_sgimgui_igtext("Label: %s", view_ui->label.buf[0] ? view_ui->label.buf : "---");
3942+
_sgimgui_draw_resource_slot(&info.slot);
3943+
_sgimgui_igseparator();
3944+
const sg_view_desc desc = sg_query_view_desc(view);
3945+
const sg_view_type type = sg_query_view_type(view);
3946+
switch (type) {
3947+
case SG_VIEWTYPE_STORAGEBUFFER:
3948+
_sgimgui_draw_buffer_view(ctx, "Storage Buffer Binding", &desc.storage_buffer_binding);
3949+
break;
3950+
case SG_VIEWTYPE_STORAGEIMAGE:
3951+
_sgimgui_draw_image_view(ctx, &desc.storage_image_binding);
3952+
break;
3953+
case SG_VIEWTYPE_TEXTURE:
3954+
_sgimgui_draw_texture_view(ctx, &desc.texture_binding);
3955+
break;
3956+
case SG_VIEWTYPE_COLORATTACHMENT:
3957+
_sgimgui_draw_image_view(ctx, &desc.color_attachment);
3958+
break;
3959+
case SG_VIEWTYPE_RESOLVEATTACHMENT:
3960+
_sgimgui_draw_image_view(ctx, &desc.resolve_attachment);
3961+
break;
3962+
case SG_VIEWTYPE_DEPTHSTENCILATTACHMENT:
3963+
_sgimgui_draw_image_view(ctx, &desc.depth_stencil_attachment);
3964+
break;
3965+
default:
3966+
break;
3967+
}
3968+
} else {
3969+
_sgimgui_igtext("View 0x%08X not valid.", view.id);
3970+
}
39123971
/*
39133972
sg_attachments_info info = sg_query_attachments_info(atts);
39143973
if (info.slot.state == SG_RESOURCESTATE_VALID) {
@@ -4766,10 +4825,10 @@ SOKOL_API_IMPL void sgimgui_draw_menu(sgimgui_t* ctx, const char* title) {
47664825
_sgimgui_igmenuitemboolptr("Frame Stats", 0, &ctx->frame_stats_window.open, true);
47674826
_sgimgui_igmenuitemboolptr("Buffers", 0, &ctx->buffer_window.open, true);
47684827
_sgimgui_igmenuitemboolptr("Images", 0, &ctx->image_window.open, true);
4828+
_sgimgui_igmenuitemboolptr("Views", 0, &ctx->view_window.open, true);
47694829
_sgimgui_igmenuitemboolptr("Samplers", 0, &ctx->sampler_window.open, true);
47704830
_sgimgui_igmenuitemboolptr("Shaders", 0, &ctx->shader_window.open, true);
47714831
_sgimgui_igmenuitemboolptr("Pipelines", 0, &ctx->pipeline_window.open, true);
4772-
_sgimgui_igmenuitemboolptr("Views", 0, &ctx->view_window.open, true);
47734832
_sgimgui_igmenuitemboolptr("Calls", 0, &ctx->capture_window.open, true);
47744833
_sgimgui_igendmenu();
47754834
}

0 commit comments

Comments
 (0)