[JAVA2D] Exactly which graphics surfaces get HW accelerated?

2009-02-06 Thread java2d
Hi,

I'm trying to get straight in my head exactly which graphics rendering surfaces 
can get hardware accelerated in Java. There seems to be a lot of confusing/half 
specified information around.

Firstly let me state I'm using Java 6u12 on a Windows XP machine. I'm 
interested in rendering TO surfaces, not copying from, so I'm not too bothered 
about managed images.

As far as I can tell the setup goes like this:

1) Live screen graphics, i.e. Component.getGraphics() :  HW accelerated via 
Direct3D
2) Swing backbuffer, i.e. VolatileImages/BufferStrategies: Also HW accelerated 
via Direct3D
3) BufferedImages: Always software rendering via GDI

If Direct3D is disabled via sun.java2d.d3d=false, then cases 1) and 2) switch 
back to a DirectDraw accelerated pipeline, as in Java 1.5.

So my questions are:

1) Is the above information correct, and if not what do I have wrong?
2) 6u10 added native font rendering to Java. When is this enabled? Is it always 
used in all pipelines or just in the D3D rendering?

I appreciate the attention to answer these!
[Message sent by forum member 'fred34' (fred34)]

http://forums.java.net/jive/thread.jspa?messageID=330515

===
To unsubscribe, send email to lists...@java.sun.com and include in the body
of the message signoff JAVA2D-INTEREST.  For general help, send email to
lists...@java.sun.com and include in the body of the message help.


Re: [JAVA2D] Exactly which graphics surfaces get HW accelerated?

2009-02-06 Thread Chris Campbell

On Feb 6, 2009, at 5:46 AM, jav...@javadesktop.org wrote:

Hi,

I'm trying to get straight in my head exactly which graphics  
rendering surfaces can get hardware accelerated in Java. There seems  
to be a lot of confusing/half specified information around.


Firstly let me state I'm using Java 6u12 on a Windows XP machine.  
I'm interested in rendering TO surfaces, not copying from, so I'm  
not too bothered about managed images.


As far as I can tell the setup goes like this:

1) Live screen graphics, i.e. Component.getGraphics() :  HW  
accelerated via Direct3D


For now I'll just say yes, but Dmitri could explain the caveats of  
this when he gets back from vacation.




2) Swing backbuffer, i.e. VolatileImages/BufferStrategies: Also HW  
accelerated via Direct3D


Yes.



3) BufferedImages: Always software rendering via GDI



Not quite.  Yes, it's always software rendering, but it's using our  
own software loops, not GDI.


If Direct3D is disabled via sun.java2d.d3d=false, then cases 1) and  
2) switch back to a DirectDraw accelerated pipeline, as in Java 1.5.




No, the DirectDraw pipeline no longer exists as of JDK 6u10.  If the  
D3D pipeline is disabled (or can't be enabled due to driver/hardware  
problems) we switch back to using GDI for onscreen rendering, and  
VolatileImages/BufferStrategy then become backed by system memory  
surfaces (analogous to BufferedImages, which implies software  
rendering).



So my questions are:

1) Is the above information correct, and if not what do I have wrong?


You were pretty close :)



2) 6u10 added native font rendering to Java. When is this enabled?  
Is it always used in all pipelines or just in the D3D rendering?




I'll leave this one for Phil or Igor.

Thanks,
Chris

===
To unsubscribe, send email to lists...@java.sun.com and include in the body
of the message signoff JAVA2D-INTEREST.  For general help, send email to
lists...@java.sun.com and include in the body of the message help.


Re: [JAVA2D] Exactly which graphics surfaces get HW accelerated?

2009-02-06 Thread Phil Race

Chris Campbell wrote:


No, the DirectDraw pipeline no longer exists as of JDK 6u10.  If the 
D3D pipeline is disabled (or can't be enabled due to driver/hardware 
problems) we switch back to using GDI for onscreen rendering, and 
VolatileImages/BufferStrategy then become backed by system memory 
surfaces (analogous to BufferedImages, which implies software rendering).


By way of clarification, this is because the old DX7 and D3D 9 APIs are 
different and you can't

use both, so we had no choice.



2) 6u10 added native font rendering to Java. When is this enabled? Is 
it always used in all pipelines or just in the D3D rendering?




I'll leave this one for Phil or Igor. 


Its implemented in a manner independent of pipelines. It wouldn't have 
been worthwhile
to do it in a way that only worked on some surfaces, or that was sucky 
slow for them.


-phil.

===
To unsubscribe, send email to lists...@java.sun.com and include in the body
of the message signoff JAVA2D-INTEREST.  For general help, send email to
lists...@java.sun.com and include in the body of the message help.


Re: [JAVA2D] Exactly which graphics surfaces get HW accelerated?

2009-02-06 Thread Phil Race




