私はいくつかのシェーダを読み込み、公式NDKを使ってアンドロイドGLSurfaceViewとC++でhello world triangleをレンダリングしようとしています。しかし、私はエラー "現在のコンテキストなしでOpenGL ES APIを呼び出す"を取得します。ここに私の単純な単一のファイルjavaはgoogle's tutorialからサイドコンテキスト作成コード(これはプロジェクト全体で唯一のJavaコードであることに注意)です:NDKを使うどれもAndroid gln現在のコンテキスト
class GLESRenderer implements GLSurfaceView.Renderer
{
static {
System.loadLibrary("native_code");
}
private native void ntInit();
private native void ntRender();
private native void ntUpdateScreen(int width, int height);
public void onSurfaceCreated(GL10 unused, EGLConfig config) {
ntInit(); // LOAD SHADERS AND VBO DATA!!!!
}
public void onDrawFrame(GL10 unused) {
ntRender(); // DRAW USING SHADERS AND VBO DATA!!!!
}
public void onSurfaceChanged(GL10 unused, int width, int height) {
ntUpdateScreen(width, height); // UPDATE SCREEN!!!
}
}
class GLES_SurfaceView extends GLSurfaceView {
private final GLESRenderer mRenderer;
public GLES_SurfaceView(Context context){
super(context);
setEGLContextClientVersion(2);
mRenderer = new GLESRenderer();
setRenderer(mRenderer);
}
}
public class Main extends Activity {
private GLSurfaceView mGLView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGLView = new GLES_SurfaceView(this);
if(Build.VERSION.SDK_INT < 16) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
} else {
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
ActionBar bar = getActionBar();
if(bar != null)
bar.hide();
}
setContentView(mGLView);
}
}
他の多くのスタックオーバーフローに関する質問(ので、彼らはありますおそらく異なる問題)は、これがスレッドの問題であることを示唆していますが、このコードはGLSurfaceView.Rendererのネイティブ関数を明示的に呼び出しているため、これはスレッドの問題ではないと確信しています。
さらに、複数のチュートリアルでは、openglとNDKを使用してレンダリングするのと同じアプローチを使用しています。たとえば、Intel's tutorial、およびlearnopengles's tutorialです。
したがって、私は
私の投稿をdownvoteしようとしている場合、私は私の質問を改善する方法についてのいくつかのフィードバックを残してみませんか?私はこの話題を自分の能力の最大限に徹底的に研究しました。寝袋に入れないでください。 – Jas
コードからエラーが発生していることを確認しましたか?私は、これらのエラーメッセージは、あなたが行った呼び出しに何のつながりもなくログに表示されることがあり、無害であると思います。問題を絞り込むために、私は透明色を黒以外に設定し、Javaコードに 'glClear()'呼び出しを入れます。これにより、コンテキストの作成が正常に行われたことが確認されます。 –
@RetoKoradiはい私はプロジェクトのndk側でglClearColorsを使ってglClearを実行しましたが、それは完璧に実行されました!だから多分あなたは正しいです、そして、それはちょうど役に立たないエラーであり、私の問題は他のところにあります。チップをありがとう、他の部分を調べる。 – Jas