62 MTL::PixelFormat
format = MTL::PixelFormatBGRA8Unorm;
64 const char*
label =
"TextureStream";
86 void writeRegion(
const void* data,
size_t bytesPerRow,
87 MTL::Region region, uint32_t mipLevel = 0);
109 void endFrame(MTL::CommandBuffer* commandBuffer);
113 [[nodiscard]] uint32_t
width()
const {
return _desc.width; }
114 [[nodiscard]] uint32_t
height()
const {
return _desc.height; }
115 [[nodiscard]] MTL::PixelFormat
format()
const {
return _desc.format; }
118 [[nodiscard]] uint64_t
framesPublished()
const {
return _publishCount.load(std::memory_order_relaxed); }
121 [[nodiscard]] uint64_t
framesDropped()
const {
return _dropCount.load(std::memory_order_relaxed); }
127 MTL::Device* _device;
130 std::array<MTL::Texture*, kNumSlots> _textures{};
131 dispatch_semaphore_t _slotSemaphore =
nullptr;
135 std::atomic<int> _writeIndex{0};
136 std::atomic<int> _readyIndex{1};
137 std::atomic<int> _readIndex{2};
141 std::atomic<MTL::Texture*> _externalReady{
nullptr};
144 std::atomic<uint64_t> _publishCount{0};
145 std::atomic<uint64_t> _dropCount{0};
147 bool _hasPublished =
false;