From 2b488944b877b55c61cdba412fcee1b6d3fc00be Mon Sep 17 00:00:00 2001 From: Kyle Date: Sun, 11 Jan 2026 15:50:03 +0800 Subject: [PATCH 1/5] Add ORBDisplayList for Linux --- Sources/OpenRenderBox/Render/ORBDisplayList.swift | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Sources/OpenRenderBox/Render/ORBDisplayList.swift diff --git a/Sources/OpenRenderBox/Render/ORBDisplayList.swift b/Sources/OpenRenderBox/Render/ORBDisplayList.swift new file mode 100644 index 0000000..2088a41 --- /dev/null +++ b/Sources/OpenRenderBox/Render/ORBDisplayList.swift @@ -0,0 +1,12 @@ +// +// ORBDisplayList.swift +// OpenRenderBox +// +// Created by Kyle on 1/11/26. +// + +#if !canImport(ObjectiveC) +public final class ORBDisplayList { + +} +#endif From fdfdc408bae3cec8a624b06461b0727fb1a84e0b Mon Sep 17 00:00:00 2001 From: Kyle Date: Sun, 11 Jan 2026 15:59:48 +0800 Subject: [PATCH 2/5] Update ORBColorMode --- .../OpenRenderBoxCxx/Color/ORBColorMode.cpp | 60 ++++++++++--------- .../include/OpenRenderBox/ORBColorMode.h | 20 +------ .../LayerTests.swift | 8 +-- 3 files changed, 36 insertions(+), 52 deletions(-) diff --git a/Sources/OpenRenderBoxCxx/Color/ORBColorMode.cpp b/Sources/OpenRenderBoxCxx/Color/ORBColorMode.cpp index c7c3ed5..b4d0f3f 100644 --- a/Sources/OpenRenderBoxCxx/Color/ORBColorMode.cpp +++ b/Sources/OpenRenderBoxCxx/Color/ORBColorMode.cpp @@ -4,39 +4,41 @@ #include +// Working color space lookup table +// Index: mode value (0-15), Value: ORBColorSpace +// 1 = SRGB, 2 = LinearSRGB +static const ORBColorSpace kColorModeWorkingColorSpaceTable[16] = { + ORBColorSpaceSRGB, // 0 + ORBColorSpaceLinearSRGB, // 1 + ORBColorSpaceLinearSRGB, // 2 + ORBColorSpaceSRGB, // 3 + ORBColorSpaceSRGB, // 4 + ORBColorSpaceSRGB, // 5 + ORBColorSpaceLinearSRGB, // 6 + ORBColorSpaceLinearSRGB, // 7 + ORBColorSpaceLinearSRGB, // 8 + ORBColorSpaceSRGB, // 9 + ORBColorSpaceLinearSRGB, // 10 + ORBColorSpaceSRGB, // 11 + ORBColorSpaceSRGB, // 12 + ORBColorSpaceLinearSRGB, // 13 + ORBColorSpaceSRGB, // 14 + ORBColorSpaceLinearSRGB, // 15 +}; + ORBColorSpace ORBColorModeWorkingColorSpace(ORBColorMode mode) { - switch (mode) { - case ORBColorMode0: - case ORBColorMode3: - case ORBColorMode4: - case ORBColorMode5: - case ORBColorMode9: - case ORBColorMode11: - case ORBColorMode12: - case ORBColorMode14: - return ORBColorSpaceSRGB; - case ORBColorMode1: - case ORBColorMode2: - case ORBColorMode6: - case ORBColorMode7: - case ORBColorMode8: - case ORBColorMode10: - case ORBColorMode13: - case ORBColorMode15: - return ORBColorSpaceLinearSRGB; - default: - return ORBColorSpaceDefault; + if (mode < 0 || mode > 15) { + return ORBColorSpaceDefault; } + return kColorModeWorkingColorSpaceTable[mode]; } bool ORBColorModeHasExtendedRange(ORBColorMode mode) { - switch (mode) { - case ORBColorMode2: - case ORBColorMode11: - case ORBColorMode12: - case ORBColorMode13: - return true; - default: - return false; + // Extended range modes: 2, 11, 12, 13 + // 0x3804 = 0011 1000 0000 0100 binary + if (mode < 0 || mode > 15) { + return false; } + uint32_t mask = 0x3804; + return (mask >> mode) & 1; } \ No newline at end of file diff --git a/Sources/OpenRenderBoxCxx/include/OpenRenderBox/ORBColorMode.h b/Sources/OpenRenderBoxCxx/include/OpenRenderBox/ORBColorMode.h index 568511c..fde751c 100644 --- a/Sources/OpenRenderBoxCxx/include/OpenRenderBox/ORBColorMode.h +++ b/Sources/OpenRenderBoxCxx/include/OpenRenderBox/ORBColorMode.h @@ -11,25 +11,7 @@ ORB_ASSUME_NONNULL_BEGIN ORB_EXTERN_C_BEGIN -// TODO: Review those names later -typedef ORB_ENUM(int32_t, ORBColorMode) { - ORBColorMode0 = 0, - ORBColorMode1 = 1, - ORBColorMode2 = 2, - ORBColorMode3 = 3, - ORBColorMode4 = 4, - ORBColorMode5 = 5, - ORBColorMode6 = 6, - ORBColorMode7 = 7, - ORBColorMode8 = 8, - ORBColorMode9 = 9, - ORBColorMode10 = 10, - ORBColorMode11 = 11, - ORBColorMode12 = 12, - ORBColorMode13 = 13, - ORBColorMode14 = 14, - ORBColorMode15 = 15, -} ORB_SWIFT_NAME(ORBColor.Mode); +typedef int32_t ORBColorMode ORB_SWIFT_STRUCT ORB_SWIFT_NAME(ORBColor.Mode); ORB_EXPORT ORBColorSpace ORBColorModeWorkingColorSpace(ORBColorMode mode) ORB_SWIFT_NAME(getter:ORBColorMode.workingColorSpace(self:)); ORB_EXPORT bool ORBColorModeHasExtendedRange(ORBColorMode mode) ORB_SWIFT_NAME(getter:ORBColorMode.hasExtendedRange(self:)); diff --git a/Tests/OpenRenderBoxCompatibilityTests/LayerTests.swift b/Tests/OpenRenderBoxCompatibilityTests/LayerTests.swift index 3f71ec1..39bd072 100644 --- a/Tests/OpenRenderBoxCompatibilityTests/LayerTests.swift +++ b/Tests/OpenRenderBoxCompatibilityTests/LayerTests.swift @@ -25,10 +25,10 @@ struct LayerTests { #expect(layer.rendersAsynchronously == false) // colorMode - layer.colorMode = 0 - #expect(layer.colorMode == 0) - layer.colorMode = 1 - #expect(layer.colorMode == 1) + layer.colorMode = .init(0) + #expect(layer.colorMode.rawValue == 0) + layer.colorMode = .init(1) + #expect(layer.colorMode.rawValue == 1) // promotesFramebuffer layer.promotesFramebuffer = true From 4105f83d05330077065f28ac444b3a949c43fe5f Mon Sep 17 00:00:00 2001 From: Kyle Date: Sun, 11 Jan 2026 16:34:38 +0800 Subject: [PATCH 3/5] Fix ColorSpace --- .../include/OpenRenderBox/ORBColorSpace.h | 2 +- .../ColorTests.swift | 44 +++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/Sources/OpenRenderBoxCxx/include/OpenRenderBox/ORBColorSpace.h b/Sources/OpenRenderBoxCxx/include/OpenRenderBox/ORBColorSpace.h index 5382768..98e4e14 100644 --- a/Sources/OpenRenderBoxCxx/include/OpenRenderBox/ORBColorSpace.h +++ b/Sources/OpenRenderBoxCxx/include/OpenRenderBox/ORBColorSpace.h @@ -16,7 +16,7 @@ typedef ORB_ENUM(uint32_t, ORBColorSpace) { ORBColorSpaceLinearSRGB = 2, ORBColorSpaceDisplayP3 = 3, ORBColorSpaceLinearDisplayP3 = 4, -} ORB_SWIFT_NAME(ORBColor.Space); +} ORB_SWIFT_NAME(ORBColor.ColorSpace); ORB_EXTERN_C_END diff --git a/Tests/OpenRenderBoxCompatibilityTests/ColorTests.swift b/Tests/OpenRenderBoxCompatibilityTests/ColorTests.swift index b3d1685..815308f 100644 --- a/Tests/OpenRenderBoxCompatibilityTests/ColorTests.swift +++ b/Tests/OpenRenderBoxCompatibilityTests/ColorTests.swift @@ -135,12 +135,12 @@ struct ColorTests { #if canImport(CoreGraphics) @Test("ORBColorCopyCGColor", arguments: [ - (ORBColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0), ORBColor.Space.SRGB), - (ORBColor(red: 0.0, green: 1.0, blue: 0.0, alpha: 1.0), ORBColor.Space.linearSRGB), - (ORBColor(red: 0.0, green: 0.0, blue: 1.0, alpha: 0.5), ORBColor.Space.displayP3), - (ORBColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0), ORBColor.Space.linearDisplayP3), + (ORBColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0), ORBColor.ColorSpace.SRGB), + (ORBColor(red: 0.0, green: 1.0, blue: 0.0, alpha: 1.0), ORBColor.ColorSpace.linearSRGB), + (ORBColor(red: 0.0, green: 0.0, blue: 1.0, alpha: 0.5), ORBColor.ColorSpace.displayP3), + (ORBColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0), ORBColor.ColorSpace.linearDisplayP3), ]) - func colorCopyCGColor(color: ORBColor, colorSpace: ORBColor.Space) throws { + func colorCopyCGColor(color: ORBColor, colorSpace: ORBColor.ColorSpace) throws { let cgColor = try #require(color.cgColor(colorSpace: colorSpace)) #expect(cgColor.numberOfComponents == 4) let components = cgColor.components! @@ -157,24 +157,24 @@ struct ColorTests { // MARK: - ORBColorModeWorkingColorSpace @Test("ORBColorModeWorkingColorSpace", arguments: [ - (ORBColor.Mode.mode0, ORBColor.Space.SRGB), - (ORBColor.Mode.mode1, ORBColor.Space.linearSRGB), - (ORBColor.Mode.mode2, ORBColor.Space.linearSRGB), - (ORBColor.Mode.mode3, ORBColor.Space.SRGB), - (ORBColor.Mode.mode4, ORBColor.Space.SRGB), - (ORBColor.Mode.mode5, ORBColor.Space.SRGB), - (ORBColor.Mode.mode6, ORBColor.Space.linearSRGB), - (ORBColor.Mode.mode7, ORBColor.Space.linearSRGB), - (ORBColor.Mode.mode8, ORBColor.Space.linearSRGB), - (ORBColor.Mode.mode9, ORBColor.Space.SRGB), - (ORBColor.Mode.mode10, ORBColor.Space.linearSRGB), - (ORBColor.Mode.mode11, ORBColor.Space.SRGB), - (ORBColor.Mode.mode12, ORBColor.Space.SRGB), - (ORBColor.Mode.mode13, ORBColor.Space.linearSRGB), - (ORBColor.Mode.mode14, ORBColor.Space.SRGB), - (ORBColor.Mode.mode15, ORBColor.Space.linearSRGB), + (ORBColor.Mode.mode0, ORBColor.ColorSpace.SRGB), + (ORBColor.Mode.mode1, ORBColor.ColorSpace.linearSRGB), + (ORBColor.Mode.mode2, ORBColor.ColorSpace.linearSRGB), + (ORBColor.Mode.mode3, ORBColor.ColorSpace.SRGB), + (ORBColor.Mode.mode4, ORBColor.ColorSpace.SRGB), + (ORBColor.Mode.mode5, ORBColor.ColorSpace.SRGB), + (ORBColor.Mode.mode6, ORBColor.ColorSpace.linearSRGB), + (ORBColor.Mode.mode7, ORBColor.ColorSpace.linearSRGB), + (ORBColor.Mode.mode8, ORBColor.ColorSpace.linearSRGB), + (ORBColor.Mode.mode9, ORBColor.ColorSpace.SRGB), + (ORBColor.Mode.mode10, ORBColor.ColorSpace.linearSRGB), + (ORBColor.Mode.mode11, ORBColor.ColorSpace.SRGB), + (ORBColor.Mode.mode12, ORBColor.ColorSpace.SRGB), + (ORBColor.Mode.mode13, ORBColor.ColorSpace.linearSRGB), + (ORBColor.Mode.mode14, ORBColor.ColorSpace.SRGB), + (ORBColor.Mode.mode15, ORBColor.ColorSpace.linearSRGB), ]) - func colorModeWorkingColorSpace(mode: ORBColor.Mode, expectedColorSpace: ORBColor.Space) { + func colorModeWorkingColorSpace(mode: ORBColor.Mode, expectedColorSpace: ORBColor.ColorSpace) { #expect(mode.workingColorSpace == expectedColorSpace) } From 258a352f0c8c872cc8ce09840a39595519c79ba6 Mon Sep 17 00:00:00 2001 From: Kyle Date: Sun, 11 Jan 2026 18:58:10 +0800 Subject: [PATCH 4/5] Update ORBLayer --- .../include/OpenRenderBoxObjC/Render/ORBLayer.h | 4 +++- .../include/OpenRenderBoxObjC/Render/ORBLayerDelegate.h | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBLayer.h b/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBLayer.h index dee295e..3f3fca5 100644 --- a/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBLayer.h +++ b/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBLayer.h @@ -4,11 +4,13 @@ #pragma once +#include "OpenRenderBox/ORBColorMode.h" #include #if ORB_OBJC_FOUNDATION #include +#include #include #include #include @@ -29,7 +31,7 @@ ORB_ASSUME_NONNULL_BEGIN @property (retain, nonatomic, nullable) ORBDevice *device; @property (nonatomic) BOOL rendersAsynchronously; -@property (nonatomic) int colorMode; +@property (nonatomic) ORBColorMode colorMode; @property (nonatomic) BOOL promotesFramebuffer; @property (nonatomic) NSUInteger pixelFormat; @property (nonatomic) BOOL clearsBackground; diff --git a/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBLayerDelegate.h b/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBLayerDelegate.h index 3e6f9db..ce69846 100644 --- a/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBLayerDelegate.h +++ b/Sources/OpenRenderBoxCxx/include/OpenRenderBoxObjC/Render/ORBLayerDelegate.h @@ -9,7 +9,7 @@ #if ORB_OBJC_FOUNDATION #include - +#include #include #include @@ -24,7 +24,7 @@ ORB_ASSUME_NONNULL_BEGIN @optional - (void)RBLayer:(ORBLayer *)layer draw:(ORBDisplayList *)inDisplayList; -- (nullable id)RBLayerDefaultDevice:(ORBLayer *)layer; +- (nullable ORBDevice *)RBLayerDefaultDevice:(ORBLayer *)layer; @end From 91385143b59acffee132e6ee8e0cc47998b7a16e Mon Sep 17 00:00:00 2001 From: Kyle Date: Sun, 11 Jan 2026 20:13:42 +0800 Subject: [PATCH 5/5] Update RB dependency --- Package.resolved | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.resolved b/Package.resolved index 9f7b99c..d34bb27 100644 --- a/Package.resolved +++ b/Package.resolved @@ -7,7 +7,7 @@ "location" : "https://github.com/OpenSwiftUIProject/DarwinPrivateFrameworks.git", "state" : { "branch" : "main", - "revision" : "ea49b004ae2b6f4b85fbaeae814d194f01e70a81" + "revision" : "b2642fdcc1ec7db833900421e479729305c939f8" } }, {