java - 在使用 OpenGL-ES、JNI 和 C++ 的 Android 上,帧似乎乱序了

标签 java android c++ opengl-es java-native-interface

我制作了一个 Android 应用程序,其中我在 JNI 上使用 OpenGL-ES 2.0 和 C++ 渲染所有内容,除了一件事外,它一切正常。渲染缓冲区似乎以某种方式出现了困惑,图像看起来像是拖着阴影。不知何故就像运动模糊,我不知道是什么原因造成的。

我只创建了一个带有 GLSurfaceView 的 Activity,该 Activity 有一个 Renderer 类,其中包含用于绘制的渲染调用。是什么导致了这种奇怪的行为?

创建万物的 Java 代码(减去一些不相关的东西)如下所示:

public class Main extends Activity  
{   static  MainLoop    mloop   = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {   super.onCreate(savedInstanceState);
        mloop = new MainLoop()
        setContentView(mloop);
    }
    .
    .
    .
}

呈现的 Java 代码如下所示(再次减去一些不相关的东西):

public class MainLoop extends GLSurfaceView
{   .
    .
    public MainLoop()
    {   super(parent);
        setEGLContextClientVersion(2);
        setEGLConfigChooser(8, 8, 8, 8, 0, 0)
        //
        this.getHolder().setFormat(PixelFormat.TRANSLUCENT);
        //
        setRenderer(new Renderer());        
    }
    .
    .

    private static class Renderer implements GLSurfaceView.Renderer 
    {   public void onDrawFrame(GL10 gl)
        {   JNIRender();
        }
        public void onSurfaceChanged(GL10 gl, int width, int height)
        {   JNIChanged();   
        }
        public void onSurfaceCreated(GL10 gl, EGLConfig config)
        {   JNICreate();
        }
    }
}

整个渲染是通过 C++ 中的 JNIRender 调用完成的,看起来很好,除了乱序的东西,所有东西看起来都好像拖着阴影。有什么我必须考虑的或者我做错了什么吗?

最佳答案

只是一个大胆的猜测,但是您是否在绘制任何内容之前清除了缓冲区?

在你的 C++ 代码中,在你绘制任何东西之前使用它:

glClearColor(0,0,0,1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BIT);

关于java - 在使用 OpenGL-ES、JNI 和 C++ 的 Android 上,帧似乎乱序了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9511186/

相关文章:

c++ - 返回 std::vector 时不调用复制构造函数

java - 这个链表有什么问题?

java - Maven 显示 JAR 包含错误并且不运行 selenium 验收测试

android - 谷歌街景: Conversion between FOV and Zoom

android - 将 Android 自动完成中的选择转换为字符串

c++ - std::runtime_error 是否复制构造函数中传递的字符串?

java - 自定义权限评估器 Spring

java - 从 viewpager 适配器设置页面标题后,页面标题不会出现在 ViewPager 中

Android:SwipeListView 点击

C++ 字符串匹配和替换使用查找文件