blob: 0b050c5eb5e51973cc2e9b73f6e1eac8b08f5993 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
//
//
#include "raster_builder.h"
#include "float.h"
//
// IDENTITY TRANSFORM
//
float const spn_transform_identity[8] = {
1.0f, // sx
0.0f, // shx
0.0f, // shy
1.0f, // sy
0.0f, // tx
0.0f, // ty
0.0f, // w0
0.0f, // w1
};
//
// DEFAULT CLIP
//
float const spn_clip_default[4] = {
-FLT_MAX, // lower left corner of bounding box
-FLT_MAX,
+FLT_MAX, // upper right corner of bounding box
+FLT_MAX,
};
//
//
//
spn_result
spn_raster_builder_retain(spn_raster_builder_t raster_builder)
{
raster_builder->refcount += 1;
return SPN_SUCCESS;
}
spn_result
spn_raster_builder_release(spn_raster_builder_t raster_builder)
{
SPN_ASSERT_STATE_ASSERT(SPN_RASTER_BUILDER_STATE_READY, raster_builder);
raster_builder->release(raster_builder->impl);
return SPN_SUCCESS;
}
//
//
//
spn_result
spn_raster_begin(spn_raster_builder_t raster_builder)
{
SPN_ASSERT_STATE_TRANSITION(SPN_RASTER_BUILDER_STATE_READY,
SPN_RASTER_BUILDER_STATE_BUILDING,
raster_builder);
return raster_builder->begin(raster_builder->impl);
}
spn_result
spn_raster_end(spn_raster_builder_t raster_builder, spn_raster_t * raster)
{
SPN_ASSERT_STATE_TRANSITION(SPN_RASTER_BUILDER_STATE_BUILDING,
SPN_RASTER_BUILDER_STATE_READY,
raster_builder);
return raster_builder->end(raster_builder->impl, raster);
}
//
//
//
spn_result
spn_raster_flush(spn_raster_builder_t raster_builder)
{
//
// it doesn't matter what the state is
//
return raster_builder->flush(raster_builder->impl);
}
//
//
//
spn_result
spn_raster_fill(spn_raster_builder_t raster_builder,
spn_path_t * paths,
spn_transform_weakref_t * transform_weakrefs,
float const (*transforms)[8],
spn_clip_weakref_t * clip_weakrefs,
float const (*clips)[4],
uint32_t count)
{
SPN_ASSERT_STATE_ASSERT(SPN_RASTER_BUILDER_STATE_BUILDING, raster_builder);
return raster_builder->fill(raster_builder->impl,
paths,
transform_weakrefs,
transforms,
clip_weakrefs,
clips,
count);
}
//
//
//