rive-ios additions

This commit is contained in:
Chris Dalton
2023-09-08 10:47:18 -06:00
parent 9623029b0c
commit 1f1d22a621
7 changed files with 99 additions and 56 deletions

View File

@@ -103,6 +103,20 @@ jobs:
with:
submodules: true
token: ${{ secrets.PAT_GITHUB }}
- name: Get Renderer ref
id: renderer-ref
run: echo "REF_VALUE=$(cat .rive_renderer)" >> $GITHUB_OUTPUT
- name: Checkout Rive Renderer Repo
uses: actions/checkout@v3
with:
submodules: true
repository: ${{ secrets.RIVE_RENDERER_REPO }}
token: ${{ secrets.PAT_GITHUB }}
path: ./submodules/pls
ref: ${{ steps.renderer-ref.outputs.REF_VALUE }}
- name: Installing pre-requisites
run: |
set -x

View File

@@ -58,6 +58,7 @@ jobs:
with:
token: ${{ secrets.PAT_GITHUB }}
submodules: true
- name: Installing pre-requisites
run: |
set -x
@@ -70,7 +71,28 @@ jobs:
mkdir bin
cp premake5 bin/premake5
sudo mv premake5 /usr/local/bin
- name: Build everything (using the cache, we should make an archive of course)
- name: Build everything without Rive Renderer (using the cache, we should make an archive of course)
run: ./scripts/build.sh ios_sim debug
- name: Testing iOS app
- name: Testing iOS app without Rive Renderer
run: ./scripts/test.sh
- name: Get Renderer ref
id: renderer-ref
run: echo "REF_VALUE=$(cat .rive_renderer)" >> $GITHUB_OUTPUT
- name: Checkout Rive Renderer Repo
uses: actions/checkout@v3
with:
submodules: true
repository: ${{ secrets.RIVE_RENDERER_REPO }}
token: ${{ secrets.PAT_GITHUB }}
path: ./submodules/pls
ref: ${{ steps.renderer-ref.outputs.REF_VALUE }}
- name: Build everything with Rive Renderer
run: ./scripts/build.sh ios_sim debug
- name: Testing iOS app with Rive Renderer
run: ./scripts/test.sh

1
.rive_renderer Normal file
View File

@@ -0,0 +1 @@
1b5319960e3fe85e06535ce447c50665ed1ee764

View File

