使用OpenGL ES、JNI和C++的安卓系统上的框架似乎出现了问题
Frames seem out of order on Android with OpenGL-ES, JNI and C++
我制作了一个Android应用程序,在该应用程序中,我通过JNI使用OpenGL ES 2.0和C++渲染所有内容,除一件事外,一切都很好。"渲染缓冲区"似乎不知怎么出了问题,图像看起来像是在跟踪一个阴影。不知怎么的,就像运动模糊,我不知道是什么原因造成的。
我只使用GLSurfaceView创建一个"活动",该活动具有渲染器类,绘图的渲染调用位于该类中。是什么导致了这种奇怪的行为?
创建所有东西的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);
我检查了一下,发现我的c++代码中有一个swapbuffer命令,在java中使用时很糟糕,因为缓冲区无论如何都是自动显示的,这会混淆事情。
我将swapbuffer命令封装在一个ifdef中,在使用gcc编译时从未使用过它。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 任何性能问题都在qt框架中使用了stackedwidget的最大页面数
- ofxFaceTracker(开放框架)示例的问题
- 尝试在Qt中获取自定义窗口框架时LNK2019问题
- 使用OpenGL ES、JNI和C++的安卓系统上的框架似乎出现了问题
- powerpc Maliit框架交叉编译问题
- "COM-like"框架解决了哪些问题?
- 如何避免juice框架和OpenCV之间的干扰命名空间问题
- 虚幻引擎中的四元数旋转框架问题
- 从c++到c# . net紧凑框架结构转换中的问题
- Catch测试框架问题:不能使用Catch::Session()