We prefer to build up a tiny compact engine at memory rather than compatibility,
this engine is not considerd for end-users but designed for middle-level framework
and some low-level users.
Thus, we won't consider 64bits data size,
use explicit 32 bits data until coming next upgrade...
Change-Id: I0704d5f1e0eb909cccc10922bc5972e115fbbcc0
Canvas(RenderMethod*);
virtual ~Canvas();
- Result reserve(size_t n) noexcept;
+ Result reserve(uint32_t n) noexcept;
virtual Result push(std::unique_ptr<Paint> paint) noexcept;
virtual Result clear() noexcept;
virtual Result update() noexcept;
//Shape
Result appendRect(float x, float y, float w, float h, float cornerRadius) noexcept;
Result appendCircle(float cx, float cy, float radiusW, float radiusH) noexcept;
- Result appendPath(const PathCommand* cmds, size_t cmdCnt, const Point* pts, size_t ptsCnt) noexcept;
+ Result appendPath(const PathCommand* cmds, uint32_t cmdCnt, const Point* pts, uint32_t ptsCnt) noexcept;
//Stroke
Result stroke(float width) noexcept;
Result stroke(uint8_t r, uint8_t g, uint8_t b, uint8_t a) noexcept;
- Result stroke(const float* dashPattern, size_t cnt) noexcept;
+ Result stroke(const float* dashPattern, uint32_t cnt) noexcept;
Result stroke(StrokeCap cap) noexcept;
Result stroke(StrokeJoin join) noexcept;
Result translate(float x, float y) noexcept override;
//Getters
- size_t pathCommands(const PathCommand** cmds) const noexcept;
- size_t pathCoords(const Point** pts) const noexcept;
+ uint32_t pathCommands(const PathCommand** cmds) const noexcept;
+ uint32_t pathCoords(const Point** pts) const noexcept;
Result fill(uint8_t* r, uint8_t* g, uint8_t* b, uint8_t* a) const noexcept;
Result bounds(float* x, float* y, float* w, float* h) const noexcept override;
float strokeWidth() const noexcept;
Result strokeColor(uint8_t* r, uint8_t* g, uint8_t* b, uint8_t* a) const noexcept;
- size_t strokeDash(const float** dashPattern) const noexcept;
+ uint32_t strokeDash(const float** dashPattern) const noexcept;
StrokeCap strokeCap() const noexcept;
StrokeJoin strokeJoin() const noexcept;
~Scene();
Result push(std::unique_ptr<Paint> shape) noexcept;
- Result reserve(size_t size) noexcept;
+ Result reserve(uint32_t size) noexcept;
Result rotate(float degree) noexcept override;
Result scale(float factor) noexcept override;
public:
~SwCanvas();
- Result target(uint32_t* buffer, size_t stride, size_t w, size_t h) noexcept;
+ Result target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t h) noexcept;
Result sync() noexcept override;
static std::unique_ptr<SwCanvas> gen() noexcept;
//TODO: Gl Specific methods. Need gl backend configuration methods as well.
- Result target(uint32_t* buffer, size_t stride, size_t w, size_t h) noexcept;
+ Result target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t h) noexcept;
Result sync() noexcept override;
static std::unique_ptr<GlCanvas> gen() noexcept;
#define _TVG_GL_GPU_BUFFER_H_
#include <stdlib.h>
-#include <GLES2/gl2.h>\r
+#include <GLES2/gl2.h>
class GlGpuBuffer
{
GlGpuBuffer();
~GlGpuBuffer();
- void updateBufferData(Target target, size_t size, void* data);
+ void updateBufferData(Target target, uint32_t size, void* data);
private:
uint32_t mGlBufferId = 0;
}
-size_t GlRenderer::unref()
+uint32_t GlRenderer::unref()
{
return RenderInitializer::unref(renderInit);
}
-size_t GlRenderer::ref()
+uint32_t GlRenderer::ref()
{
return RenderInitializer::ref(renderInit);
}
void* prepare(const Shape& shape, void* data, const RenderTransform* transform, RenderUpdateFlag flags) override;
bool dispose(const Shape& shape, void *data) override;
bool render(const Shape& shape, void *data) override;
- bool target(uint32_t* buffer, size_t stride, size_t w, size_t h)
+ bool target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t h)
{
return 0;
};
bool clear() override;
- size_t ref() override;
- size_t unref() override;
+ uint32_t ref() override;
+ uint32_t unref() override;
static GlRenderer* inst();
static int init();
Point ptStart;
Point ptCur;
float* pattern;
- size_t cnt;
+ uint32_t cnt;
bool curOpGap;
};
return true;
}
-bool SwRenderer::target(uint32_t* buffer, size_t stride, size_t w, size_t h)
+bool SwRenderer::target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t h)
{
if (!buffer || stride == 0 || w == 0 || h == 0) return false;
}
-size_t SwRenderer::unref()
+uint32_t SwRenderer::unref()
{
return RenderInitializer::unref(renderInit);
}
-size_t SwRenderer::ref()
+uint32_t SwRenderer::ref()
{
return RenderInitializer::ref(renderInit);
}
void* prepare(const Shape& shape, void* data, const RenderTransform* transform, RenderUpdateFlag flags) override;
bool dispose(const Shape& shape, void *data) override;
bool render(const Shape& shape, void *data) override;
- bool target(uint32_t* buffer, size_t stride, size_t w, size_t h);
+ bool target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t h);
bool clear() override;
- size_t ref() override;
- size_t unref() override;
+ uint32_t ref() override;
+ uint32_t unref() override;
static SwRenderer* inst();
static int init();
}
-Result Canvas::reserve(size_t n) noexcept
+Result Canvas::reserve(uint32_t n) noexcept
{
auto impl = pImpl.get();
if (!impl) return Result::MemoryCorruption;
}
-Result GlCanvas::target(uint32_t* buffer, size_t stride, size_t w, size_t h) noexcept
+Result GlCanvas::target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t h) noexcept
{
auto renderer = dynamic_cast<GlRenderer*>(Canvas::pImpl.get()->renderer);
if (!renderer) return Result::MemoryCorruption;
{
//TODO: Union for multiple types
uint32_t* buffer;
- size_t stride;
- size_t w, h;
+ uint32_t stride;
+ uint32_t w, h;
};
enum RenderUpdateFlag {None = 0, Path = 1, Fill = 2, Stroke = 4, Transform = 8, All = 16};
virtual bool dispose(const Shape& shape, void *data) = 0;
virtual bool render(const Shape& shape, void *data) = 0;
virtual bool clear() = 0;
- virtual size_t ref() = 0;
- virtual size_t unref() = 0;
+ virtual uint32_t ref() = 0;
+ virtual uint32_t unref() = 0;
};
struct RenderInitializer
{
RenderMethod* pInst = nullptr;
- size_t refCnt = 0;
+ uint32_t refCnt = 0;
bool initialized = false;
static int init(RenderInitializer& renderInit, RenderMethod* engine)
return 0;
}
- static size_t unref(RenderInitializer& renderInit)
+ static uint32_t unref(RenderInitializer& renderInit)
{
assert(renderInit.refCnt > 0);
--renderInit.refCnt;
return renderInit.pInst;
}
- static size_t ref(RenderInitializer& renderInit)
+ static uint32_t ref(RenderInitializer& renderInit)
{
return ++renderInit.refCnt;
}
}
-Result Scene::reserve(size_t size) noexcept
+Result Scene::reserve(uint32_t size) noexcept
{
auto impl = pImpl.get();
if (!impl) return Result::MemoryCorruption;
{
vector<Paint*> paints;
RenderTransform *transform = nullptr;
- size_t flag = RenderUpdateFlag::None;
+ uint32_t flag = RenderUpdateFlag::None;
~Impl()
{
return true;
}
- bool updateInternal(RenderMethod &renderer, const RenderTransform* transform, size_t flag)
+ bool updateInternal(RenderMethod &renderer, const RenderTransform* transform, uint32_t flag)
{
for(auto paint: paints) {
if (auto scene = dynamic_cast<Scene*>(paint)) {
return true;
}
- bool update(RenderMethod &renderer, const RenderTransform* pTransform = nullptr, size_t pFlag = 0)
+ bool update(RenderMethod &renderer, const RenderTransform* pTransform = nullptr, uint32_t pFlag = 0)
{
if (flag & RenderUpdateFlag::Transform) {
if (!transform) return false;
}
-size_t Shape::pathCommands(const PathCommand** cmds) const noexcept
+uint32_t Shape::pathCommands(const PathCommand** cmds) const noexcept
{
if (!cmds) return 0;
}
-size_t Shape::pathCoords(const Point** pts) const noexcept
+uint32_t Shape::pathCoords(const Point** pts) const noexcept
{
if (!pts) return 0;
}
-Result Shape::appendPath(const PathCommand *cmds, size_t cmdCnt, const Point* pts, size_t ptsCnt) noexcept
+Result Shape::appendPath(const PathCommand *cmds, uint32_t cmdCnt, const Point* pts, uint32_t ptsCnt) noexcept
{
if (cmdCnt < 0 || ptsCnt < 0 || !pts || !ptsCnt) return Result::InvalidArguments;
}
-Result Shape::stroke(const float* dashPattern, size_t cnt) noexcept
+Result Shape::stroke(const float* dashPattern, uint32_t cnt) noexcept
{
if (cnt < 2 || !dashPattern) return Result::InvalidArguments;
}
-size_t Shape::strokeDash(const float** dashPattern) const noexcept
+uint32_t Shape::strokeDash(const float** dashPattern) const noexcept
{
auto impl = pImpl.get();
assert(impl);
float width = 0;
uint8_t color[4] = {0, 0, 0, 0};
float* dashPattern = nullptr;
- size_t dashCnt = 0;
+ uint32_t dashCnt = 0;
StrokeCap cap = StrokeCap::Square;
StrokeJoin join = StrokeJoin::Bevel;
ShapePath *path = nullptr;
RenderTransform *transform = nullptr;
uint8_t color[4] = {0, 0, 0, 0}; //r, g, b, a
- size_t flag = RenderUpdateFlag::None;
+ uint32_t flag = RenderUpdateFlag::None;
void *edata = nullptr; //engine data
return renderer.render(shape, edata);
}
- bool update(Shape& shape, RenderMethod& renderer, const RenderTransform* pTransform = nullptr, size_t pFlag = 0)
+ bool update(Shape& shape, RenderMethod& renderer, const RenderTransform* pTransform = nullptr, uint32_t pFlag = 0)
{
if (flag & RenderUpdateFlag::Transform) {
if (!transform) return false;
return true;
}
- bool strokeDash(const float* pattern, size_t cnt)
+ bool strokeDash(const float* pattern, uint32_t cnt)
{
assert(pattern);
if (!stroke->dashPattern) stroke->dashPattern = static_cast<float*>(malloc(sizeof(float) * cnt));
assert(stroke->dashPattern);
- for (size_t i = 0; i < cnt; ++i)
+ for (uint32_t i = 0; i < cnt; ++i)
stroke->dashPattern[i] = pattern[i];
stroke->dashCnt = cnt;
struct ShapePath
{
PathCommand* cmds = nullptr;
- size_t cmdCnt = 0;
- size_t reservedCmdCnt = 0;
+ uint32_t cmdCnt = 0;
+ uint32_t reservedCmdCnt = 0;
Point *pts = nullptr;
- size_t ptsCnt = 0;
- size_t reservedPtsCnt = 0;
+ uint32_t ptsCnt = 0;
+ uint32_t reservedPtsCnt = 0;
~ShapePath()
if (pts) free(pts);
}
- void reserveCmd(size_t cmdCnt)
+ void reserveCmd(uint32_t cmdCnt)
{
if (cmdCnt <= reservedCmdCnt) return;
reservedCmdCnt = cmdCnt;
assert(cmds);
}
- void reservePts(size_t ptsCnt)
+ void reservePts(uint32_t ptsCnt)
{
if (ptsCnt <= reservedPtsCnt) return;
reservedPtsCnt = ptsCnt;
assert(pts);
}
- void grow(size_t cmdCnt, size_t ptsCnt)
+ void grow(uint32_t cmdCnt, uint32_t ptsCnt)
{
reserveCmd(this->cmdCnt + cmdCnt);
reservePts(this->ptsCnt + ptsCnt);
ptsCnt = 0;
}
- void append(const PathCommand* cmds, size_t cmdCnt, const Point* pts, size_t ptsCnt)
+ void append(const PathCommand* cmds, uint32_t cmdCnt, const Point* pts, uint32_t ptsCnt)
{
memcpy(this->cmds + this->cmdCnt, cmds, sizeof(PathCommand) * cmdCnt);
memcpy(this->pts + this->ptsCnt, pts, sizeof(Point) * ptsCnt);
Point min = { pts[0].x, pts[0].y };
Point max = { pts[0].x, pts[0].y };
- for(size_t i = 1; i < ptsCnt; ++i) {
+ for(uint32_t i = 1; i < ptsCnt; ++i) {
if (pts[i].x < min.x) min.x = pts[i].x;
if (pts[i].y < min.y) min.y = pts[i].y;
if (pts[i].x > max.x) max.x = pts[i].x;
{
}
-Result SwCanvas::target(uint32_t* buffer, size_t stride, size_t w, size_t h) noexcept
+Result SwCanvas::target(uint32_t* buffer, uint32_t stride, uint32_t w, uint32_t h) noexcept
{
auto renderer = dynamic_cast<SwRenderer*>(Canvas::pImpl.get()->renderer);
if (!renderer) return Result::MemoryCorruption;