2) 6u10 added native font rendering to Java. When is this enabled? 
Is it always used in all pipelines or just in the D3D rendering?




Its implemented in a manner independent of pipelines. It wouldn't have 
been worthwhile
to do it in a way that only worked on some surfaces, or that was sucky 
slow for them.


In case that wasn't 100% clear ..

As of 6u10, on Windows only, the native system is used to rasterize LCD 
glyphs and we
store these in our regular internal glyph cache. So its completely 
independent of the final blitting step.
So you'll get the natively renderered glyphs regardless of what kind of 
Java2D surface you're rendering to
(whether it is a BufferedImage, a VolatileImage, a BufferStrategy, etc) 
or what rendering pipeline
is currently in use (D3D, OGL, GDI, software, etc). 
The sole exception to this is the glyphs from fonts that are in the 
jre/lib/fonts directory - ie the fonts

that ship with Java. For the Windows JRE this means Lucida Sans Regular.

-phil.

===
To unsubscribe, send email to lists...@java.sun.com and include in the body
of the message signoff JAVA2D-INTEREST.  For general help, send email to
lists...@java.sun.com and include in the body of the message help.


Re: [JAVA2D] Exactly which graphics surfaces get HW accelerated?

2009-02-06 Thread java2d
 The sole exception to this is the glyphs from fonts
 that are in the 
 jre/lib/fonts directory - ie the fonts
 that ship with Java. For the Windows JRE this means
 Lucida Sans Regular.

There is another, much bigger exception - painting texts on translucent 
surfaces (when the current SrcOver composite has alpha  1.0) uses the bundled 
rasterizer, which is inferior as far as Segoe UI font (default Vista) is 
concerned.

Kirill
[Message sent by forum member 'kirillcool' (kirillcool)]

http://forums.java.net/jive/thread.jspa?messageID=330617

===
To unsubscribe, send email to lists...@java.sun.com and include in the body
of the message signoff JAVA2D-INTEREST.  For general help, send email to
lists...@java.sun.com and include in the body of the message help.


Re: [JAVA2D] Exactly which graphics surfaces get HW accelerated?

2009-02-06 Thread Phil Race

The question is where the native rasterisation is used vs where
the Java rasteriser is used. We don't use LCD rasterisation of
either flavour in such cases.
There are also limitations to where Microsoft can or do apply cleartype.
I've seen it in the distant past although I can't say for certain if
it was  the circumstances described/discussed here (transforms):
http://blogs.msdn.com/ie/archive/2006/08/31/730887.aspx
..
and here (intermediate surfaces) in a posting by a MS WPF engineer :
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a2f093ca-267c-4af2-b35e-13c01eb4854b/

there are indeed some challenging technical problems behind enabling ClearType 
on intermediate surfaces.

Basically, the fundamental problem is that ClearType needs a separate alpha 
value
for each of the three color channels (RGB or BGR in common LCD configurations),
and typical intermediate surface formats such as ARGB or PARGB have only one.

We were able to get around this issue in some cases for WPF V1,
however this wasn't possible for text rendered onto semi-transparent
intermediate surfaces, which are often used to achieve shadow-like effects.
We have received customer feedback similar to yours on this limitation before,
and we are looking into ways to solve it in future.


-phil.


jav...@javadesktop.org wrote:

The sole exception to this is the glyphs from fonts
that are in the 
jre/lib/fonts directory - ie the fonts

that ship with Java. For the Windows JRE this means
Lucida Sans Regular.


There is another, much bigger exception - painting texts on translucent surfaces 
(when the current SrcOver composite has alpha  1.0) uses the bundled 
rasterizer, which is inferior as far as Segoe UI font (default Vista) is concerned.

Kirill
[Message sent by forum member 'kirillcool' (kirillcool)]

http://forums.java.net/jive/thread.jspa?messageID=330617

===
To unsubscribe, send email to lists...@java.sun.com and include in the body
of the message signoff JAVA2D-INTEREST.  For general help, send email to
lists...@java.sun.com and include in the body of the message help.


===
To unsubscribe, send email to lists...@java.sun.com and include in the body
of the message signoff JAVA2D-INTEREST.  For general help, send email to
lists...@java.sun.com and include in the body of the message help.


Re: [JAVA2D] Exactly which graphics surfaces get HW accelerated?

2009-02-06 Thread java2d
Wow, I didn't expect such quick replies! Thanks everyone, your answers are 
clear and very useful. Thanks for clearing that up.
[Message sent by forum member 'fred34' (fred34)]

http://forums.java.net/jive/thread.jspa?messageID=330628

===
To unsubscribe, send email to lists...@java.sun.com and include in the body
of the message signoff JAVA2D-INTEREST.  For general help, send email to
lists...@java.sun.com and include in the body of the message help.