Mam aplikację na Androida, która używa GLES do renderowania. Obecnie używa Java do renderowania rzeczy, a renderowanie jest w porządku. Z powodu ograniczeń w pamięci aplikacji Java w Javie planuję zintegrować natywne renderowanie z moim kodem renderującym Java.Android OpenGLES Renderowanie za pomocą C++ i Java
Aby to zrobić, postępowałem zgodnie z podstawowymi samouczkami podręcznika GLES. Po integracji, renderowanie w Javie nie było widoczne, widoczne były tylko te elementy, które renderuję w C++.
Najprostszą wersją kodu jest: https://github.com/khedd/JavaCppGLES Kod Java renderuje trójkąt, C++ oznacza Quad. Jeśli oba są wywoływane, tylko Quad jest rendererem.
Jak mogę rozwiązać ten problem? Czy powinienem przenieść wszystko na C++?
Kod w pigułce.
MyGLRenderer(){
mTriangle = new Triangle();
mCppRenderer = new MyCppRenderer();
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
gl.glClearColor(1.0f, 0.0f, 1.0f, 1.0f);
//init java triangle
mTriangle.init();
//init c quad
mCppRenderer.init(); //comment this line to make java triangle appear
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
}
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
mTriangle.draw();
mCppRenderer.draw();
}
Zrobiłeś to dla "powodów pamięci"? Dlaczego spodziewasz się, że to będzie zużywać mniej pamięci? Prawdopodobnie twoje wywołania C++ i Java OpenGL dzieją się na różnych wątkach, ale bez żadnego kodu lub idei iteropu między Javą i C++ trudno będzie ci doradzić. – MuertoExcobito
to nie będzie zużywać mniej pamięci, ale w natywnym mogę użyć więcej miejsca. Również masz rację, postaram się dostarczyć jutro przykładowy kod. Jestem całkiem pewien, że są one w tym samym wątku w ramach wywołania drawFrame języka Java. – Hakes