Câu trả lời:
Sử dụng VBO thay vì glStart () / glEnd (). Điều này giúp tiết kiệm chu kỳ trong việc chuyển dữ liệu vào bộ nhớ của GPU.
glStart()/glEnd()
.
Đây là từ các tài liệu tham khảo của Apple về OpenGL nhưng mỗi thứ đều có ích phải không? ;)
Tối ưu hóa hiệu suất OpenGL: Cơ bản
tối ưu hóa thông lượng dữ liệu OpenGL trên OS X
(Cái cuối cùng này là một ứng dụng mẫu)
Tối ưu hóa Vertex
Ngoài ra còn có một số lượng lớn video có sẵn về chủ đề (Cũng từ Apple) nói về các tiện ích mở rộng OpenGL. Một số trong số chúng là dành riêng cho OS X, nhưng một số khác thì khái quát hơn và rất có thể được áp dụng cho Windows và Linux.
Bạn có thể tìm thấy các video ở đây . Tuy nhiên, bạn cần có iTunes và tài khoản Apple để xem chúng (nhưng chúng miễn phí !: D)
Chà, nó thực sự, thực sự phụ thuộc vào những gì bạn định làm, nhưng đây là những điều cơ bản:
CPU của bạn rất quý trong khi GPU của bạn là một con thú đói. Bù đắp càng nhiều càng tốt cho GPU. Ngày nay bạn có thể làm điều này với các thư viện tuyệt vời như OpenCL, CUDA và Thrust.
Làm ánh sáng của bạn trong một shader. Điều này không chỉ giúp duy trì sự tỉnh táo của bạn, mà nó còn cho phép bạn làm những điều rất tuyệt vời như đổ bóng toon và chiếu sáng hoãn lại .
Hạt hút. Ngay cả khi sử dụng các sprite điểm OpenGL.
Giảm thiểu thay đổi trạng thái của bạn. Trên rất nhiều nền tảng, mỗi thay đổi trạng thái có khả năng tuôn ra đường ống. Sẽ tốt hơn nhiều khi kết hợp các mặt hàng tương tự lại với nhau và thay đổi trạng thái một lần.
glEnable(GL_CULL_FACES);
Đơn giản một lớp lót áp dụng loại bỏ mặt sau. Điều này là tuyệt vời để cắt giảm số lượng đa giác. Đồng thời xem xét việc loại bỏ Frustum / Oc Loại để giảm số lượng poly.
Một điều khác để xem xét là SIMD cho các vectơ và bậc bốn của bạn (chủ yếu được sử dụng trong xoay camera). Nếu bạn không muốn gây rối với ASM thì hãy xem libSIMD, một thư viện tuyệt vời để xử lý SIMD trong C.
Không sử dụng glGet * khi bạn có thể truy cập các biến cục bộ, ví dụ:
Những cuộc gọi này rất chậm
Di chuyển những thứ không được sử dụng ra bên ngoài mệnh đề glBegin - glEnd (có thể là glColor hoặc glN normal hoặc bất cứ thứ gì khác) nếu nó không thay đổi bên trong. OpenGL là một máy trạng thái, nó sử dụng giá trị cuối cùng.
Giảm thiểu các lệnh OpenGL là chìa khóa. Vì vậy, bạn phải bó tất cả các lệnh vẽ. Đối với các trò chơi 2d, nên sử dụng Altas Texture và vẽ tất cả các họa tiết chia sẻ cùng một kết cấu trong một lệnh opengl.