[java] Hardware acceleratie venster

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
Ik zit hier me gek te googlen: Hardware acceleratie in java.

Na vele pogingen heb ik hardware acceleratie tijdens het "tekenen" werkende gekregen. Echter, ondanks dat vele pogingen heb gedaan om het gehele teken-proces via de hardware te laten gaan, haal ik nog steeds "slechts" 150fps op 1440x900 en 1800fps op 640x480 op mijn macbook met een 9400m gt en een 2.8ghz dual core.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package battletanks;

import java.awt.*;
import javax.swing.*;

import concurrency.*;
import gfx2d.*;

/**
 * 
 * @author tobyhinloopen
 */
public class Main {
    public static void main(String[] args) {
        final JFrame window = new JFrame("BattleTanks");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        //final Game game = new Game();

        //window.addKeyListener(game);
        final HitCounter fpsCounter = new HitCounter(4096);

        final Container pane = new Container() {
            private AcceleratedImage image = null;
            private int width=0, height=0;
            @Override
            public void paint(Graphics g) {
                width = getWidth();
                height = getHeight();

                if(width<=0
                || height<=0) {
                    return;
                }

                fpsCounter.hit();

                if(image==null) {
                    image = new AcceleratedImage(width, height, Transparency.OPAQUE);
                }
                image.ensureSize(width, height);

                Graphics2D g2d = (Graphics2D)image.getGraphics();
                g2d.clearRect(0, 0, width, height);

                //game.paintIn(g2d, width, height);

                g2d.setColor(Color.BLACK);
                g2d.drawString(fpsCounter.countHits(1000.0d)+" FPS", 10, height-10);

                g.drawImage(image.getImage(), 0, 0, null);
            }
        };
        window.setContentPane(pane);

        window.pack();
        window.setSize(640, 480);

        window.setVisible(true);
        
        final Runnable painter = new Runnable() {
            public void run() {
                pane.paint(pane.getGraphics());
            }
        };

        //final TimedThread painterThread = new TimedThread(20.0d, painter);
        final Thread painterThread = new Thread() {
            @Override
            public void run() {
                while(true) {
                    painter.run();
                    yield();
                }
            }
        };

        painterThread.setName("Painter Thread");
        painterThread.start();
    }
}


AcceleratedImage is te vinden op pastebin: http://pastebin.com/f34e13b8c

In de profiler zie ik het volgende:
Afbeeldingslocatie: http://www.plaatjesupload.nl/bekijk/2010/02/12/1266003303-910.png

Waarom zijn die framelates zo laag op hogere resoluties?

-edit-
Ik ben er zojuist achter gekomen dat AcceleratedImage dus geen Accelerated Images maakt. new AcceleratedImage(100, 100).getCapabilities().isAccelerated() geeft FALSE terug... niet zo mooi dus. Wat doe ik fout?

