@@ -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