我在Android中尝试了以下示例代码来学习OpenGL。但我看不到预期的产出。请指出问题出在哪里?
我引用了法登的贡献。
grafika fadden
步骤1:
我已经使用renderHandler创建了renderThread。
public void run() {
Looper.prepare();
mHandler = new RenderHandler(this);
mEconEglCore = new EGLCore(null, EGLCore.FLAG_RECORDABLE);
EGLSurface eglSur = mEconEglCore.createWindowSurface(userSurface);
synchronized (mStartLock) {
mReady = true;
mStartLock.notifyAll();
}
Looper.loop();
}
我在RenderThread构造函数中收到的userSurface。
public RenderThread(Surface surface) {
// Log.d (TAG, "Inside Render Thread..");
userSurface = surface;
}
现在,我在Choreographer回调机制的帮助下调用doFrame()API,只在表面绘制颜色。
GLES20.glLineWidth(3.0f);
GLES20.glClearColor(0.6f, 1.0f, 0.3f, 1.0f);
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
注:应用程序使用TextureView,并以以下方式接收表面。
mytextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
Log.d(TAG, "Surface Texture Available..");
userSurface = new Surface(surface);
问题:
我不确定我是否符合OpenGL编码中正确的过程。此外,我看不到任何颜色显示在表面,但只有黑色。即使我什么都不做,我也做黑色。
请提供意见。还有,让我知道我需要注意的缺失部分?
我想我发现了我犯下的错误。
1) 我已经使用创建或关联了表面到EGL上下文
eglCreateWindowSurface
错过了以下两个步骤:
2) 。但是,我忘了将当前表面告知EGL上下文。所以,我做了这个。
EGL14.eglMakeCurrent(mEGLDisplay, eglUserSurface, eglUserSurface,
mEGLContext);
3) 我们需要把Buffer.of换到水面上。我已经通过完成了
EGL14.eglSwapBuffers(mEGLDisplay, eglUserSurface);
现在,我看到我的表面颜色变成了绿色。
今天学到了一些新东西。谢谢