0

OpenGLを学ぶために、Androidで以下のサンプルコードを試しました。しかし、期待される出力が表示されませんでした。問題がどこにあるか指摘してください。

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 Callback メカニズムを使用して 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つのステップを逃しました:

2)。しかし、現在のサーフェスを EGL Context に通知するのを忘れていました。だから、私はこれを作りました。

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

3) サーフェスの swapBuffer. が必要です。私がしたこと

 EGL14.eglSwapBuffers(mEGLDisplay, eglUserSurface);

今、表面の色が緑色に変わっているのがわかります。

今日新しいことを学びました。ありがとう。

于 2015-11-17T08:26:25.530 に答える