我无法使用opengl刷新屏幕

时间:2017-06-13 14:41:21

标签: android opengl-es updates runnable

我尝试学习opengl但是我遇到了一些问题,因为很难找到它的信息。

我可以在屏幕上创建一个表单,但我无法更新屏幕,我尝试了很多东西。

这里我使用runnable但没什么用。

感谢您的帮助,这是我的surfaceView代码

public class MyGLSurfaceView extends GLSurfaceView implements Runnable{
int x1=1440,y1=2560,pub,i=1;

private final MyGLRenderer mRenderer;

public MyGLSurfaceView(Context context) {
    super(context);


    // Create an OpenGL ES 2.0 context.
    setEGLContextClientVersion(2);
    //fix for error No Config chosen, but I don't know what this does.
    super.setEGLConfigChooser(8 , 8, 8, 8, 16, 0);
    // Set the Renderer for drawing on the GLSurfaceView
    mRenderer = new MyGLRenderer();
    setRenderer(mRenderer);

    // Render the view only when there is a change in the drawing data
    setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}

private final float TOUCH_SCALE_FACTOR = 180.0f / 320;
private float mPreviousX;
private float mPreviousY;
public void modif(){
    requestRender();
    try{Thread.sleep(20);}
    catch(Exception e){}}

@Override
public boolean onTouchEvent(MotionEvent e) {
    // MotionEvent reports input details from the touch screen
    // and other input controls. In this case, you are only
    // interested in events where the touch position changed.

    float x = e.getX();
    float y = e.getY();

    switch (e.getAction()) {

        case MotionEvent.ACTION_MOVE:

            float dx = x - mPreviousX;
            float dy = y - mPreviousY;

            // reverse direction of rotation above the mid-line
            if (y > getHeight() / 2) {
                dx = dx * -1 ;
            }

            // reverse direction of rotation to left of the mid-line
            if (x < getWidth() / 2) {
                dy = dy * -1 ;
            }

            mRenderer.setAngle(
                    mRenderer.getAngle() +
                            ((dx + dy) * TOUCH_SCALE_FACTOR));  // = 180.0f / 320
            requestRender();

        case MotionEvent.ACTION_DOWN:
            modif();

    }

    mPreviousX = x;
    mPreviousY = y;
    return true;
}

public void run(){
    while(true){
        modif();
    }
}

}

2 个答案:

答案 0 :(得分:0)

您似乎正在使用Android文档中的教程,对吗?

https://developer.android.com/training/graphics/opengl/touch.html#angle

为了移动形状,您必须在触摸屏幕时移动手指。

你想要完成别的事吗?

答案 1 :(得分:0)

当我再次读取tuto时,我找到了解决方案,我将行setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); I delete the line and now the cpde working.