Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

URGENT! RenderOffScreen replacement in Gecko 1.9

34 views
Skip to first unread message

yakobom

unread,
Sep 2, 2008, 2:26:58 PM9/2/08
to
Hi guys,
I desperately need you help.
I need the option to get an image into my own texture. Before GECKO
1.9, we did it using RenderOffScreen in the ViewManager.
Can someone please send me some instructions or a link to somewhere
that explains it ...
We have tried several things, including RenderDocument on PresShell,
but bumped into a lot of link errors.
We need quick assistance, and not only code lines.
Please - any assistance will be very appreciated.

Thanks,
yakobom

Babele Dunnit

unread,
Sep 3, 2008, 5:27:32 AM9/3/08
to

Hi Yako, still me... lets join forces, maybe someone hear us (nobody
answered my similar question 3 weeks ago).

Right now, after reading THIS thread:

http://groups.google.com/group/mozilla.dev.embedding/browse_thread/thread/57e07c2f2109a36f

I understood that THIS is important:

http://developer.mozilla.org/en/Migrating_from_Internal_Linkage_to_Frozen_Linkage

this should fix the HELL of a problems I have with strings and
linkage... but I hope that everything I used (apart from string) was
not moved into internals because I digged quite deep in FF code to do
what we are doing.

Also, THIS seems to be interesting (also cited in the thread above) :

http://developer.mozilla.org/en/XPCOM_Glue

For everything else, I mean the REAL RenderOffscreen problem, I hope
someone will send some snippet... they also moved to Cairo, so no more
"internal" rendering context... I believe the code must be changed
quite a lot.

You know? I will check Google Chrome code VERY SOON... :)

steve lu

unread,
Sep 3, 2008, 2:31:58 PM9/3/08
to dev-em...@lists.mozilla.org
Hi,

Follow the yellow brick road along <nsIDOMCanvasRenderingContext2D>, and
you shall find what you looking for.

-steve

> _______________________________________________
> dev-embedding mailing list
> dev-em...@lists.mozilla.org
> https://lists.mozilla.org/listinfo/dev-embedding
>
>

Babele Dunnit

unread,
Oct 6, 2008, 6:11:46 AM10/6/08
to
Hello everybody,

I managed to get to the pixels. Here cometh the snippet. DISCLAIMER:
this works for me, and it's probably still buggy. I still have to
understand if and where I have to use smart pointers, and I know never
free memory, and a lot of other stuff that must be fixed. All I know
is that "textureBuffer" points to a memory zone that I can
subsequently render in a OpenGL texture, so I can tell it works.

Ciao,
Aaron/Babele

void EmbeddedBrowser::GrabWindow()
{

nsCOMPtr<nsIDOMWindow> domWindow;
nsresult rv = mWebBrowser-
>GetContentDOMWindow(getter_AddRefs(domWindow));
assert(NS_SUCCEEDED(rv) && domWindow);

nsCOMPtr<nsICanvasRenderingContextInternal> context;
context = do_CreateInstance("@mozilla.org/content/canvas-rendering-
context;1?id=2d", &rv);

assert(NS_SUCCEEDED(rv) && context);

context->SetDimensions(512, 512);
context->SetCanvasElement(nsnull);

nsCOMPtr<nsIDOMCanvasRenderingContext2D> domCanvas;
domCanvas = do_QueryInterface(context, &rv);
assert(NS_SUCCEEDED(rv) && domCanvas);

rv = domCanvas->DrawWindow(domWindow, 0, 0, 512, 512,
NS_LITERAL_STRING("rgb(0,0,0)"));
assert (NS_SUCCEEDED(rv));

gfxASurface* DOMRenderedSurface = NULL;
rv = context->GetThebesSurface(&DOMRenderedSurface);
assert (NS_SUCCEEDED(rv) && DOMRenderedSurface);

assert(DOMRenderedSurface->GetType() ==
gfxASurface::SurfaceTypeWin32);
assert(DOMRenderedSurface->GetContentType() ==
gfxASurface::CONTENT_COLOR_ALPHA);

nsRefPtr<gfxImageSurface> imgSurface = new
gfxImageSurface(gfxIntSize(512,
512),gfxImageSurface::ImageFormatARGB32);
assert(imgSurface);

gfxContext* dcontext = new gfxContext(imgSurface);
assert(dcontext);

dcontext->SetOperator(gfxContext::OPERATOR_SOURCE);
dcontext->SetSource(DOMRenderedSurface);
dcontext->Paint();

PRUint32* imageData = (PRUint32*)imgSurface->Data();
textureBuffer = (char*) imageData;

}

André Pedralho

unread,
Oct 15, 2008, 11:35:29 PM10/15/08
to Babele Dunnit, dev-em...@lists.mozilla.org
Hi Aaron and Babele,

I used to set the widgetDamageRectInPixels coordinates in nsViewManager
before use it in CopyOffScreenBits, how can I do it on the new architecture?
It used to be something like:

widgetDamageRectInPixels.x = valueX;
widgetDamageRectInPixels.y = valueY;
localcx->CopyOffScreenBits(ds, 0, 0, widgetDamageRectInPixels,
NS_COPYBITS_USE_SOURCE_CLIP_REGION);

Can you help me?

Thanks in advance,

Andre Pedralho

> _______________________________________________
> dev-embedding mailing list
> dev-em...@lists.mozilla.org
> https://lists.mozilla.org/listinfo/dev-embedding
>

--
André Pedralho

Christian Sell

unread,
Feb 13, 2014, 12:02:42 PM2/13/14
to
doesn't seem to work (or even compile) with recent (>=24) XULRunner versions
0 new messages