Tôi có một ứng dụng Android sử dụng GLES để hiển thị. Hiện đang sử dụng Java để hiển thị nội dung và việc hiển thị là tốt. Do giới hạn trong bộ nhớ ứng dụng Java của Android, tôi dự định tích hợp hiển thị gốc vào mã dựng hình Java của tôi.Hiển thị OpenGLES Android bằng C++ và Java
Để làm điều này, tôi đã làm theo hướng dẫn GLES gốc cơ bản. Sau khi tích hợp, hiển thị Java không hiển thị, chỉ những thứ tôi render trong C++ mới được nhìn thấy.
Phiên bản mã đơn giản nhất là: https://github.com/khedd/JavaCppGLES Mã Java hiển thị hình tam giác, C++ hiển thị Quad. Nếu cả hai được gọi là Quad là renderer.
Tôi làm cách nào để giải quyết vấn đề này? Tôi có nên chuyển mọi thứ sang C++ không?
Viết tóm lại.
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();
}
Bạn đã làm điều này vì "lý do bộ nhớ"? Tại sao bạn mong đợi điều này sẽ sử dụng ít bộ nhớ hơn? Ngoài ra, có khả năng các cuộc gọi C++ và Java OpenGL của bạn đang diễn ra trên các luồng khác nhau, nhưng, không có bất kỳ mã hoặc ý tưởng nào về vòng lặp giữa Java và C++, sẽ rất khó để đưa ra lời khuyên. – MuertoExcobito
nó sẽ không sử dụng ít bộ nhớ nhưng trong bản địa tôi có thể sử dụng nhiều không gian hơn. Ngoài ra bạn là đúng tôi sẽ cố gắng cung cấp một mã mẫu vào ngày mai. Tôi khá chắc chắn rằng họ đang trên cùng một chủ đề trong cuộc gọi drawFrame của java. – Hakes