@@ -150,8 +150,9 @@
- (BOOL)import:(UInt8*)bytes byteLength:(UInt64)length error:(NSError**)error
{
rive::ImportResult result;
RenderContext* defaultContext = [[RenderContextManager shared] getDefaultContext];
rive::Factory* factory = [defaultContext factory];
RenderContext* renderContext = [[RenderContextManager shared] getDefaultContext];
assert(renderContext);
rive::Factory* factory = [renderContext factory];
auto file = rive::File::import(rive::Span(bytes, length), factory, &result);
if (result == rive::ImportResult::success)
{

View File

@@ -15,7 +15,7 @@
@implementation RiveRendererView
{
RenderContext* renderContext;
RenderContext* _renderContext;
rive::Renderer* _renderer;
}
@@ -23,25 +23,27 @@
{
self = [super initWithCoder:decoder];
renderContext = [[RenderContextManager shared] getDefaultContext];
self.device = [renderContext metalDevice];
_renderContext = [[RenderContextManager shared] getDefaultContext];
assert(_renderContext);
self.device = [_renderContext metalDevice];
[self setDepthStencilPixelFormat:renderContext.depthStencilPixelFormat];
[self setDepthStencilPixelFormat:_renderContext.depthStencilPixelFormat];
[self setColorPixelFormat:MTLPixelFormatBGRA8Unorm];
[self setFramebufferOnly:renderContext.framebufferOnly];
[self setFramebufferOnly:_renderContext.framebufferOnly];
[self setSampleCount:1];
return self;
}
- (instancetype)initWithFrame:(CGRect)frameRect
{
renderContext = [[RenderContextManager shared] getDefaultContext];
_renderContext = [[RenderContextManager shared] getDefaultContext];
assert(_renderContext);
auto value = [super initWithFrame:frameRect device:renderContext.metalDevice];
auto value = [super initWithFrame:frameRect device:_renderContext.metalDevice];
[self setDepthStencilPixelFormat:renderContext.depthStencilPixelFormat];
[self setDepthStencilPixelFormat:_renderContext.depthStencilPixelFormat];
[self setColorPixelFormat:MTLPixelFormatBGRA8Unorm];
[self setFramebufferOnly:renderContext.framebufferOnly];
[self setFramebufferOnly:_renderContext.framebufferOnly];
[self setSampleCount:1];
return value;
}
@@ -90,14 +92,14 @@
return;
}
_renderer = [renderContext beginFrame:self];
_renderer = [_renderContext beginFrame:self];
_renderer->save();
[self drawRive:rect size:self.drawableSize];
_renderer->restore();
[renderContext endFrame];
[_renderContext endFrame];
_renderer = nullptr;
id<MTLCommandBuffer> commandBuffer = [renderContext.metalQueue commandBuffer];
id<MTLCommandBuffer> commandBuffer = [_renderContext.metalQueue commandBuffer];
[commandBuffer presentDrawable:[self currentDrawable]];
[commandBuffer commit];
bool paused = [self isPaused];

View File

@@ -57,6 +57,21 @@
XCTAssertEqual(artboard.animationCount, 1);
}
/*
* Test loading format Flux file with Rive Renderer.
*/
- (void)testLoadFluxWithPLS
{
if ([[RenderContextManager shared] getRiveRendererContext] != nil)
{
[[RenderContextManager shared] setDefaultRenderer:RendererType::riveRenderer];
}
NSError* error = nil;
RiveFile* file = [Util loadTestFile:@"flux_capacitor" error:&error];
RiveArtboard* artboard = [file artboard:&error];
XCTAssertEqual(artboard.animationCount, 1);
}
/*
* Test loading format Buggy file
*/

View File