[ Voor 4% gewijzigd door Gamebuster op 12-02-2010 23:01 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
NB: Ik heb geen verstand van AWT.

Wat gebeurt er als je de andere createCompatibleVolatileImage methode gebruikt en daaraan een ImageCapabilities meegeeft die expliciet op accelerated is gezet?

Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
Remus schreef op zaterdag 13 februari 2010 @ 09:23:
NB: Ik heb geen verstand van AWT.

Wat gebeurt er als je de andere createCompatibleVolatileImage methode gebruikt en daaraan een ImageCapabilities meegeeft die expliciet op accelerated is gezet?
Ik zat al te kijken naar die mogelijkheid, alleen ik weet niet hoe je zo'n ImageCapabiliies instance maakt of aanpast. Ik zal 'ff kijken.

edit:
code:
1
2
3
4
5
6
7
java.awt.AWTException: Supplied image capabilities could not be met by this graphics configuration.
        at java.awt.GraphicsConfiguration.createCompatibleVolatileImage(GraphicsConfiguration.java:289)
        at gfx2d.AcceleratedImage.create(AcceleratedImage.java:95)
        at gfx2d.AcceleratedImage.create(AcceleratedImage.java:74)
        at gfx2d.AcceleratedImage.<init>(AcceleratedImage.java:38)
        at battletanks.Game.<init>(Game.java:12)
        at battletanks.Main.main(Main.java:20)


Met: http://pastebin.com/f6a2349f2
(Zie regel 95 en 15)

Overigens, als ik helemaal bovenin mijn main neerzet:
Java:
1
2
3
4
5
for(GraphicsConfiguration gc : GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getConfigurations()) {
            System.out.println(gc);
            System.out.println(gc.getImageCapabilities());
            System.out.println(gc.getImageCapabilities().isAccelerated());
        }


Is zijn output:
code:
1
2
3
apple.awt.CGraphicsConfig@2abe0e27[dev=CGraphicsDevice[screen=0],pixfmt=0]
java.awt.ImageCapabilities@2393385d
false

[ Voor 64% gewijzigd door Gamebuster op 13-02-2010 11:23 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Kijk anders eens naar de system properties beschreven op http://java.sun.com/j2se/1.5.0/docs/guide/2d/flags.html

BTW: kijk ook naar http://java.sun.com/j2se/...uide/2d/new_features.html
Note: In J2SE 5.0, these methods are not fully operational. The value set by setAccelerationPriority is ignored, and images created with the createCompatibleVolatileImage methods are not always hardware accelerated. On Linux and Solaris systems, only OPAQUE VolatileImages are hardware accelerated. On Microsoft Windows systems, images created with createCompatibleVolatileImage in J2SE 5.0 are hardware accelerated only if the hardware supports acceleration and one of the following is true:

* The transparency value is OPAQUE.
* The transparency value is TRANSLUCENT and translucency acceleration has been specifically enabled at runtime (sun.java2d.translaccel=true).

We expect to fully implement these methods on all platforms in future releases.
NB: dit gaat over J2SE 5, weet niet of er iets veranderd is in JSE 6

[ Voor 80% gewijzigd door Remus op 13-02-2010 12:23 ]


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
Wat een gekloot. Even kijken of ik meer geluk heb met JOGL. Heb ik meteen meer effecten beschikbaar voor mn spelletje.

Met argumenten:
-Dsun.java2d.opengl=True -Dsun.java2d.translaccel=true

Nog steeds hardware acceleratie. De argumenten worden wel gelezen, want als ik -Dsun.java2d.trace=log gebruik heb ik output.

Ik ga JGOL wel 'ff proberen.

> http://download.java.net/media/jogl/doc/HowToBuild.html
Tuurlijk, waarom makkelijk maken als het ook moeilijk kan?

[ Voor 63% gewijzigd door Gamebuster op 13-02-2010 14:28 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Kijk je wel op de juiste plek voor JOGL? De homepage is hier en de downloads staan hier.
Je zou ook eens kunnen kijken naar LWJGL en/of JMonkeyEngine als je met Java games bezig bent.

[ Voor 38% gewijzigd door Herko_ter_Horst op 13-02-2010 18:06 ]

"Any sufficiently advanced technology is indistinguishable from magic."


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 27-09 22:01
Herko_ter_Horst schreef op zaterdag 13 februari 2010 @ 18:02:
Kijk je wel op de juiste plek voor JOGL? De homepage is hier en de downloads staan hier.
Je zou ook eens kunnen kijken naar LWJGL en/of JMonkeyEngine als je met Java games bezig bent.
Ik heb inderdaad al downloadbare versies gevonden. Ben al druk bezig. Ik ga geen game-engine gebruiken omdat het veel leerzamer is het zelf te doen. Ik maak die game namelijk deels om java te leren en extra OpenGL kennis is welkom. Dit is gewoon een goed moment eens te beginnen aan 3d graphics. (ook al is het een 2d sidescroller game)

Kan ik ook leuke effecten gebruiken, als deze natuurlijk niet veel te moeilijk te gebruiken zijn.

[ Voor 5% gewijzigd door Gamebuster op 13-02-2010 20:06 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden

Pagina: 1