2010-05-03 41 views
8

Giao diện GLSurfaceView.Renderer của SDK Android cung cấp cho tôi giao diện GL làm thông số có loại GL10. Giao diện này được thực hiện bởi một số lớp trình bao bọc jni nội bộ riêng. Nhưng cũng có GLES10 lớp, nơi tất cả các phương pháp GL có sẵn như là phương pháp tĩnh. Có sự khác biệt quan trọng nào giữa chúng không? Vì vậy, nếu tôi bỏ qua tham số gl của onDrawFrame và thay vào đó sử dụng các phương pháp tĩnh của GLES10 ở khắp mọi nơi?Sự khác biệt giữa GL10 và GLES10 trên Android

Đây là một ví dụ. Thay vì làm điều này:

void onDrawFrame(GL10 gl) 
{ 
    drawSomething(gl); 
} 

void drawSomething(GL10 gl) 
{ 
    gl.glLoadIdentity(); 
    ... 
} 

tôi có thể làm điều này:

void onDrawFrame(GL10 gl) 
{ 
    drawSomething(); 
} 

void drawSomething() 
{ 
    GLES10.glLoadIdentity(); 
    ... 
} 

Ưu điểm là tôi không cần phải vượt qua bối cảnh GL cho tất cả các phương pháp gọi. Nhưng ngay cả khi nó hoạt động (Và nó hoạt động, tôi đã thử nó) Tôi tự hỏi nếu có bất kỳ bất lợi và lý do để không làm điều đó như thế.

Trả lời

6

Tôi đã poking xung quanh trong mã nguồn đang cố gắng để trả lời câu hỏi rất. Theo như tôi có thể nói, cả hai cách gọi thực hiện OpenGL đi đến cùng một cuộc gọi hàm gốc. Tuy nhiên, sự hiểu biết của tôi là việc truy cập phía Java nhanh hơn thông qua các phương thức tĩnh thay vì thông qua phương thức gửi ảo (xem http://developer.android.com/guide/practices/design/performance.html#prefer_static).

Sự cân bằng là bạn hy sinh một số lượng nhất định kiểm tra loại khi truy cập các cuộc gọi chỉ khả dụng trong các phiên bản OpenGL sau. Khi bạn truy cập các cuộc gọi thông qua đối tượng, bạn phải làm một diễn viên đầu tiên, và rằng diễn viên sẽ thất bại nếu phiên bản của GL bạn đang sử dụng không hỗ trợ giao diện. Khi truy cập cuộc gọi thông qua phương pháp tĩnh, tôi nghĩ điều sẽ xảy ra là trạng thái lỗi OpenGL sẽ được thiết lập, có thể khó phát hiện hơn trừ khi bạn đã đặt chế độ gỡ lỗi trên GLSurfaceView.

Hiện tại tôi đang truy cập mọi thứ thông qua các phương pháp tĩnh và tôi sẽ thoát khỏi chế độ gỡ lỗi trong GLSurfaceView cho đến khi mã ổn định, lúc này tôi sẽ tắt nó đi.

  • Kris
Các vấn đề liên quan