[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/dlist.cpp
From: |
Zou Lunkai |
Subject: |
[Gnash-commit] gnash ChangeLog server/dlist.cpp |
Date: |
Tue, 21 Aug 2007 11:22:17 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Zou Lunkai <zoulunkai> 07/08/21 11:22:17
Modified files:
. : ChangeLog
server : dlist.cpp
Log message:
* server/dlist.cpp: update display(), for masks. It should work better,
at least for agg renderer.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4053&r2=1.4054
http://cvs.savannah.gnu.org/viewcvs/gnash/server/dlist.cpp?cvsroot=gnash&r1=1.75&r2=1.76
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.4053
retrieving revision 1.4054
diff -u -b -r1.4053 -r1.4054
--- ChangeLog 21 Aug 2007 03:49:41 -0000 1.4053
+++ ChangeLog 21 Aug 2007 11:22:17 -0000 1.4054
@@ -2,6 +2,10 @@
* server/swf.h: Add new tag values for SWF 9 support.
+2007-08-21 Zou Lunkai <address@hidden>
+
+ * server/dlist.cpp: update display(), for masks, please check.
+
2007-08-21 Sandro Santilli <address@hidden>
* server/edit_text_character.cpp (add_invalidated_bounds): use
Index: server/dlist.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/dlist.cpp,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -b -r1.75 -r1.76
--- server/dlist.cpp 9 Aug 2007 12:18:05 -0000 1.75
+++ server/dlist.cpp 21 Aug 2007 11:22:17 -0000 1.76
@@ -27,6 +27,7 @@
#include <typeinfo>
#include <iostream>
#include <algorithm>
+#include <stack>
namespace gnash {
@@ -762,71 +763,52 @@
DisplayList::display()
{
//GNASH_REPORT_FUNCTION;
+ std::stack<int> clipDepthStack;
-// printf(".");
-
- bool masked = false;
- int highest_masked_layer = 0;
-
- //log_msg(_("number of objects to be drawn %d"),
m_display_object_array.size());
-
- for( iterator it = _characters.begin(),
- endIt = _characters.end();
+ for( iterator it = _characters.begin(), endIt = _characters.end();
it != endIt; ++it)
{
- DisplayItem& dobj = *it;
-
- //character* ch = dobj.m_character.get();
- character* ch = dobj.get();
-
+ character* ch = it->get();
assert(ch);
if (ch->get_visible() == false)
{
+ // avoid stale old_invalidated_rect
+ ch->clear_invalidated();
// Don't display.
- ch->clear_invalidated(); // avoid stale
old_invalidated_rect
+ // TODO: test invisible characters as masks
continue;
}
- // check whether a previous mask should be disabled
- if (masked)
- {
- if (ch->get_depth() > highest_masked_layer)
+ int depth = ch->get_depth();
+ // Discard useless masks
+ while(!clipDepthStack.empty() && (depth > clipDepthStack.top()))
{
-// log_msg(_("disabled mask before drawing
depth %d"), ch->get_depth());
- masked = false;
- // turn off mask
+ clipDepthStack.pop();
render::disable_mask();
}
- }
- // check whether this object should become mask
- // (see bug #20527 for the "&& !masked" condition)
- if (ch->isMask() && !masked)
+ int clipDepth = ch->get_clip_depth();
+ // Push a new mask to the masks stack
+ if(clipDepth != character::noClipDepthValue)
{
- //log_msg(_("begin submit mask"));
+ clipDepthStack.push(clipDepth);
render::begin_submit_mask();
}
ch->display();
- // if this object should have become a mask,
- // inform the renderer that it now has all
- // information about it
- if (ch->isMask() && !masked)
+ // Notify the renderer that mask drawing has finished.
+ if (ch->isMask())
{
- //log_msg(_("end submit mask"));
render::end_submit_mask();
- highest_masked_layer = ch->get_clip_depth();
- masked = true;
- }
}
+ } //end of for
- if (masked)
+ // Discard any remaining masks
+ while(!clipDepthStack.empty())
{
- // If a mask masks the scene all the way up to the highest
- // layer, it will not be disabled at the end of drawing
- // the display list, so disable it manually.
+ clipDepthStack.pop();
render::disable_mask();
}
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ChangeLog server/dlist.cpp,
Zou Lunkai <=