finally the font looks nice

Kate created

Change summary

crates/gpui/examples/text.rs                      |  5 +
crates/gpui/src/platform/windows/direct_write.rs  | 37 ++++++++--------
crates/gpui/src/platform/windows/directx_atlas.rs |  1 
crates/gpui/src/platform/windows/shaders.hlsl     | 19 +++++--
4 files changed, 35 insertions(+), 27 deletions(-)

Detailed changes

crates/gpui/examples/text.rs 🔗

@@ -97,7 +97,7 @@ struct Specimen {
 
 impl Specimen {
     pub fn new(id: usize) -> Self {
-        let string = SharedString::new_static("The quick brown fox jumps over the lazy dog");
+        let string = SharedString::new_static("many thihngs could be written here");
         let id_string = format!("specimen-{}", id);
         let id = ElementId::Name(id_string.into());
         Self {
@@ -151,6 +151,7 @@ impl RenderOnce for Specimen {
         div()
             .id(self.id)
             .bg(theme.bg)
+            .font_family("Zed Plex Mono")
             .text_color(theme.fg)
             .text_size(px(font_size * scale))
             .line_height(relative(line_height))
@@ -270,7 +271,7 @@ impl Render for TextExample {
                     .overflow_x_hidden()
                     .bg(rgb(0xffffff))
                     .size_full()
-                    .child(div().child(CharacterGrid::new().scale(base)))
+                    // .child(div().child(CharacterGrid::new().scale(base)))
                     .child(
                         div()
                             .child(Specimen::new(self.next_id()).scale(step_down_2))

crates/gpui/src/platform/windows/direct_write.rs 🔗

@@ -59,8 +59,8 @@ unsafe impl<T> Send for Syncer<T> {}
 unsafe impl<T> Sync for Syncer<T> {}
 
 struct DirectWriteState {
-    #[cfg(feature = "enable-renderdoc")]
-    renderdoc: Syncer<Arc<RwLock<renderdoc::RenderDoc<renderdoc::V141>>>>,
+    // #[cfg(feature = "enable-renderdoc")]
+    // renderdoc: Syncer<Arc<RwLock<renderdoc::RenderDoc<renderdoc::V141>>>>,
     components: DirectWriteComponent,
     system_ui_font_name: SharedString,
     system_font_collection: IDWriteFontCollection1,
@@ -236,8 +236,8 @@ impl DirectWriteTextSystem {
         let system_ui_font_name = get_system_ui_font_name();
 
         Ok(Self(RwLock::new(DirectWriteState {
-            #[cfg(feature = "enable-renderdoc")]
-            renderdoc: Syncer(Arc::new(RwLock::new(renderdoc::RenderDoc::new().unwrap()))),
+            // #[cfg(feature = "enable-renderdoc")]
+            // renderdoc: Syncer(Arc::new(RwLock::new(renderdoc::RenderDoc::new().unwrap()))),
             components,
             system_ui_font_name,
             system_font_collection,
@@ -965,11 +965,10 @@ impl DirectWriteState {
                     let bitmap_idx = bitmap_y * bitmap_size.width.0 as usize + bitmap_x;
 
                     if texture_idx + 2 < alpha_data.len() && bitmap_idx < bitmap_data.len() {
-                        let avg = (alpha_data[texture_idx] as u32
-                            + alpha_data[texture_idx + 1] as u32
-                            + alpha_data[texture_idx + 2] as u32)
-                            / 3;
-                        bitmap_data[bitmap_idx] = avg as u8;
+                        let max_value = alpha_data[texture_idx]
+                            .max(alpha_data[texture_idx + 1])
+                            .max(alpha_data[texture_idx + 2]);
+                        bitmap_data[bitmap_idx] = max_value;
                     }
                 }
             }
@@ -1157,11 +1156,11 @@ impl DirectWriteState {
             texture.unwrap()
         };
 
-        #[cfg(feature = "enable-renderdoc")]
-        self.renderdoc
-            .0
-            .write()
-            .start_frame_capture(std::ptr::null(), std::ptr::null());
+        // #[cfg(feature = "enable-renderdoc")]
+        // self.renderdoc
+        //     .0
+        //     .write()
+        //     .start_frame_capture(std::ptr::null(), std::ptr::null());
 
         let device_context = &gpu_state.device_context;
         unsafe { device_context.IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP) };
@@ -1240,11 +1239,11 @@ impl DirectWriteState {
             };
         }
 
-        #[cfg(feature = "enable-renderdoc")]
-        self.renderdoc
-            .0
-            .write()
-            .end_frame_capture(std::ptr::null(), std::ptr::null());
+        // #[cfg(feature = "enable-renderdoc")]
+        // self.renderdoc
+        //     .0
+        //     .write()
+        //     .end_frame_capture(std::ptr::null(), std::ptr::null());
 
         println!("render finished");
 

crates/gpui/src/platform/windows/shaders.hlsl 🔗

@@ -1060,15 +1060,22 @@ float4 blend_color(float4 color, float alpha_factor) {
     return float4(color.rgb * multiplier, alpha);
 }
 
+float3 linear_to_srgbee(float3 l) {
+    bool cutoff = l < float3(0.0031308, 0.0031308, 0.0031308);
+    float3 higher = float3(1.055, 1.055, 1.055) * pow(l, float3(1.0 / 2.4, 1.0 / 2.4, 1.0 / 2.4)) - float3(0.055, 0.055, 0.055);
+    float3 lower = l * float3(12.92, 12.92, 12.92);
+    return cutoff ? lower : higher;
+}
+
 float4 monochrome_sprite_fragment(MonochromeSpriteFragmentInput input): SV_Target {
     float sample = t_sprite.Sample(s_sprite, input.tile_position).r;
     float4 color = input.color;
-    color.a *= sample;
-    return color;
-    // if (any(input.clip_distance < 0.0)) {
-    //     return float4(0.0, 0.0, 0.0, 0.0);
-    // }
-    // return blend_color(input.color, sample);
+    // color.a *= sample;
+    // return float4(color.rgb, color.a);
+    if (any(input.clip_distance < 0.0)) {
+        return float4(0.0, 0.0, 0.0, 0.0);
+    }
+    return blend_color(input.color, sample);
 }
 
 /*