Closed Bug 170553 (opengl) Opened 22 years ago Closed 13 years ago

Render using OpenGL

Categories

(Core :: Graphics, enhancement, P3)

enhancement

Tracking

()

RESOLVED INCOMPLETE
Future

People

(Reporter: netdragon, Unassigned)

References

Details

(Keywords: highrisk, perf, Whiteboard: [Hixie-P1][Hixie-P0][Hixie-2.0])

Attachments

(1 file)

Using directx and/or opengl would make rendering faster on all the oses. We could make it option-based so that if someone doesn't have the ability to run directx or opengl they could use plain GDI (or linux equiv) rendering. This is obviously something that is for the way future.
Target Milestone: --- → Future
I fail to see how rendering using directX or openGL will be that much faster for 2-d rendering (which is what we are doing).
Make it so.
Alias: opengl
Assignee: kmcclusk → roc+moz
Keywords: perf
QA Contact: petersen → ian
Summary: Render using directx and/or opengl → Render using OpenGL
Whiteboard: [Hixie-P1][Hixie-P0][Hixie-2.0]
Target Milestone: Future → mozilla1.3alpha
There's no need to use DirectX. OpenGL runs fine on Windows, AND it's cross platform. Things that would work better in OpenGL: alpha compositing scaling (bilinear filtering!) tiling any kind of image drawing, actually (store images in texture memory) anti-aliased anything Well, that list pretty much sums up everything that's slow about our current drawing code :-).
In theory, video cards are faster at 2D rendering using OpenGL/DirectX because that has been the "push", the "in thing", the "fad", the "what all perf comparison charts use to say who's hot". So the video card manufacturers have been pouring many manhours into developing the fastest 3D out there, usually at the expense of speeding up their old 2D routines. All the cool routines are in 3D mode, even the 2D ones ;)
Also GDI (win32) is made for basic rendering of widgets and such, not rich multimedia rendering as is now required by browsers. It says that if you do any kind of sophisticated multimedia, you should use DirectX (or opengl). Mozilla isn't a text-mode application. ;-)
I love OpenGL. However: Things that would likely work worse in OpenGL: . Text rendering (uh-oh) . Drawing to an offscreen image (double-buffering -- when you swap buffers in OpenGL the new backbuffer's contents become undefined. Single-buffering would give flicker. Hardware-rendering to an offscreen pixmap is nonstandard.) . Screen-screen copies (scrolling!) I think that an OpenGL front-end would be groovy and IS doable, but there are some real potential design/performance/interoperability pitfalls to be wary of.
Actually on Windows, I think the simplest change which would help all the issues decribed in comment #3 would be to use GDI+ Having said that, I dont have benchmarks to know how much performance would benefit (other than MS docs which say "programmers of new applications should use GDI+ for all their graphics needs because GDI+ optimizes many of the capabilities of GDI and also provides additional features"). At least it has many of the algorithms and features Mozilla needs. Of course, this doesnt help cross-platform performance or needs.
I'd like to mention that its not a good idea to start saying, "We'll fix this with the OpenGL fix" for bugs like bug 98971 - on bilinear image scaling. This bug isn't a small fix and will require a lot of testing. That's why I'm adding the keyword "highrisk" highrisk: Bugs whose fixes have a high level of risk associated with them, typically due to some major architectural changes being required (see the 'arch' keyword). Typically these are bugs that were deferred from the previous release cycle due to the high level of risk involved, and should therefore be fixed as soon as possible in the next cycle. Examples: "need to rewrite handling of HTTP headers" or "need to redesign the content sinks". If believe this bug could be considered a major architectural change since it will change the way in which graphics are rendered throughout mozilla.
Keywords: highrisk
GDIPlus is probably not an option as it requires a download from Microsoft if you are on Win95/98/ME/2k. I believe WinXP has it. Some documentation says 2k has it, but it wasn't on my 2k machine. Unless of course, it was a build option.
paper: couldn't moz ship with the gdi+ dll?
> Things that would likely work worse in OpenGL: > . Text rendering (uh-oh) We would rasterize glyphs ourselves and upload as textures. This is basically what our existing Freetype code already does on X (both the bstell code and the Xft code) --- except X is slower, of course. > . Drawing to an offscreen image (double-buffering -- when > you swap buffers in OpenGL the new backbuffer's contents > become undefined. Not a problem, we always throw the old buffer away anyway. > Single-buffering would give flicker. > Hardware-rendering to an offscreen pixmap is nonstandard.) My OpenGL books are at home but I think they describe rendering to an offscreen pixmap to do lots of tricks. Anyway the real issue is not whether it's standard, but whether existing cards let us do it, and I'm pretty sure they do. > . Screen-screen copies (scrolling!) If OpenGL rendering is fast enough, we would just rerender the entire scrolled area. We already do this for certain complex pages (e.g., pages with background-attachment:fixed). ------------------------------------ I totally agree with Brian that OpenGL is not a solution to any short-term problems. We need to keep improving our existing GFX implementations. ------------------------------------ We could detect at runtime if GDI+ is available and use it if it is.
BTW Adam, rendering to offscreen pixmaps is necessary to do CSS/SVG transparency properly as well as for double buffering, and one of my main motivations to use OpenGL would be to speed up the rendering of exactly that sort of effect. So if offscreen OpenGL rendering doesn't work well in common cases (say Linux+NVidia) then I'm suddenly not interested in it anymore.
You're fine with the nVidia drivers on linux and windows. I think the recommended way to do this on windows is with the WGL_ARB_pbuffer extension. There's an equivilent (but different) extension offered by recent nV drivers on both platforms but the name escapes me.
One thing I should mention here is that on Linux, OpenGL with Direct Rendering is a much faster path to the graphics hardware than the X protocol and the X server. If there's a win here, it's probably bigger on Linux than anywhere else.
I'd like to add my vote for OpenGl for precisely the reason mentioned by Mr. O'Callahan. I started out by asking about Gtk/Qt use of DRI, and when I learned that only OpenGL used DRI at the moment, searched for this bug. It'd be nice to be able to scroll over a fixed background without stutteriness. Or move a sidebar menu without it jumping around. Mozilla under linux is a bit of an embarassment in terms of responsiveness. People are quick to blame the mozilla code, but I bet it is just the windows advantage of direct access to graphics card. *note, I am in *no* way a graphics programmer or have any familiarity with it, all the above is just the rantings of a user* :)
Blocks: 85586
Anything ever come of this?
I think the idea is to switch to Cairo for (most?) rendering, and that gives gecko a pretty good OpenGL back-end for free. There don't seem to be any bugs in bugzilla about the Cairo support though, which is mysterious. I guess if it's happening then it's happening offline.
The Cairo work is happening very slowly right now. It will speed up a lot once I start working on it in January.
Depends on: 290903
The overall plan here is to get Mozilla working using Cairo for all rendering on all platforms. Then users with good OpenGL support can use the "Glitz" Cairo backend to get hardware acceleration. This will require us to do some work on Cairo itself to make it fast enough, but at least we won't be doing the graphics layer alone anymore.
Does this bug still apply or can it be closed since we're using Cairo?
Target Milestone: mozilla1.3alpha → Future
Product: Core → Core Graveyard
Attached patch braindead opengl on OS X (deleted) — Splinter Review
Here is a patch that Vlad gave me, and I fixed up a little, that takes the output of Firefox's rendering on OS X and, on every draw, creates a texture, uploads it, and draws a textured quad. Let me be clear: this is proof-of-concept only. It implements hardware deceleration. It is not the way we want to go. But it's at least a starting point.
Assignee: roc → nobody
Component: GFX → Graphics
Product: Core Graveyard → Core
QA Contact: ian → thebes
This should be duped to something??
We have OpenGL layers now, implemented via other bugs.
Status: NEW → RESOLVED
Closed: 13 years ago
Resolution: --- → INCOMPLETE
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: