Fix faders, z indexing, svg rendering
This commit is contained in:
@@ -118,8 +118,12 @@ float rounded_rect_sdf(float2 sample_pos, float2 rect_center, float2 rect_half_s
|
||||
float4 PSMain(PSInput input) : SV_TARGET {
|
||||
float4 col = input.col;
|
||||
|
||||
if (input.mode > 0.5) {
|
||||
// Textured glyph mode: sample font atlas alpha
|
||||
if (input.mode > 1.5) {
|
||||
// RGBA textured mode: sample all channels, multiply by vertex color
|
||||
float4 tex = font_tex.Sample(font_smp, input.uv);
|
||||
col *= tex;
|
||||
} else if (input.mode > 0.5) {
|
||||
// Alpha-only textured mode: sample R channel as alpha (font atlas)
|
||||
float alpha = font_tex.Sample(font_smp, input.uv).r;
|
||||
col.a *= alpha;
|
||||
} else {
|
||||
@@ -210,6 +214,11 @@ struct Renderer {
|
||||
HDC measure_dc;
|
||||
HFONT measure_font;
|
||||
F32 measure_font_size;
|
||||
|
||||
// Clear color
|
||||
float clear_r = 0.12f;
|
||||
float clear_g = 0.12f;
|
||||
float clear_b = 0.13f;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
@@ -914,7 +923,7 @@ static void emit_quad_rotated(DrawBatch *batch,
|
||||
v[i].corner_radii[2] = 0; v[i].corner_radii[3] = 0;
|
||||
v[i].border_thickness = 0;
|
||||
v[i].softness = 0;
|
||||
v[i].mode = 1.0f;
|
||||
v[i].mode = 2.0f;
|
||||
}
|
||||
|
||||
U32 *idx = &batch->indices[batch->index_count];
|
||||
@@ -1175,7 +1184,7 @@ void renderer_end_frame(Renderer *r, Clay_RenderCommandArray render_commands) {
|
||||
barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET;
|
||||
r->command_list->ResourceBarrier(1, &barrier);
|
||||
|
||||
const float clear_color[4] = { 0.12f, 0.12f, 0.13f, 1.0f };
|
||||
const float clear_color[4] = { r->clear_r, r->clear_g, r->clear_b, 1.0f };
|
||||
r->command_list->ClearRenderTargetView(r->rtv_descriptors[back_buffer_idx], clear_color, 0, nullptr);
|
||||
r->command_list->OMSetRenderTargets(1, &r->rtv_descriptors[back_buffer_idx], FALSE, nullptr);
|
||||
|
||||
@@ -1202,14 +1211,15 @@ void renderer_end_frame(Renderer *r, Clay_RenderCommandArray render_commands) {
|
||||
|
||||
auto bind_font = [&]() {
|
||||
if (bound_texture != 0) {
|
||||
flush_batch(r, &batch, buf_idx, &flush_index_start, r->srv_heap);
|
||||
ID3D12DescriptorHeap *heap = bound_texture == 1 ? r->icon_srv_heap : r->srv_heap;
|
||||
flush_batch(r, &batch, buf_idx, &flush_index_start, heap);
|
||||
bound_texture = 0;
|
||||
}
|
||||
};
|
||||
|
||||
auto bind_icon = [&]() {
|
||||
if (bound_texture != 1 && r->icon_srv_heap) {
|
||||
flush_batch(r, &batch, buf_idx, &flush_index_start);
|
||||
flush_batch(r, &batch, buf_idx, &flush_index_start, r->srv_heap);
|
||||
bound_texture = 1;
|
||||
}
|
||||
};
|
||||
@@ -1330,7 +1340,7 @@ void renderer_end_frame(Renderer *r, Clay_RenderCommandArray render_commands) {
|
||||
cr, cg, cb, ca,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 1.0f);
|
||||
0, 0, 2.0f);
|
||||
} else if (type == CUSTOM_RENDER_ROTATED_ICON) {
|
||||
bind_icon();
|
||||
CustomRotatedIconData *ri = (CustomRotatedIconData *)custom->customData;
|
||||
@@ -1383,7 +1393,7 @@ void renderer_create_icon_atlas(Renderer *r, const uint8_t *data, int32_t w, int
|
||||
tex_desc.Height = h;
|
||||
tex_desc.DepthOrArraySize = 1;
|
||||
tex_desc.MipLevels = 1;
|
||||
tex_desc.Format = DXGI_FORMAT_R8_UNORM;
|
||||
tex_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
tex_desc.SampleDesc.Count = 1;
|
||||
tex_desc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN;
|
||||
|
||||
@@ -1418,7 +1428,7 @@ void renderer_create_icon_atlas(Renderer *r, const uint8_t *data, int32_t w, int
|
||||
upload_buf->Map(0, &read_range, &mapped);
|
||||
U8 *dst = (U8 *)mapped;
|
||||
for (int y = 0; y < h; y++) {
|
||||
memcpy(dst + y * footprint.Footprint.RowPitch, data + y * w, w);
|
||||
memcpy(dst + y * footprint.Footprint.RowPitch, data + y * w * 4, w * 4);
|
||||
}
|
||||
upload_buf->Unmap(0, nullptr);
|
||||
|
||||
@@ -1458,7 +1468,7 @@ void renderer_create_icon_atlas(Renderer *r, const uint8_t *data, int32_t w, int
|
||||
r->device->CreateDescriptorHeap(&srv_desc, IID_PPV_ARGS(&r->icon_srv_heap));
|
||||
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srv_view = {};
|
||||
srv_view.Format = DXGI_FORMAT_R8_UNORM;
|
||||
srv_view.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
srv_view.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
srv_view.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
srv_view.Texture2D.MipLevels = 1;
|
||||
@@ -1482,3 +1492,17 @@ void renderer_resize(Renderer *r, int32_t width, int32_t height) {
|
||||
r->width = width;
|
||||
r->height = height;
|
||||
}
|
||||
|
||||
void renderer_set_clear_color(Renderer *r, float cr, float cg, float cb) {
|
||||
r->clear_r = cr;
|
||||
r->clear_g = cg;
|
||||
r->clear_b = cb;
|
||||
}
|
||||
|
||||
void renderer_set_font_scale(Renderer *r, float scale) {
|
||||
float target_size = 15.0f * scale;
|
||||
if (fabsf(target_size - r->font_atlas_size) < 0.1f) return;
|
||||
wait_for_pending(r);
|
||||
if (r->font_texture) { r->font_texture->Release(); r->font_texture = nullptr; }
|
||||
create_font_atlas(r, target_size);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user