Initial Grease Pencil 3.0 stage #106848
|
@ -225,6 +225,9 @@ void legacy_gpencil_to_grease_pencil(GreasePencil &grease_pencil, bGPdata &gpd);
|
|||
|
||||
} // namespace greasepencil
|
||||
|
||||
/**
|
||||
* A single point for a stroke that is currently being drawn.
|
||||
*/
|
||||
struct StrokePoint {
|
||||
float3 position;
|
||||
float radius;
|
||||
|
@ -232,16 +235,30 @@ struct StrokePoint {
|
|||
float4 color;
|
||||
};
|
||||
|
||||
/**
|
||||
* Stroke cache for a stroke that is currently being drawn.
|
||||
*/
|
||||
struct StrokeCache {
|
||||
Vector<StrokePoint> points = {};
|
||||
Vector<uint3> triangles = {};
|
||||
int mat = 0;
|
||||
|
||||
void clear()
|
||||
{
|
||||
this->points.clear_and_shrink();
|
||||
this->triangles.clear_and_shrink();
|
||||
filedescriptor marked this conversation as resolved
Outdated
|
||||
this->mat = 0;
|
||||
}
|
||||
};
|
||||
|
||||
class GreasePencilDrawingRuntime {
|
||||
public:
|
||||
/**
|
||||
* Triangle cache for all the strokes in the drawing.
|
||||
*/
|
||||
mutable SharedCache<Vector<uint3>> triangles_cache;
|
||||
|
||||
/**
|
||||
* Stroke cache for a stroke that is currently being drawn.
|
||||
*/
|
||||
Vector<StrokePoint> stroke_cache = {};
|
||||
Vector<uint3> stroke_triangle_cache = {};
|
||||
int stroke_mat = 0;
|
||||
StrokeCache stroke_cache;
|
||||
};
|
||||
|
||||
class GreasePencilRuntime {
|
||||
|
|
|
@ -740,12 +740,12 @@ void GreasePencilDrawing::tag_positions_changed()
|
|||
|
||||
bool GreasePencilDrawing::has_stroke_buffer()
|
||||
{
|
||||
return this->runtime->stroke_cache.size() > 0;
|
||||
return this->runtime->stroke_cache.points.size() > 0;
|
||||
}
|
||||
|
||||
blender::Span<blender::bke::StrokePoint> GreasePencilDrawing::stroke_buffer()
|
||||
{
|
||||
return this->runtime->stroke_cache.as_span();
|
||||
return this->runtime->stroke_cache.points.as_span();
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
|
|
@ -363,7 +363,7 @@ static void grease_pencil_batches_ensure(GreasePencil &grease_pencil, int cfra)
|
|||
IndexRange verts_range = IndexRange(verts_start_offset, num_verts);
|
||||
MutableSpan<GreasePencilStrokeVert> verts_slice = verts.slice(verts_range);
|
||||
MutableSpan<GreasePencilColorVert> cols_slice = cols.slice(verts_range);
|
||||
const int material_nr = drawing.runtime->stroke_mat;
|
||||
const int material_nr = drawing.runtime->stroke_cache.mat;
|
||||
|
||||
verts_slice.first().mat = -1;
|
||||
for (const int i : IndexRange(points.size())) {
|
||||
|
|
|
@ -64,7 +64,7 @@ struct PaintOperationExecutor {
|
|||
|
||||
StrokePoint new_point{proj_pos, stroke_extension.pressure * 100.0f, 1.0f, float4(1.0f)};
|
||||
|
||||
drawing.runtime->stroke_cache.append(std::move(new_point));
|
||||
drawing.runtime->stroke_cache.points.append(std::move(new_point));
|
||||
|
||||
BKE_grease_pencil_batch_cache_dirty_tag(&grease_pencil, BKE_GREASEPENCIL_BATCH_DIRTY_ALL);
|
||||
}
|
||||
|
@ -151,7 +151,7 @@ void PaintOperation::on_stroke_done(const bContext &C)
|
|||
return true;
|
||||
});
|
||||
|
||||
drawing_eval.runtime->stroke_cache.clear_and_shrink();
|
||||
drawing_eval.runtime->stroke_cache.clear();
|
||||
drawing_orig.tag_positions_changed();
|
||||
|
||||
radii.finish();
|
||||
|
|
Loading…
Reference in New Issue
Since the map will have to change to store more than just an index as the value, make sure to update the comment too.