mirror of
https://github.com/rive-app/rive-cpp.git
synced 2026-01-18 21:21:17 +01:00
Fix: tess renderer & nuke old viewer (#9927) c2ec689eb6
Co-authored-by: Luigi Rosso <luigi-rosso@users.noreply.github.com>
This commit is contained in:
@@ -1,71 +0,0 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
source ../../../dependencies/macosx/config_directories.sh
|
||||
|
||||
if [[ ! -f "$DEPENDENCIES/bin/premake5" ]]; then
|
||||
pushd $DEPENDENCIES_SCRIPTS
|
||||
./get_premake5.sh
|
||||
popd
|
||||
fi
|
||||
|
||||
if [[ ! -d "$DEPENDENCIES/sokol" ]]; then
|
||||
pushd $DEPENDENCIES_SCRIPTS
|
||||
./get_sokol.sh
|
||||
popd
|
||||
fi
|
||||
|
||||
if [[ ! -d "$DEPENDENCIES/earcut.hpp" ]]; then
|
||||
pushd $DEPENDENCIES_SCRIPTS
|
||||
./get_earcut.sh
|
||||
popd
|
||||
fi
|
||||
|
||||
if [[ ! -d "$DEPENDENCIES/libtess2" ]]; then
|
||||
pushd $DEPENDENCIES_SCRIPTS
|
||||
./get_libtess2.sh
|
||||
popd
|
||||
fi
|
||||
|
||||
export PREMAKE=$DEPENDENCIES/bin/premake5
|
||||
pushd ..
|
||||
|
||||
CONFIG=debug
|
||||
GRAPHICS=gl
|
||||
TEST=false
|
||||
for var in "$@"; do
|
||||
if [[ $var = "release" ]]; then
|
||||
CONFIG=release
|
||||
fi
|
||||
if [[ $var = "gl" ]]; then
|
||||
GRAPHICS=gl
|
||||
fi
|
||||
if [[ $var = "d3d" ]]; then
|
||||
GRAPHICS=d3d
|
||||
fi
|
||||
if [[ $var = "metal" ]]; then
|
||||
GRAPHICS=metal
|
||||
fi
|
||||
if [[ $var = "test" ]]; then
|
||||
TEST=true
|
||||
fi
|
||||
done
|
||||
|
||||
$PREMAKE --scripts=../../build --file=./premake5_tess.lua gmake2 --graphics=$GRAPHICS --with_rive_tools
|
||||
|
||||
for var in "$@"; do
|
||||
if [[ $var = "clean" ]]; then
|
||||
make clean
|
||||
make config=release clean
|
||||
fi
|
||||
done
|
||||
|
||||
# compile shaders
|
||||
$DEPENDENCIES/bin/sokol-shdc --input ../src/sokol/shader.glsl --output ../src/sokol/generated/shader.h --slang glsl330:hlsl5:metal_macos:metal_ios:metal_sim:glsl300es:glsl100
|
||||
|
||||
make config=$CONFIG -j$(($(sysctl -n hw.physicalcpu) + 1))
|
||||
|
||||
if [[ $TEST = "true" ]]; then
|
||||
macosx/bin/$CONFIG/rive_tess_tests
|
||||
fi
|
||||
popd
|
||||
@@ -1,112 +0,0 @@
|
||||
workspace('rive')
|
||||
configurations({ 'debug', 'release' })
|
||||
|
||||
dependencies = os.getenv('DEPENDENCIES')
|
||||
|
||||
rive = '../../'
|
||||
|
||||
dofile(path.join(path.getabsolute(rive) .. '/build', 'premake5.lua'))
|
||||
|
||||
project('rive_tess_renderer')
|
||||
do
|
||||
kind('StaticLib')
|
||||
language('C++')
|
||||
cppdialect('C++11')
|
||||
toolset('clang')
|
||||
targetdir('%{cfg.system}/bin/%{cfg.buildcfg}')
|
||||
objdir('%{cfg.system}/obj/%{cfg.buildcfg}')
|
||||
includedirs({
|
||||
'../include',
|
||||
rive .. '/include',
|
||||
dependencies .. '/sokol',
|
||||
dependencies .. '/earcut.hpp/include/mapbox',
|
||||
dependencies .. '/libtess2/Include',
|
||||
yoga,
|
||||
})
|
||||
files({ '../src/**.cpp', dependencies .. '/libtess2/Source/**.c' })
|
||||
buildoptions({ '-Wall', '-fno-exceptions', '-fno-rtti', '-Werror=format' })
|
||||
|
||||
filter('configurations:debug')
|
||||
do
|
||||
buildoptions({ '-g' })
|
||||
defines({ 'DEBUG' })
|
||||
symbols('On')
|
||||
end
|
||||
|
||||
filter('configurations:release')
|
||||
do
|
||||
buildoptions({ '-flto=full' })
|
||||
defines({ 'RELEASE', 'NDEBUG' })
|
||||
optimize('On')
|
||||
end
|
||||
|
||||
filter({ 'options:graphics=gl' })
|
||||
do
|
||||
defines({ 'SOKOL_GLCORE33' })
|
||||
end
|
||||
|
||||
filter({ 'options:graphics=metal' })
|
||||
do
|
||||
defines({ 'SOKOL_METAL' })
|
||||
end
|
||||
|
||||
filter({ 'options:graphics=d3d' })
|
||||
do
|
||||
defines({ 'SOKOL_D3D11' })
|
||||
end
|
||||
|
||||
newoption({
|
||||
trigger = 'graphics',
|
||||
value = 'gl',
|
||||
description = 'The graphics api to use.',
|
||||
allowed = { { 'gl' }, { 'metal' }, { 'd3d' } },
|
||||
})
|
||||
end
|
||||
|
||||
project('rive_tess_tests')
|
||||
do
|
||||
dependson('rive_tess_renderer')
|
||||
dependson('rive')
|
||||
kind('ConsoleApp')
|
||||
language('C++')
|
||||
cppdialect('C++17')
|
||||
toolset('clang')
|
||||
targetdir('%{cfg.system}/bin/%{cfg.buildcfg}')
|
||||
objdir('%{cfg.system}/obj/%{cfg.buildcfg}')
|
||||
includedirs({
|
||||
rive .. 'tests/include', -- for catch.hpp and for things rive_file_reader.hpp
|
||||
'../include',
|
||||
rive .. '/include',
|
||||
dependencies .. '/sokol',
|
||||
dependencies .. '/earcut.hpp/include/mapbox',
|
||||
yoga,
|
||||
})
|
||||
files({ '../test/**.cpp', rive .. 'utils/no_op_factory.cpp' })
|
||||
links({ 'rive_tess_renderer', 'rive', 'rive_harfbuzz', 'rive_sheenbidi', 'rive_yoga' })
|
||||
buildoptions({ '-Wall', '-fno-exceptions', '-fno-rtti', '-Werror=format' })
|
||||
defines({ 'TESTING', 'YOGA_EXPORT=' })
|
||||
|
||||
filter({ 'system:macosx' })
|
||||
do
|
||||
links({
|
||||
'Cocoa.framework',
|
||||
'IOKit.framework',
|
||||
'CoreVideo.framework',
|
||||
'OpenGL.framework',
|
||||
})
|
||||
end
|
||||
|
||||
filter('configurations:debug')
|
||||
do
|
||||
buildoptions({ '-g' })
|
||||
defines({ 'DEBUG' })
|
||||
symbols('On')
|
||||
end
|
||||
|
||||
filter('configurations:release')
|
||||
do
|
||||
buildoptions({ '-flto=full' })
|
||||
defines({ 'RELEASE', 'NDEBUG' })
|
||||
optimize('On')
|
||||
end
|
||||
end
|
||||
@@ -93,8 +93,12 @@ public:
|
||||
float near,
|
||||
float far) override;
|
||||
void drawPath(RenderPath* path, RenderPaint* paint) override;
|
||||
void drawImage(const RenderImage*, BlendMode, float opacity) override;
|
||||
void drawImage(const RenderImage*,
|
||||
ImageSampler,
|
||||
BlendMode,
|
||||
float opacity) override;
|
||||
void drawImageMesh(const RenderImage*,
|
||||
ImageSampler,
|
||||
rcp<RenderBuffer> vertices_f32,
|
||||
rcp<RenderBuffer> uvCoords_f32,
|
||||
rcp<RenderBuffer> indices_u16,
|
||||
|
||||
@@ -44,8 +44,12 @@ public:
|
||||
void transform(const Mat2D& transform) override;
|
||||
const Mat2D& transform() { return m_Stack.back().transform; }
|
||||
void clipPath(RenderPath* path) override;
|
||||
void drawImage(const RenderImage*, BlendMode, float opacity) override;
|
||||
void drawImage(const RenderImage*,
|
||||
ImageSampler,
|
||||
BlendMode,
|
||||
float opacity) override;
|
||||
void drawImageMesh(const RenderImage*,
|
||||
ImageSampler,
|
||||
rcp<RenderBuffer> vertices_f32,
|
||||
rcp<RenderBuffer> uvCoords_f32,
|
||||
rcp<RenderBuffer> indices_u16,
|
||||
|
||||
67
tess/premake5_tess.lua
Normal file
67
tess/premake5_tess.lua
Normal file
@@ -0,0 +1,67 @@
|
||||
dofile('rive_build_config.lua')
|
||||
|
||||
local dependency = require('dependency')
|
||||
sokol = dependency.github('luigi-rosso/sokol', 'support_transparent_framebuffer')
|
||||
libtess2 = dependency.github('memononen/libtess2', 'master')
|
||||
earcut = dependency.github('mapbox/earcut.hpp', 'master')
|
||||
|
||||
rive = '../'
|
||||
|
||||
dofile(path.join(path.getabsolute(rive), 'premake5_v2.lua'))
|
||||
|
||||
project('rive_tess_renderer')
|
||||
do
|
||||
kind('StaticLib')
|
||||
includedirs({
|
||||
'include',
|
||||
rive .. '/include',
|
||||
sokol,
|
||||
earcut .. '/include/mapbox',
|
||||
libtess2 .. '/Include',
|
||||
})
|
||||
files({ 'src/**.cpp', libtess2 .. '/Source/**.c' })
|
||||
buildoptions({ '-Wall', '-fno-exceptions', '-fno-rtti', '-Werror=format' })
|
||||
|
||||
filter({ 'system:emscripten' })
|
||||
do
|
||||
defines({ 'SOKOL_GLCORE33' })
|
||||
end
|
||||
|
||||
filter({ 'system:macosx' })
|
||||
do
|
||||
defines({ 'SOKOL_METAL' })
|
||||
end
|
||||
|
||||
filter({ 'system:windows' })
|
||||
do
|
||||
defines({ 'SOKOL_D3D11' })
|
||||
end
|
||||
end
|
||||
|
||||
project('rive_tess_tests')
|
||||
do
|
||||
dependson('rive_tess_renderer')
|
||||
dependson('rive')
|
||||
kind('ConsoleApp')
|
||||
includedirs({
|
||||
rive .. 'tests/include', -- for catch.hpp and for things rive_file_reader.hpp
|
||||
'include',
|
||||
rive .. '/include',
|
||||
sokol,
|
||||
earcut .. '/include/mapbox',
|
||||
libtess2 .. '/Include',
|
||||
})
|
||||
files({ 'test/**.cpp', rive .. 'utils/no_op_factory.cpp' })
|
||||
links({ 'rive_tess_renderer', 'rive', 'rive_harfbuzz', 'rive_sheenbidi', 'rive_yoga' })
|
||||
-- defines({ 'TESTING', 'YOGA_EXPORT=' })
|
||||
|
||||
filter({ 'system:macosx' })
|
||||
do
|
||||
links({
|
||||
'Cocoa.framework',
|
||||
'IOKit.framework',
|
||||
'CoreVideo.framework',
|
||||
'OpenGL.framework',
|
||||
})
|
||||
end
|
||||
end
|
||||
@@ -605,6 +605,7 @@ void SokolTessRenderer::orthographicProjection(float left,
|
||||
}
|
||||
|
||||
void SokolTessRenderer::drawImage(const RenderImage* image,
|
||||
ImageSampler,
|
||||
BlendMode,
|
||||
float opacity)
|
||||
{
|
||||
@@ -631,6 +632,7 @@ void SokolTessRenderer::drawImage(const RenderImage* image,
|
||||
}
|
||||
|
||||
void SokolTessRenderer::drawImageMesh(const RenderImage* renderImage,
|
||||
ImageSampler,
|
||||
rcp<RenderBuffer> vertices_f32,
|
||||
rcp<RenderBuffer> uvCoords_f32,
|
||||
rcp<RenderBuffer> indices_u16,
|
||||
|
||||
@@ -36,8 +36,13 @@ void TessRenderer::clipPath(RenderPath* path)
|
||||
m_IsClippingDirty = true;
|
||||
}
|
||||
|
||||
void TessRenderer::drawImage(const RenderImage*, BlendMode, float opacity) {}
|
||||
void TessRenderer::drawImage(const RenderImage*,
|
||||
ImageSampler,
|
||||
BlendMode,
|
||||
float opacity)
|
||||
{}
|
||||
void TessRenderer::drawImageMesh(const RenderImage*,
|
||||
ImageSampler,
|
||||
rcp<RenderBuffer> vertices_f32,
|
||||
rcp<RenderBuffer> uvCoords_f32,
|
||||
rcp<RenderBuffer> indices_u16,
|
||||
|
||||
@@ -22,7 +22,7 @@ protected:
|
||||
|
||||
TEST_CASE("simple triangle path triangulates as expected", "[file]")
|
||||
{
|
||||
auto file = ReadRiveFile("../test/assets/triangle.riv");
|
||||
auto file = ReadRiveFile("test/assets/triangle.riv");
|
||||
auto artboard = file->artboard();
|
||||
artboard->advance(0.0f);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user