[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-dev] Renderer redesign
From: |
Udo Giacomozzi |
Subject: |
[Gnash-dev] Renderer redesign |
Date: |
Mon, 2 Oct 2006 21:10:40 +0200 |
Hi,
I want to move discussion about specific render handler redesign steps
in here.
Currently my plan is as follows:
- Implement a new, intermediary render_handler_impl class which acts
as a backward compatibility class (and base class for any
triangle-based renderer such as any hardware acceleration). It's a
descendant of the render_handler class.
- Low-level virtual methods would be moved to this class, not kept
in the base render_handler class and thus are shielded from the rest
of the Gnash source. These methods should only called from within
the renderer itself:
set_matrix (?)
set_cxform (?)
draw_mesh_strip
draw_line_strip
fill_style_XXXXXX
line_style_XXXXXX
draw_bitmap (only used for glyphs!)
- Instead, the base class (render_handler) defines a new method:
virtual void draw_shape_character(shape_character_def *def,
character *inst) = 0;
It must know how to draw a shape character. Note that a bitmap
placed on the stage is just a rectangle with bitmap fill style, so
draw_shape_character() can automatically draw bitmaps too.
- to support drawing of glyphs another method is defined:
render_handler::draw_glyph(shape_character_def *def,
const matrix *mat) = 0;
It's very similar to draw_shape_character except that it does not
get passed an instance. It will be processed in a very similar way,
however.
- render_handler_impl:draw_shape_character() (the one used for
compatibility) will use the old "mesh_set" class to tesselate the
shape. It will call the old draw_mesh_strip() and friends so
backends should work straight out of the box.
- shape_character_def::display() is very simple now:
void shape_character_def::display(character* inst)
{
render_handler* renderer = get_render_handler();
renderer->draw_shape_character(this, inst);
}
- I already implemented (without cache) this compatibility method and
it seems to work well. However, it ends by calling
mesh_set:display() which accesses the renderer methods directly,
which is not good (as these functions should not be accessible from
outside). To change this a few more changes will be necessary -
cannot tell yet.
- A generic base class render_cache_object is declared in
render_handler.h which does not contain much members and can be used
by the renderer to store any kind of caching data. For
render_handler_impl (compatibility) a descendant is defined that
holds mesh sets, just like Gnash does now.
- I'd really like to see AGG to be a fixed, integral part of Gnash so
that it can be used to render font bitmaps for OpenGL and Cairo
backends.
Any suggestions? Problems you see?
Udo
- [Gnash-dev] Renderer redesign,
Udo Giacomozzi <=