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.
AcceleratedImage is te vinden op pastebin: http://pastebin.com/f34e13b8c
In de profiler zie ik het volgende:

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?
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:

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