skia_inc_effects = include_directories('submodule/skia/include/effects')
skia_inc_dirs = [skia_inc, skia_inc_core, skia_inc_effects]
-skia_inc_gpu = include_directories('submodule/skia/include/gpu')
+if get_option('use_gl') == true
+ skia_inc_dirs += include_directories('submodule/skia/include/gpu')
+endif
skia_dir = meson.current_source_dir() + '/submodule/skia/out/static/'
skia_lib = cc.find_library('libskia', dirs : skia_dir, static: true, header_include_directories: skia_inc_dirs)
skia_dep = declare_dependency(
- include_directories: [skia_inc, skia_inc_core, skia_inc_effects],
+ include_directories: skia_inc_dirs,
dependencies: skia_lib,
)
-headers = [include_directories('inc'), include_directories('src'), rive_cpp_inc, skia_inc, skia_inc_core, skia_inc_effects]
+headers = [include_directories('inc'), include_directories('src'), rive_cpp_inc, skia_inc_dirs]
subdir('inc')
subdir('src')
#include "rive_tizen.hpp"
-#include <SkCanvas.h>
-#include <SkColorSpace.h>
-#include <SkSurface.h>
-#include <SkTypes.h>
-
-#include <SkCanvas.h>
-#include <SkColorSpace.h>
-#include <SkSurface.h>
-#include <SkTypes.h>
-
#include <skia_factory.hpp>
#include <skia_renderer.hpp>
#include <SkSurface.h>
#include <SkTypes.h>
+#ifdef USE_GL
+#define SK_GL
+#include <GLFW/glfw3.h>
+
+#include "GrBackendSurface.h"
+#include "GrDirectContext.h"
+#include "gl/GrGLInterface.h"
+#endif
+
#include <rive/node.hpp>
#include <rive/shapes/paint/color.hpp>
#include <rive/shapes/paint/solid_color.hpp>
static std::unique_ptr<rive::File> mFile;
static std::unique_ptr<rive::ArtboardInstance> mArtboardInstance;
+#ifdef USE_GL
+static sk_sp<GrDirectContext> mContext;
+#endif
+
RiveTizen::RiveTizen()
{
}
bool RiveTizen::createCanvas(unsigned char *buffer, unsigned int width, unsigned int height, unsigned int stride)
{
-
+#ifdef USE_GL
+ // Buffer is unused for gpu-based version
+ GrContextOptions options;
+ mContext = GrDirectContext::MakeGL(nullptr, options);
+
+ GrGLFramebufferInfo framebufferInfo;
+ framebufferInfo.fFBOID = 0;
+ framebufferInfo.fFormat = GL_RGBA8;
+ GrBackendRenderTarget backendRenderTarget(width, height, 0 /* sample count */, 0 /* stencil bits */, framebufferInfo);
+
+ mSkiaSurface = SkSurface::MakeFromBackendRenderTarget(mContext.get(), backendRenderTarget, kBottomLeft_GrSurfaceOrigin,
+ kRGBA_8888_SkColorType, nullptr, nullptr);
+#else
SkImageInfo info = SkImageInfo::MakeN32Premul(width, height);
mSkiaSurface = SkSurface::MakeRasterDirect(info, buffer, stride * 4);
+#endif
+
+ if (!mSkiaSurface)
+ {
+ #ifdef USE_GL
+ #define USE_GL_VALUE "true"
+ #else
+ #define USE_GL_VALUE "false"
+ #endif
+ LOGE("[Failed to create Skia surface][USE_GL = " USE_GL_VALUE "]");
+ return false;
+ }
+
mSkiaCanvas = mSkiaSurface->getCanvas();
mSkiaCanvas->clear(SK_ColorTRANSPARENT);
return true;
renderer.transform(viewTransform);
mArtboardInstance->draw(&renderer);
renderer.restore();
+
+#ifdef USE_GL
+ mContext->flush();
+#endif
+
return true;
}