Fix: tess renderer & nuke old viewer (#9927) c2ec689eb6

Co-authored-by: Luigi Rosso <luigi-rosso@users.noreply.github.com>
This commit is contained in:
luigi-rosso
2025-06-07 01:12:12 +00:00
parent e5551407e6
commit 5a3977f5e1
34 changed files with 87 additions and 3172 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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,

View File

@@ -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
View 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

View File

@@ -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,

View File

@@ -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,

View File

@@ -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);