Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Aparapi Examples
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
We are moving to Forgejo!
You are on a read-only GitLab instance.
Show more breadcrumbs
Aparapi
Aparapi Examples
Commits
5f674813
There was an error fetching the commit references. Please try again later.
Commit
5f674813
authored
12 years ago
by
Ryan LaMothe
Browse files
Options
Downloads
Patches
Plain Diff
Reverted change to resource loading that mistaken tried to load duke.jpg instead of particle.jpg
parent
a7be80af
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
examples/nbody/src/com/amd/aparapi/examples/nbody/Main.java
+228
-221
228 additions, 221 deletions
examples/nbody/src/com/amd/aparapi/examples/nbody/Main.java
with
228 additions
and
221 deletions
examples/nbody/src/com/amd/aparapi/examples/nbody/Main.java
+
228
−
221
View file @
5f674813
...
...
@@ -34,7 +34,7 @@ to national security controls as identified on the Commerce Control List (curren
of EAR). For the most current Country Group listings, or for additional information about the EAR or your obligations
under those regulations, please refer to the U.S. Bureau of Industry and Security's website at http://www.bis.doc.gov/.
*/
*/
package
com.amd.aparapi.examples.nbody
;
import
java.awt.BorderLayout
;
...
...
@@ -42,8 +42,6 @@ import java.awt.Dimension;
import
java.awt.FlowLayout
;
import
java.awt.event.ActionEvent
;
import
java.awt.event.ActionListener
;
import
java.awt.event.WindowAdapter
;
import
java.awt.event.WindowEvent
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.List
;
...
...
@@ -73,288 +71,297 @@ import com.jogamp.opengl.util.texture.Texture;
import
com.jogamp.opengl.util.texture.TextureIO
;
/**
* NBody implementing demonstrating Aparapi kernels.
* NBody implementing demonstrating Aparapi kernels.
*
* For a description of the NBody problem.
*
* For a description of the NBody problem.
* @see http://en.wikipedia.org/wiki/N-body_problem
*
* We use JOGL to render the bodies.
*
We use JOGL to render the bodies.
* @see http://jogamp.org/jogl/www/
*
* @author gfrost
*
*
*/
public
class
Main
{
public
class
Main
{
public
static
class
NBodyKernel
extends
Kernel
{
protected
final
float
delT
=
.
005
f
;
public
static
class
NBodyKernel
extends
Kernel
{
protected
final
float
delT
=
.
005
f
;
protected
final
float
espSqr
=
1.0f
;
protected
final
float
espSqr
=
1.0f
;
protected
final
float
mass
=
5
f
;
protected
final
float
mass
=
5
f
;
private
final
Range
range
;
private
final
Range
range
;
private
final
float
[]
xyz
;
// positions xy and z of bodies
private
final
float
[]
xyz
;
// positions xy and z of bodies
private
final
float
[]
vxyz
;
// velocity component of x,y and z of bodies
private
final
float
[]
vxyz
;
// velocity component of x,y and z of bodies
/**
* Constructor initializes xyz and vxyz arrays.
* @param _bodies
*/
public
NBodyKernel
(
Range
_range
)
{
range
=
_range
;
// range = Range.create(bodies);
xyz
=
new
float
[
range
.
getGlobalSize
(
0
)
*
3
];
vxyz
=
new
float
[
range
.
getGlobalSize
(
0
)
*
3
];
float
maxDist
=
20
f
;
for
(
int
body
=
0
;
body
<
range
.
getGlobalSize
(
0
)
*
3
;
body
+=
3
)
{
/**
* Constructor initializes xyz and vxyz arrays.
*
* @param _bodies
*/
public
NBodyKernel
(
Range
_range
)
{
range
=
_range
;
// range = Range.create(bodies);
xyz
=
new
float
[
range
.
getGlobalSize
(
0
)
*
3
];
vxyz
=
new
float
[
range
.
getGlobalSize
(
0
)
*
3
];
final
float
maxDist
=
20
f
;
for
(
int
body
=
0
;
body
<
(
range
.
getGlobalSize
(
0
)
*
3
);
body
+=
3
)
{
float
theta
=
(
float
)
(
Math
.
random
()
*
Math
.
PI
*
2
);
float
phi
=
(
float
)
(
Math
.
random
()
*
Math
.
PI
*
2
);
float
radius
=
(
float
)
(
Math
.
random
()
*
maxDist
);
final
float
theta
=
(
float
)
(
Math
.
random
()
*
Math
.
PI
*
2
);
final
float
phi
=
(
float
)
(
Math
.
random
()
*
Math
.
PI
*
2
);
final
float
radius
=
(
float
)
(
Math
.
random
()
*
maxDist
);
// get the 3D dimensional coordinates
xyz
[
body
+
0
]
=
(
float
)
(
radius
*
Math
.
cos
(
theta
)
*
Math
.
sin
(
phi
));
xyz
[
body
+
1
]
=
(
float
)
(
radius
*
Math
.
sin
(
theta
)
*
Math
.
sin
(
phi
));
xyz
[
body
+
2
]
=
(
float
)
(
radius
*
Math
.
cos
(
phi
));
// get the 3D dimensional coordinates
xyz
[
body
+
0
]
=
(
float
)
(
radius
*
Math
.
cos
(
theta
)
*
Math
.
sin
(
phi
));
xyz
[
body
+
1
]
=
(
float
)
(
radius
*
Math
.
sin
(
theta
)
*
Math
.
sin
(
phi
));
xyz
[
body
+
2
]
=
(
float
)
(
radius
*
Math
.
cos
(
phi
));
// divide into two 'spheres of bodies' by adjusting x
// divide into two 'spheres of bodies' by adjusting x
if
(
body
%
2
==
0
)
{
xyz
[
body
+
0
]
+=
maxDist
*
1.5
;
}
else
{
xyz
[
body
+
0
]
-=
maxDist
*
1.5
;
}
}
setExplicit
(
true
);
if
((
body
%
2
)
==
0
)
{
xyz
[
body
+
0
]
+=
maxDist
*
1.5
;
}
else
{
xyz
[
body
+
0
]
-=
maxDist
*
1.5
;
}
}
/**
* Here is the kernel entrypoint. Here is where we calculate the position of each body
*/
@Override
public
void
run
()
{
int
body
=
getGlobalId
();
int
count
=
getGlobalSize
(
0
)
*
3
;
int
globalId
=
body
*
3
;
float
accx
=
0
.
f
;
float
accy
=
0
.
f
;
float
accz
=
0
.
f
;
float
myPosx
=
xyz
[
globalId
+
0
];
float
myPosy
=
xyz
[
globalId
+
1
];
float
myPosz
=
xyz
[
globalId
+
2
];
for
(
int
i
=
0
;
i
<
count
;
i
+=
3
)
{
float
dx
=
xyz
[
i
+
0
]
-
myPosx
;
float
dy
=
xyz
[
i
+
1
]
-
myPosy
;
float
dz
=
xyz
[
i
+
2
]
-
myPosz
;
float
invDist
=
rsqrt
((
dx
*
dx
)
+
(
dy
*
dy
)
+
(
dz
*
dz
)
+
espSqr
);
float
s
=
mass
*
invDist
*
invDist
*
invDist
;
accx
=
accx
+
s
*
dx
;
accy
=
accy
+
s
*
dy
;
accz
=
accz
+
s
*
dz
;
}
accx
=
accx
*
delT
;
accy
=
accy
*
delT
;
accz
=
accz
*
delT
;
xyz
[
globalId
+
0
]
=
myPosx
+
vxyz
[
globalId
+
0
]
*
delT
+
accx
*
.
5
f
*
delT
;
xyz
[
globalId
+
1
]
=
myPosy
+
vxyz
[
globalId
+
1
]
*
delT
+
accy
*
.
5
f
*
delT
;
xyz
[
globalId
+
2
]
=
myPosz
+
vxyz
[
globalId
+
2
]
*
delT
+
accz
*
.
5
f
*
delT
;
vxyz
[
globalId
+
0
]
=
vxyz
[
globalId
+
0
]
+
accx
;
vxyz
[
globalId
+
1
]
=
vxyz
[
globalId
+
1
]
+
accy
;
vxyz
[
globalId
+
2
]
=
vxyz
[
globalId
+
2
]
+
accz
;
setExplicit
(
true
);
}
/**
* Here is the kernel entrypoint. Here is where we calculate the position of each body
*/
@Override
public
void
run
()
{
final
int
body
=
getGlobalId
();
final
int
count
=
getGlobalSize
(
0
)
*
3
;
final
int
globalId
=
body
*
3
;
float
accx
=
0
.
f
;
float
accy
=
0
.
f
;
float
accz
=
0
.
f
;
final
float
myPosx
=
xyz
[
globalId
+
0
];
final
float
myPosy
=
xyz
[
globalId
+
1
];
final
float
myPosz
=
xyz
[
globalId
+
2
];
for
(
int
i
=
0
;
i
<
count
;
i
+=
3
)
{
final
float
dx
=
xyz
[
i
+
0
]
-
myPosx
;
final
float
dy
=
xyz
[
i
+
1
]
-
myPosy
;
final
float
dz
=
xyz
[
i
+
2
]
-
myPosz
;
final
float
invDist
=
rsqrt
((
dx
*
dx
)
+
(
dy
*
dy
)
+
(
dz
*
dz
)
+
espSqr
);
final
float
s
=
mass
*
invDist
*
invDist
*
invDist
;
accx
=
accx
+
(
s
*
dx
);
accy
=
accy
+
(
s
*
dy
);
accz
=
accz
+
(
s
*
dz
);
}
/**
* Render all particles to the OpenGL context
* @param gl
*/
protected
void
render
(
GL2
gl
)
{
gl
.
glBegin
(
GL2
.
GL_QUADS
);
for
(
int
i
=
0
;
i
<
range
.
getGlobalSize
(
0
)
*
3
;
i
+=
3
)
{
gl
.
glTexCoord2f
(
0
,
1
);
gl
.
glVertex3f
(
xyz
[
i
+
0
],
xyz
[
i
+
1
]
+
1
,
xyz
[
i
+
2
]);
gl
.
glTexCoord2f
(
0
,
0
);
gl
.
glVertex3f
(
xyz
[
i
+
0
],
xyz
[
i
+
1
],
xyz
[
i
+
2
]);
gl
.
glTexCoord2f
(
1
,
0
);
gl
.
glVertex3f
(
xyz
[
i
+
0
]
+
1
,
xyz
[
i
+
1
],
xyz
[
i
+
2
]);
gl
.
glTexCoord2f
(
1
,
1
);
gl
.
glVertex3f
(
xyz
[
i
+
0
]
+
1
,
xyz
[
i
+
1
]
+
1
,
xyz
[
i
+
2
]);
}
gl
.
glEnd
();
accx
=
accx
*
delT
;
accy
=
accy
*
delT
;
accz
=
accz
*
delT
;
xyz
[
globalId
+
0
]
=
myPosx
+
(
vxyz
[
globalId
+
0
]
*
delT
)
+
(
accx
*
.
5
f
*
delT
);
xyz
[
globalId
+
1
]
=
myPosy
+
(
vxyz
[
globalId
+
1
]
*
delT
)
+
(
accy
*
.
5
f
*
delT
);
xyz
[
globalId
+
2
]
=
myPosz
+
(
vxyz
[
globalId
+
2
]
*
delT
)
+
(
accz
*
.
5
f
*
delT
);
vxyz
[
globalId
+
0
]
=
vxyz
[
globalId
+
0
]
+
accx
;
vxyz
[
globalId
+
1
]
=
vxyz
[
globalId
+
1
]
+
accy
;
vxyz
[
globalId
+
2
]
=
vxyz
[
globalId
+
2
]
+
accz
;
}
/**
* Render all particles to the OpenGL context
*
* @param gl
*/
protected
void
render
(
GL2
gl
)
{
gl
.
glBegin
(
GL2
.
GL_QUADS
);
for
(
int
i
=
0
;
i
<
(
range
.
getGlobalSize
(
0
)
*
3
);
i
+=
3
)
{
gl
.
glTexCoord2f
(
0
,
1
);
gl
.
glVertex3f
(
xyz
[
i
+
0
],
xyz
[
i
+
1
]
+
1
,
xyz
[
i
+
2
]);
gl
.
glTexCoord2f
(
0
,
0
);
gl
.
glVertex3f
(
xyz
[
i
+
0
],
xyz
[
i
+
1
],
xyz
[
i
+
2
]);
gl
.
glTexCoord2f
(
1
,
0
);
gl
.
glVertex3f
(
xyz
[
i
+
0
]
+
1
,
xyz
[
i
+
1
],
xyz
[
i
+
2
]);
gl
.
glTexCoord2f
(
1
,
1
);
gl
.
glVertex3f
(
xyz
[
i
+
0
]
+
1
,
xyz
[
i
+
1
]
+
1
,
xyz
[
i
+
2
]);
}
gl
.
glEnd
();
}
}
}
public
static
int
width
;
public
static
int
width
;
public
static
int
height
;
public
static
int
height
;
public
static
boolean
running
;
public
static
boolean
running
;
public
static
void
main
(
String
_args
[])
{
public
static
void
main
(
String
_args
[])
{
final
NBodyKernel
kernel
=
new
NBodyKernel
(
Range
.
create
(
Integer
.
getInteger
(
"bodies"
,
8192
)));
final
NBodyKernel
kernel
=
new
NBodyKernel
(
Range
.
create
(
Integer
.
getInteger
(
"bodies"
,
8192
)));
JFrame
frame
=
new
JFrame
(
"NBody"
);
final
JFrame
frame
=
new
JFrame
(
"NBody"
);
JPanel
panel
=
new
JPanel
(
new
BorderLayout
());
JPanel
controlPanel
=
new
JPanel
(
new
FlowLayout
());
panel
.
add
(
controlPanel
,
BorderLayout
.
SOUTH
);
final
JPanel
panel
=
new
JPanel
(
new
BorderLayout
());
final
JPanel
controlPanel
=
new
JPanel
(
new
FlowLayout
());
panel
.
add
(
controlPanel
,
BorderLayout
.
SOUTH
);
final
JButton
startButton
=
new
JButton
(
"Start"
);
final
JButton
startButton
=
new
JButton
(
"Start"
);
startButton
.
addActionListener
(
new
ActionListener
(){
@Override
public
void
actionPerformed
(
ActionEvent
e
)
{
running
=
true
;
startButton
.
setEnabled
(
false
);
}
});
controlPanel
.
add
(
startButton
);
controlPanel
.
add
(
new
JLabel
(
kernel
.
getExecutionMode
().
toString
()));
startButton
.
addActionListener
(
new
ActionListener
()
{
@Override
public
void
actionPerformed
(
ActionEvent
e
)
{
running
=
true
;
startButton
.
setEnabled
(
false
);
}
});
controlPanel
.
add
(
startButton
);
controlPanel
.
add
(
new
JLabel
(
kernel
.
getExecutionMode
().
toString
()));
controlPanel
.
add
(
new
JLabel
(
" Particles"
));
controlPanel
.
add
(
new
JTextField
(
""
+
kernel
.
range
.
getGlobalSize
(
0
),
5
));
controlPanel
.
add
(
new
JLabel
(
" Particles"
));
controlPanel
.
add
(
new
JTextField
(
""
+
kernel
.
range
.
getGlobalSize
(
0
),
5
));
controlPanel
.
add
(
new
JLabel
(
"FPS"
));
final
JTextField
framesPerSecondTextField
=
new
JTextField
(
"0"
,
5
);
controlPanel
.
add
(
new
JLabel
(
"FPS"
));
final
JTextField
framesPerSecondTextField
=
new
JTextField
(
"0"
,
5
);
controlPanel
.
add
(
framesPerSecondTextField
);
controlPanel
.
add
(
new
JLabel
(
"Score("
));
JLabel
miniLabel
=
new
JLabel
(
"<html><small>calcs</small><hr/><small>µsec</small></html>"
);
controlPanel
.
add
(
framesPerSecondTextField
);
controlPanel
.
add
(
new
JLabel
(
"Score("
));
final
JLabel
miniLabel
=
new
JLabel
(
"<html><small>calcs</small><hr/><small>µsec</small></html>"
);
controlPanel
.
add
(
miniLabel
);
controlPanel
.
add
(
new
JLabel
(
")"
));
controlPanel
.
add
(
miniLabel
);
controlPanel
.
add
(
new
JLabel
(
")"
));
final
JTextField
positionUpdatesPerMicroSecondTextField
=
new
JTextField
(
"0"
,
5
);
final
JTextField
positionUpdatesPerMicroSecondTextField
=
new
JTextField
(
"0"
,
5
);
controlPanel
.
add
(
positionUpdatesPerMicroSecondTextField
);
GLCapabilities
caps
=
new
GLCapabilities
(
null
);
final
GLProfile
profile
=
caps
.
getGLProfile
();
caps
.
setDoubleBuffered
(
true
);
caps
.
setHardwareAccelerated
(
true
);
final
GLCanvas
canvas
=
new
GLCanvas
(
caps
);
controlPanel
.
add
(
positionUpdatesPerMicroSecondTextField
);
final
GLCapabilities
caps
=
new
GLCapabilities
(
null
);
final
GLProfile
profile
=
caps
.
getGLProfile
();
caps
.
setDoubleBuffered
(
true
);
caps
.
setHardwareAccelerated
(
true
);
final
GLCanvas
canvas
=
new
GLCanvas
(
caps
);
Dimension
dimension
=
new
Dimension
(
Integer
.
getInteger
(
"width"
,
742
-
64
),
Integer
.
getInteger
(
"height"
,
742
-
64
));
canvas
.
setPreferredSize
(
dimension
);
final
Dimension
dimension
=
new
Dimension
(
Integer
.
getInteger
(
"width"
,
742
-
64
),
Integer
.
getInteger
(
"height"
,
742
-
64
));
canvas
.
setPreferredSize
(
dimension
);
canvas
.
addGLEventListener
(
new
GLEventListener
(){
private
double
ratio
;
canvas
.
addGLEventListener
(
new
GLEventListener
()
{
private
double
ratio
;
private
final
float
xeye
=
0
f
;
private
final
float
xeye
=
0
f
;
private
final
float
yeye
=
0
f
;
private
final
float
yeye
=
0
f
;
private
final
float
zeye
=
100
f
;
private
final
float
zeye
=
100
f
;
private
final
float
xat
=
0
f
;
private
final
float
xat
=
0
f
;
private
final
float
yat
=
0
f
;
private
final
float
yat
=
0
f
;
private
final
float
zat
=
0
f
;
private
final
float
zat
=
0
f
;
public
final
float
zoomFactor
=
1.0f
;
public
final
float
zoomFactor
=
1.0f
;
private
int
frames
;
private
int
frames
;
private
long
last
=
System
.
currentTimeMillis
();
private
long
last
=
System
.
currentTimeMillis
();
@Override
public
void
dispose
(
GLAutoDrawable
drawable
)
{
@Override
public
void
dispose
(
GLAutoDrawable
drawable
)
{
}
}
@Override
public
void
display
(
GLAutoDrawable
drawable
)
{
@Override
public
void
display
(
GLAutoDrawable
drawable
)
{
GL2
gl
=
drawable
.
getGL
().
getGL2
();
final
GL2
gl
=
drawable
.
getGL
().
getGL2
();
gl
.
glLoadIdentity
();
gl
.
glClear
(
GL
.
GL_COLOR_BUFFER_BIT
|
GL
.
GL_DEPTH_BUFFER_BIT
);
gl
.
glColor3f
(
1
f
,
1
f
,
1
f
);
gl
.
glLoadIdentity
();
gl
.
glClear
(
GL
.
GL_COLOR_BUFFER_BIT
|
GL
.
GL_DEPTH_BUFFER_BIT
);
gl
.
glColor3f
(
1
f
,
1
f
,
1
f
);
GLU
glu
=
new
GLU
();
glu
.
gluPerspective
(
45
f
,
ratio
,
0
f
,
1000
f
);
final
GLU
glu
=
new
GLU
();
glu
.
gluPerspective
(
45
f
,
ratio
,
0
f
,
1000
f
);
glu
.
gluLookAt
(
xeye
,
yeye
,
zeye
*
zoomFactor
,
xat
,
yat
,
zat
,
0
f
,
1
f
,
0
f
);
if
(
running
)
{
kernel
.
execute
(
kernel
.
range
);
if
(
kernel
.
isExplicit
())
{
kernel
.
get
(
kernel
.
xyz
);
}
List
<
ProfileInfo
>
profileInfo
=
kernel
.
getProfileInfo
();
if
(
profileInfo
!=
null
&&
profileInfo
.
size
()
>
0
)
{
for
(
ProfileInfo
p
:
profileInfo
)
{
System
.
out
.
print
(
" "
+
p
.
getType
()
+
" "
+
p
.
getLabel
()
+
(
p
.
getEnd
()
-
p
.
getStart
())
/
1000
+
"us"
);
}
System
.
out
.
println
();
}
}
kernel
.
render
(
gl
);
long
now
=
System
.
currentTimeMillis
();
long
time
=
now
-
last
;
frames
++;
if
(
time
>
1000
)
{
// We update the frames/sec every second
if
(
running
)
{
float
framesPerSecond
=
(
frames
*
1000.0f
)
/
time
;
int
updatesPerMicroSecond
=
(
int
)
((
framesPerSecond
*
kernel
.
range
.
getGlobalSize
(
0
)
*
kernel
.
range
.
getGlobalSize
(
0
))
/
1000000
);
framesPerSecondTextField
.
setText
(
String
.
format
(
"%5.2f"
,
framesPerSecond
));
positionUpdatesPerMicroSecondTextField
.
setText
(
String
.
format
(
"%4d"
,
updatesPerMicroSecond
));
}
frames
=
0
;
last
=
now
;
}
gl
.
glFlush
();
}
@Override
public
void
init
(
GLAutoDrawable
drawable
)
{
final
GL2
gl
=
drawable
.
getGL
().
getGL2
();
gl
.
glShadeModel
(
GLLightingFunc
.
GL_SMOOTH
);
gl
.
glEnable
(
GL
.
GL_BLEND
);
gl
.
glBlendFunc
(
GL
.
GL_SRC_ALPHA
,
GL
.
GL_ONE
);
try
{
InputStream
textureStream
=
Main
.
class
.
getResourceAsStream
(
"duke.jpg"
);
Texture
texture
=
TextureIO
.
newTexture
(
textureStream
,
false
,
null
);
texture
.
enable
(
gl
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
catch
(
GLException
e
)
{
e
.
printStackTrace
();
glu
.
gluLookAt
(
xeye
,
yeye
,
zeye
*
zoomFactor
,
xat
,
yat
,
zat
,
0
f
,
1
f
,
0
f
);
if
(
running
)
{
kernel
.
execute
(
kernel
.
range
);
if
(
kernel
.
isExplicit
())
{
kernel
.
get
(
kernel
.
xyz
);
}
final
List
<
ProfileInfo
>
profileInfo
=
kernel
.
getProfileInfo
();
if
((
profileInfo
!=
null
)
&&
(
profileInfo
.
size
()
>
0
))
{
for
(
final
ProfileInfo
p
:
profileInfo
)
{
System
.
out
.
print
(
" "
+
p
.
getType
()
+
" "
+
p
.
getLabel
()
+
((
p
.
getEnd
()
-
p
.
getStart
())
/
1000
)
+
"us"
);
}
System
.
out
.
println
();
}
}
kernel
.
render
(
gl
);
final
long
now
=
System
.
currentTimeMillis
();
final
long
time
=
now
-
last
;
frames
++;
if
(
time
>
1000
)
{
// We update the frames/sec every second
if
(
running
)
{
final
float
framesPerSecond
=
(
frames
*
1000.0f
)
/
time
;
final
int
updatesPerMicroSecond
=
(
int
)
((
framesPerSecond
*
kernel
.
range
.
getGlobalSize
(
0
)
*
kernel
.
range
.
getGlobalSize
(
0
))
/
1000000
);
framesPerSecondTextField
.
setText
(
String
.
format
(
"%5.2f"
,
framesPerSecond
));
positionUpdatesPerMicroSecondTextField
.
setText
(
String
.
format
(
"%4d"
,
updatesPerMicroSecond
));
}
frames
=
0
;
last
=
now
;
}
gl
.
glFlush
();
}
}
@Override
public
void
init
(
GLAutoDrawable
drawable
)
{
final
GL2
gl
=
drawable
.
getGL
().
getGL2
();
gl
.
glShadeModel
(
GLLightingFunc
.
GL_SMOOTH
);
gl
.
glEnable
(
GL
.
GL_BLEND
);
gl
.
glBlendFunc
(
GL
.
GL_SRC_ALPHA
,
GL
.
GL_ONE
);
try
{
final
InputStream
textureStream
=
Main
.
class
.
getResourceAsStream
(
"particle.jpg"
);
final
Texture
texture
=
TextureIO
.
newTexture
(
textureStream
,
false
,
null
);
texture
.
enable
(
gl
);
}
catch
(
final
IOException
e
)
{
e
.
printStackTrace
();
}
catch
(
final
GLException
e
)
{
e
.
printStackTrace
();
}
@Override
public
void
reshape
(
GLAutoDrawable
drawable
,
int
x
,
int
y
,
int
_width
,
int
_height
)
{
width
=
_width
;
height
=
_height
;
}
@Override
public
void
reshape
(
GLAutoDrawable
drawable
,
int
x
,
int
y
,
int
_width
,
int
_height
)
{
width
=
_width
;
height
=
_height
;
GL2
gl
=
drawable
.
getGL
().
getGL2
();
gl
.
glViewport
(
0
,
0
,
width
,
height
);
final
GL2
gl
=
drawable
.
getGL
().
getGL2
();
gl
.
glViewport
(
0
,
0
,
width
,
height
);
ratio
=
(
double
)
width
/
(
double
)
height
;
ratio
=
(
double
)
width
/
(
double
)
height
;
}
}
}
);
});
panel
.
add
(
canvas
,
BorderLayout
.
CENTER
);
frame
.
getContentPane
().
add
(
panel
,
BorderLayout
.
CENTER
);
final
FPSAnimator
animator
=
new
FPSAnimator
(
canvas
,
100
);
panel
.
add
(
canvas
,
BorderLayout
.
CENTER
);
frame
.
getContentPane
().
add
(
panel
,
BorderLayout
.
CENTER
);
final
FPSAnimator
animator
=
new
FPSAnimator
(
canvas
,
100
);
frame
.
setDefaultCloseOperation
(
WindowConstants
.
EXIT_ON_CLOSE
);
frame
.
pack
();
frame
.
setVisible
(
true
);
frame
.
setDefaultCloseOperation
(
WindowConstants
.
EXIT_ON_CLOSE
);
frame
.
pack
();
frame
.
setVisible
(
true
);
animator
.
start
();
animator
.
start
();
}
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment