2012-08-03 18 views

Trả lời

5

Cho dù trên Android hoặc iPhone, cho một bề mặt OpenGL bạn sẽ có những phương pháp như: onSurfaceCreated và onSurfaceChanged, rơi vào thói quen của đồng phục lấy và thuộc tính ở đây trong 2 phương pháp.

Cách duy nhất bạn có thể làm cho render nhanh hơn (mà sẽ sớm trở thành ưu tiên hàng đầu của bạn khi mã của bạn vượt 1.000 dòng mã) là bởi chỉ có gluseprogram, glbindbuffer, kết cấu liên kết và liên kết khác bên trong phương pháp onDrawFrame, luôn nhớ cache các biến bên trong các trường hợp onSurfaceCreated và onSurfaceChanged

+2

Câu trả lời hay. Các thuộc tính, đồng phục và các biến khác được sử dụng bên trong trình đổ bóng nên được lưu trong các phương thức init() chứ không phải các phương thức draw_Frame(). – divyaSharma

8

Cách nào tốt hơn?

Hãy nghĩ về điều đó. Bất kể nhanh như thế nào glGetUniformLocationglGetAttribLocation, chúng không thể nhanh hơn chỉ tìm nạp biến. Vì vậy, nếu bạn lo ngại về hiệu suất, thì hãy sử dụng phương pháp luôn nhanh hơn.

3

Theo các thử nghiệm của tôi, việc lấy các vị trí đó mất khoảng 100 ~ 200 lần lượng thời gian cần cho một cuộc gọi glDrawElements. Đây chỉ là một ước tính dựa trên System.nanoTime(), nhưng tôi nghĩ rằng nó tiết kiệm để nói rằng nó có giá trị lưu trữ chúng trong các biến trên khởi tạo.

+0

Đây là câu trả lời tốt hơn nhiều. (Tôi hy vọng các dữ liệu là chính xác của khóa học, nhưng tôi có thể tưởng tượng nó là, bởi vì nhận được các thuộc tính là đồng bộ và bản vẽ là không). –

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