mirror of
https://github.com/rive-app/rive-ios.git
synced 2026-01-18 17:11:28 +01:00
rive-ios additions
This commit is contained in:
14
.github/workflows/release.yml
vendored
14
.github/workflows/release.yml
vendored
@@ -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
|
||||
|
||||
26
.github/workflows/tests.yml
vendored
26
.github/workflows/tests.yml
vendored
@@ -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
1
.rive_renderer
Normal file
@@ -0,0 +1 @@
|
||||
1b5319960e3fe85e06535ce447c50665ed1ee764
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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
|
||||
*/
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user