| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_UI_LIB_ESCHER_DEBUG_DEBUG_FONT_H_ |
| #define SRC_UI_LIB_ESCHER_DEBUG_DEBUG_FONT_H_ |
| |
| #include <memory> |
| #include <vulkan/vulkan.hpp> |
| |
| #include "src/ui/lib/escher/forward_declarations.h" |
| |
| namespace escher { |
| |
| // This is a monospaced bitmap font renderer that blits to the output image for |
| // maximal performance. |
| class DebugFont { |
| public: |
| static std::unique_ptr<DebugFont> New(BatchGpuUploader* uploader, ImageFactory* factory); |
| |
| // Return RGBA pixels containing a monospace bitmap ASCII font. Each glyph is |
| // 7x7 pixels (including 1 pixel of padding around each edge of the glyph). |
| // The glyphs are packed in a single column with total dimensions 7x1792. |
| static std::unique_ptr<uint8_t[]> GetFontPixels(); |
| |
| static constexpr uint32_t kGlyphWidth = 7; |
| static constexpr uint32_t kGlyphHeight = 7; |
| static constexpr uint32_t kGlyphPadding = 1; |
| static constexpr uint32_t kNumGlyphs = 256; |
| |
| // Blit the specified text into |output_image|. |target_offset| is the |
| // top-left corner of the display region. |scale| is an integer multiplier |
| // that scales the width and height of each displayed glyph. The caller is |
| // responsible for setting memory barriers; |output_image| must have layout |
| // vk::ImageLayout::eTransferDstOptimal before Blit() is called. |
| void Blit(CommandBuffer* cb, const std::string& text, const ImagePtr& output_image, |
| vk::Offset2D target_offset, int32_t scale); |
| |
| private: |
| explicit DebugFont(ImagePtr image); |
| ImagePtr image_; |
| }; |
| |
| } // namespace escher |
| |
| #endif // SRC_UI_LIB_ESCHER_DEBUG_DEBUG_FONT_H_ |