0

我已经尝试在 Android 中使用以下示例代码来学习 OpenGL。但我看不到预期的输出。请指出问题出在哪里?

我使用了 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 编码中的正确程序保持一致。此外,我没有看到表面显示任何颜色,而只有黑色。即使我什么都不做,我也会做黑色。

请提供输入。另外,让我知道我需要注意的缺失部分?

4

1 回答 1

0

我想我发现了我所犯的错误。

1) 我通过使用创建了表面或将表面关联到 EGL 上下文

   eglCreateWindowSurface

错过了以下两个步骤:

2)。但是,我忘记将当前表面通知给 EGL 上下文。所以,我做了这个。

 EGL14.eglMakeCurrent(mEGLDisplay, eglUserSurface, eglUserSurface,
            mEGLContext);

3)我们需要swapBuffer.of表面。我所做的

 EGL14.eglSwapBuffers(mEGLDisplay, eglUserSurface);

现在,我看到我的表面颜色已变为绿色。

今天学到了新东西。谢谢。

于 2015-11-17T08:26:25.530 回答