@@ -13,7 +13,13 @@ else
export RIVE_RUNTIME_DIR="$DEV_SCRIPT_DIR/../../runtime"
fi
RIVE_PLS_DIR=$RIVE_RUNTIME_DIR/../pls
if [ -d "$RIVE_RUNTIME_DIR/../pls" ]; then
# pls exists where we expected to find it
export RIVE_PLS_DIR="$RIVE_RUNTIME_DIR/../pls"
else
# pls is not present -- build the null library instead
export RIVE_PLS_DIR="$DEV_SCRIPT_DIR/../Source/Renderer/NullPLS"
fi
make_dependency_directories() {
rm -fr $DEV_SCRIPT_DIR/../dependencies
@@ -75,57 +81,39 @@ build_skia_renderer_macosx() {
}
build_pls_renderer() {
if [ -d "$RIVE_PLS_DIR" ]; then
pushd $RIVE_PLS_DIR/out
premake5 --scripts=$RIVE_RUNTIME_DIR/build --file=premake5_pls_renderer.lua --no-rive-decoders --os=ios gmake2
make config=$1 clean
make config=$1 -j12 rive_pls_renderer
popd
pushd $RIVE_PLS_DIR/out
premake5 --scripts=$RIVE_RUNTIME_DIR/build --file=premake5_pls_renderer.lua --no-rive-decoders --os=ios gmake2
make config=$1 clean
make config=$1 -j12 rive_pls_renderer
popd
cp -r $RIVE_PLS_DIR/out/iphoneos_$1/librive_pls_renderer.a $DEV_SCRIPT_DIR/../dependencies/$1/librive_pls_renderer.a
cp -r $RIVE_PLS_DIR/out/iphoneos_$1/librive_pls_renderer.a $DEV_SCRIPT_DIR/../dependencies/$1/librive_pls_renderer.a
cp -r $RIVE_PLS_DIR/include $DEV_SCRIPT_DIR/../dependencies/includes/pls
else
# TODO: this fixes the compile without PLS, but linking will still fail because it won't
# find librive_pls_renderer.a.
cp -r $DEV_SCRIPT_DIR/../Source/Renderer/NullPLS/include $DEV_SCRIPT_DIR/../dependencies/includes/pls
fi
cp -r $RIVE_PLS_DIR/include $DEV_SCRIPT_DIR/../dependencies/includes/pls
}
build_pls_renderer_sim() {
if [ -d "$RIVE_PLS_DIR" ]; then
pushd $RIVE_PLS_DIR/out
premake5 --scripts=$RIVE_RUNTIME_DIR/build --file=premake5_pls_renderer.lua --no-rive-decoders --os=ios --variant=simulator gmake2
make config=$1 clean
make config=$1 -j12 rive_pls_renderer
popd
pushd $RIVE_PLS_DIR/out
premake5 --scripts=$RIVE_RUNTIME_DIR/build --file=premake5_pls_renderer.lua --no-rive-decoders --os=ios --variant=simulator gmake2
make config=$1 clean
make config=$1 -j12 rive_pls_renderer
popd
cp -r $RIVE_PLS_DIR/out/iphonesimulator_$1/librive_pls_renderer.a $DEV_SCRIPT_DIR/../dependencies/$1/librive_pls_renderer_sim.a
cp -r $RIVE_PLS_DIR/out/iphonesimulator_$1/librive_pls_renderer.a $DEV_SCRIPT_DIR/../dependencies/$1/librive_pls_renderer_sim.a
cp -r $RIVE_PLS_DIR/include $DEV_SCRIPT_DIR/../dependencies/includes/pls
else
# TODO: this fixes the compile without PLS, but linking will still fail because it won't
# find librive_pls_renderer_sim.a.
cp -r $DEV_SCRIPT_DIR/../Source/Renderer/NullPLS/include $DEV_SCRIPT_DIR/../dependencies/includes/pls
fi
cp -r $RIVE_PLS_DIR/include $DEV_SCRIPT_DIR/../dependencies/includes/pls
}
build_pls_renderer_macosx() {
if [ -d "$RIVE_PLS_DIR" ]; then
pushd $RIVE_PLS_DIR/out
premake5 --scripts=$RIVE_RUNTIME_DIR/build --file=premake5_pls_renderer.lua --no-rive-decoders --os=macosx gmake2
make config=$1 clean
make config=$1 -j12 rive_pls_renderer
popd
pushd $RIVE_PLS_DIR/out
premake5 --scripts=$RIVE_RUNTIME_DIR/build --file=premake5_pls_renderer.lua --no-rive-decoders --os=macosx gmake2
make config=$1 clean
make config=$1 -j12 rive_pls_renderer
popd
cp -r $RIVE_PLS_DIR/out/$1/librive_pls_renderer_macos.a $DEV_SCRIPT_DIR/../dependencies/$1/librive_pls_renderer.a
cp -r $RIVE_PLS_DIR/out/$1/librive_pls_renderer_macos.a $DEV_SCRIPT_DIR/../dependencies/$1/librive_pls_renderer.a
cp -r $RIVE_PLS_DIR/include $DEV_SCRIPT_DIR/../dependencies/includes/pls
else
# TODO: this fixes the compile without PLS, but linking will still fail because it won't
# find librive_pls_renderer_macosx.a.
cp -r $DEV_SCRIPT_DIR/../Source/Renderer/NullPLS/include $DEV_SCRIPT_DIR/../dependencies/includes/pls
fi
cp -r $RIVE_PLS_DIR/include $DEV_SCRIPT_DIR/../dependencies/includes/pls
}
finalize_skia() {