mouse responsiveness with AWTGL renderer?

Started by slenkar, June 01, 2009, 04:59:46 PM

Previous topic - Next topic

slenkar

Has anyone noticed a lack of mouse-button responsiveness with the AWTGL renderer?
The mouse movements and keyboard work fine but the mouse button isnt always registered.

EgonOlsen

No idea. jPCT doesn't do anything with the mouse...it's all done by LWJGL. You may try to add a Thread.yield() or Thread.sleep(1) to your main loop and/or implement an IPaintListener and add the yield/sleep in either before- or afterPainting-method, but that's just a wild guess...i've no idea if it helps.

slenkar

Im using AWT to handle mouse and keyboard events ,is this the reason?

When I use Lwjgl to handle events the screen goes blank, is there a different renderer that allows lwjgl mouse handling?

EgonOlsen

Depends on your needs. If you need AWT/Swing integration, you have to use the AWTGLRenderer and the AWT events for mouse and keyboard. If you don't need that, you can use the native GLRenderer instead. There's a HelloWorld for this one too.
You can't use LWJGL's mouse and keyboard implementations with the AWTGLRenderer. One last option, if nothing else helps, is to use the JOGL-renderer instead.

EgonOlsen

Quote from: slenkar on June 01, 2009, 04:59:46 PM
The mouse movements and keyboard work fine but the mouse button isnt always registered.
If the movements work fine, i would expect the buttons to be responsive too. Are you 100% sure that it's not your code's fault? Do you have a simple test case that shows the problem? Maybe it's related to your machine only somehow!?

slenkar

I did some tests and realised it happens when moving the mouse and pressing the button at the same time.


import com.threed.jpct.*;

//import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.KeyListener;
//import java.awt.Insets;
import javax.swing.JFrame;

public class mousebutton extends JFrame implements MouseListener,
MouseMotionListener,KeyListener {
public static World world;
private FrameBuffer buffer;
public JFrame frame;
   
public void keyPressed(KeyEvent e)
{}

public void keyTyped(KeyEvent e)
{
if (e.getKeyCode()==KeyEvent.VK_A)
{
//System.out.println("typed a");
}
//nothing
}
public void keyReleased(KeyEvent e)
{
if (e.getKeyCode()==KeyEvent.VK_W)
{
    //System.out.println("released a");
}
//nothing
}

public static void main(String[] args) throws Exception {
new mousebutton().loop();
}

public void mouseEntered( MouseEvent e ) {}
    public void mouseExited( MouseEvent e ) {}
    public void mouseReleased( MouseEvent e ){
   
    System.out.println("mouse released");
    }
    public void mouseClicked( MouseEvent e ){
   
    System.out.println("mouse clicked");
    }
    public void mousePressed( MouseEvent e )
    {
     
      }



  public void mouseMoved( MouseEvent e ) {
 
        int x = e.getX();
        int y = e.getY();
 
  }
    public void mouseDragged( MouseEvent e )
    {
   
        // get the mouse's coordinates:

    }


public mousebutton() throws Exception {

frame=new JFrame("Hello world");
frame.setSize(800, 600);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
}



private void loop() throws Exception {
FrameBuffer buffer = new FrameBuffer(800, 600, FrameBuffer.SAMPLINGMODE_NORMAL);
Canvas canvas=buffer.enableGLCanvasRenderer();
buffer.disableRenderer(IRenderer.RENDERER_SOFTWARE);
frame.add(canvas);
canvas.addMouseListener( this );
        canvas.addMouseMotionListener( this );
        canvas.addKeyListener(this);
while (frame.isShowing()) {


buffer.clear(java.awt.Color.BLACK);
world.renderScene(buffer);
world.draw(buffer);
buffer.update();
buffer.displayGLOnly();

canvas.repaint();

//Bullet.update_bullets();
Thread.sleep(10);
//System.out.println(Mouse.getDX());
}
//buffer.disableRenderer(IRenderer.RENDERER_OPENGL);
// buffer.dispose();
frame.dispose();
System.exit(0);
}

}


notice only mouse release events are generated, when moving the mouse

EgonOlsen

I would say that this is correct behaviour. When pressing at x and releasing at y, it's not a click, because you haven't clicked on something. Compare mousePressed() to mouseReleased() instead and you'll see that both events will be fired no matter if you drag the mouse or not.

slenkar

ah ok thanks,

I switched to the normal gl renderer in the end

Ill keep that in mind if i have to switch back for some reason.