03-31-2011 06:22 AM
hi rcmaniac25
is there any new post by christian
in which u hav given the solution.. ??
If there is any post then please provide me the link for that.
as i had tried a lot but got nothing
no solution yet
reet
03-31-2011 06:30 PM
This code works on device and on simulator. Let me know if it works:
import java.nio.*;
import javax.microedition.khronos.egl.*;
import javax.microedition.khronos.opengles.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.system.*;
import net.rim.device.api.opengles.*;
/**
* Rendering a multi color 2-D triangle.
*/
public class RIM2DTri extends FullScreen implements Runnable
{
private EGL11 _egl;
private EGLDisplay _eglDisplay;
private EGLConfig _eglConfig;
private EGLSurface _eglSurface;
private EGLContext _eglContext;
private GL10 _gl;
private Bitmap _offscreenBitmap;
private Graphics _offscreenGraphics;
private FloatBuffer _vertexArray;
private FloatBuffer _colorArray;
private boolean _running;
private boolean _paused;
public RIM2DTri()
{
super(FullScreen.DEFAULT_MENU | FullScreen.DEFAULT_CLOSE);
}
private void initialize()
{
// Get EGL interface
_egl = (EGL11)EGLContext.getEGL();
// Get the EGL display
_eglDisplay = _egl.eglGetDisplay(EGL11.EGL_DEFAULT_DISPLAY);
// Initialize the display for EGL, null since we don't really need the version
_egl.eglInitialize(_eglDisplay, null);
// Choose an EGL config
EGLConfig[] configs = new EGLConfig[1];
int[] numConfigs = new int[1];
int[] attrs =
{
EGL11.EGL_RED_SIZE, 5,
EGL11.EGL_GREEN_SIZE, 6,
EGL11.EGL_BLUE_SIZE, 5,
EGL11.EGL_NONE
};
_egl.eglChooseConfig(_eglDisplay, attrs, configs, 1, numConfigs);
_eglConfig = configs[0];
// Create an EGL window surface
_eglSurface = _egl.eglCreateWindowSurface(_eglDisplay, _eglConfig, this, null);
// Create an EGL context
createEGLContext();
// Specify vertices and colors for a triangle
float[] vertices =
{
-0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f,
0.5f, -0.5f, 0.0f
};
float[] colors =
{
0.0f, 1.0f, 0.0f, 1.0f,
1.0f, 0.0f, 0.0f, 1.0f,
0.0f, 0.0f, 1.0f, 1.0f
};
_vertexArray = ByteBuffer.allocateDirect(3 * 3 * 4).asFloatBuffer();
_vertexArray.put(vertices);
_vertexArray.rewind();
_colorArray = ByteBuffer.allocateDirect(4 * 3 * 4).asFloatBuffer();
_colorArray.put(colors);
_colorArray.rewind();
}
private void createEGLContext()
{
// Create an EGL context
_eglContext = _egl.eglCreateContext(_eglDisplay, _eglConfig, EGL10.EGL_NO_CONTEXT, null);
// Get the GL interface for our new context
_gl = (GL10)_eglContext.getGL();
// Make our new context current
_egl.eglMakeCurrent(_eglDisplay, _eglSurface, _eglSurface, _eglContext);
}
private void destroyEGL()
{
_egl.eglMakeCurrent(_eglDisplay, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_CONTEXT);
_egl.eglDestroyContext(_eglDisplay, _eglContext);
_egl.eglDestroySurface(_eglDisplay, _eglSurface);
}
private void handleContextLost()
{
// Destroy our EGL context
_egl.eglMakeCurrent(_eglDisplay, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_CONTEXT);
_egl.eglDestroyContext(_eglDisplay, _eglContext);
_eglContext = EGL10.EGL_NO_CONTEXT;
// Re-create our EGL context
createEGLContext();
}
/**
* Main render loop.
*/
public void run()
{
initialize();
while (_running)
{
// Idle If we are in the background
if (_paused)
{
synchronized (this)
{
try
{
wait();
}
catch (InterruptedException x) { }
}
}
updateBackBuffer();
renderFrame();
// Throttle cpu usage
try
{
Thread.sleep(20);
}
catch (InterruptedException x) { }
}
destroyEGL();
}
private void renderFrame()
{
// Make our context and surface current and check for EGL_CONTEXT_LOST
if (!_egl.eglMakeCurrent(_eglDisplay, _eglSurface, _eglSurface, _eglContext))
{
if (_egl.eglGetError() == EGL11.EGL_CONTEXT_LOST)
{
handleContextLost();
}
}
// Signal that we are about to begin OpenGL rendering
_egl.eglWaitNative(EGL10.EGL_CORE_NATIVE_ENGINE, _offscreenGraphics);
render(_gl);
// Signal that OpenGL ES rendering is complete
_egl.eglWaitGL();
// Swap the window surface to the display
_egl.eglSwapBuffers(_eglDisplay, _eglSurface);
}
private void render(GL10 gl)
{
// Set our GL viewport
gl.glViewport(0, 0, getWidth(), getHeight());
// Clear the surface
gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// Set our projection matrix
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLUtils.gluPerspective(gl, 45.0f, (float)getWidth()/(float)getHeight(), 0.15f, 10.0f);
// Draw our triangle
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -3.0f);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, _vertexArray);
gl.glColorPointer(4, GL10.GL_FLOAT, 0, _colorArray);
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
}
/**
* Called by the UI system to paint the screen.
*/
protected void paint(Graphics g)
{
if (_offscreenBitmap != null)
{
g.drawBitmap(0, 0, _offscreenBitmap.getWidth(), _offscreenBitmap.getHeight(), _offscreenBitmap, 0, 0);
}
}
/**
* Called when the visibility of our screen changes.
*
* @param visible true if our screen is being made visible,
* false if it's being hidden
*/
protected void onVisibilityChange(boolean visible)
{
if (visible)
{
resume();
}
else
{
pause();
}
}
/**
* Called when the screen is closing.
*/
public void close()
{
_running = false;
synchronized (this) { notifyAll(); }
super.close();
}
/**
* Keeps the back buffer in sync with the screen size.
*/
private void updateBackBuffer()
{
if (_offscreenBitmap != null)
{
if (_offscreenBitmap.getWidth() == getWidth() && _offscreenBitmap.getHeight() == getHeight())
{
return; // no change needed
}
}
_offscreenBitmap = new Bitmap(getWidth(), getHeight());
_offscreenGraphics = Graphics.create(_offscreenBitmap);
}
private void pause()
{
_paused = true;
}
private void resume()
{
if (_running)
{
// Pause the render loop
_paused = false;
synchronized (this) { notifyAll(); }
}
else
{
// Start the render thread.
_running = true;
new Thread(this).start();
}
}
}
04-05-2011 06:33 AM
hi
i tried this code. i just copy paste it and tried to run on 8530 and 9650 simulator which are under simpackage 5.0
but there was no icon found for this application.
I found in downloads folder and in menu also but it was not there.
So u please tell me on which simulator u tried this code and what JDE jdk eclipse version u used??
I tried this code on blackberry JDE plugin 1.3 for eclipse (this plugin is integrated with eclipse workspace) , jdk 6.0 , blackberry JDE 6.0 and 8530, 9650 simulator.
reet
04-06-2011 01:32 AM
I ran this on a 9550 simulator and am running Eclipse Plugin 1.3 and component pack 5.0 and 6.0.
04-06-2011 03:56 AM
hi
i also tried with 9550 simulator on blackberry plugin 1.1
but no application icon founded.
plese tell me how to get this eclipse plugin and is that 9550 simulator was automatically attached with that???
reet
04-08-2011 02:55 PM
It should come automatically with the 5.0 Component pack. As for the plugin, just do a search on the forum about Eclipse plugin 1.3.
Also can you try to consolidate your two threads? They both have the same goal but are being used differently.
04-14-2011 12:55 PM
ya i tried that...
now please tell me the shortest and accurate way to get the blackberry combined with eclipse which should hav the component packs attached and also the the code should also be working on that .
thanks
reet
04-24-2011 10:37 PM
Sorry for the delay. Catching up on threads.
I don't know what I could say, you installed the BB Plugin for Eclipse (ither threads on that) and use the update site to get the component packs. Create a project, copy in the code into a class of the same name, make a main file which creates a new "RIM2DTri" class. Push it onto the display stack and it should work. If it doesn't work then, I don't have a clue.
04-25-2011 12:00 PM
hmm i tried the same and i found that 8530 and 9550 blackberry phones supporting opengl.
But its not working with me.
Anyways.
Thank you very much for your replies :-)
04-25-2011 12:19 PM
Almost forgot, do you have Graphics Acceleration turned off? Having it on causes issues for some people.