2010-10-19 39 views
7

Chưa một nhà phát triển, chỉ cần cố gắng tìm hiểu xem một ứng dụng Android có thể làm những gì tôi cần ..Display Kiểm soát Tốc độ làm tươi trên Android Device

Những gì tôi cần:

ứng dụng đơn giản mà sẽ hiển thị một khung hình đầy đủ của một màu duy nhất trên màn hình ở cường độ nhất định ở tần số cố định! Tôi cần nó cho mục đích đồng bộ hóa với độ phân giải cao nhất có thể (đạt được bằng cách thay đổi cường độ trong một mẫu đã biết với tần suất cố định cao nhất có thể).

Tôi có gì thắc mắc:

  1. Có một thiết bị chạy Android với một tần số hiển thị cố định hoặc là có cách nào để thiết lập nó để cố định tần số nói 60fps?

  2. Nếu tần số cố định có thể đạt được, là có một vsync ngắt hoặc một cái gì đó tương tự cho phép tôi thay đổi cường độ trên màn hình vào đúng thời điểm.

  3. Nếu hai điều trên có thể là đạt được, cách tiếp cận nào tôi cần để thực hiện. Tôi nghĩ tôi cần phải nhìn tại OpenGL ES và có lẽ NDK .... thể bất cứ ai xin vui lòng chỉ cho tôi đi đúng hướng ....

Trả lời

9

Tôi mong chờ tốc độ làm tươi được cố định ở cấp phần cứng hoặc trình điều khiển hiển thị. Có an API for finding out what it is, nhưng tôi nghi ngờ nếu bạn có thể đặt nó.

Tôi đã viết một trò chơi có tốc độ khung hình cố định là 40 khung hình/giây. Các kỹ thuật cơ bản là để vẽ tất cả mọi thứ để một bộ đệm off-màn hình ... cái gì đó sẽ xảy ra tự động với GL nhưng phải được thực hiện bằng tay nếu sử dụng Canvas.

Khi hoàn thành công việc đắt tiền và biến chiều dài của cảnh của bạn ngoài màn hình, bạn có thể chặn chuỗi hiển thị của mình (hoặc thực hiện công việc khác) cho đến khi kết thúc. Làm như vậy sẽ đảm bảo mỗi khung hình hiển thị đều nhau. Điều này giúp bạn chuyển động mượt mà với tiền thưởng mà bạn không đốt cháy pin của bạn bằng cách vẽ quá nhiều (một thứ mà rất nhiều ứng dụng dựa trên GL làm cos họ sử dụng RENDERMODE_CONTINUOUSLY vì không có lý do chính đáng).

+0

Cảm ơn bạn rất nhiều Reuben! – Mathias

+0

Cảm ơn bạn rất nhiều vì câu trả lời của bạn Reuben! Nó có ý nghĩa tốt khi màn hình hiển thị ở tần số cố định ở cấp phần cứng và tôi sử dụng getRefreshRate() có thể nhận được tốc độ làm tươi màn hình và sử dụng nó trong đồng bộ hóa của tôi, vì vậy câu hỏi duy nhất còn lại là làm cách nào để biết khi nào màn hình hiển thị đã được hiển thị. Có một vsync ngắt hoặc một cái gì đó tương tự cho tôi để kiểm soát truy cập khung của tôi mà tôi có thể sử dụng trong thế hệ cường độ của tôi? – Mathias

+0

Thật tuyệt khi được gặp một lập trình viên trường cũ, những người nhớ rõ tầm quan trọng của việc làm càng nhiều càng tốt trong khoảng trống dọc ... :) –

0

Mathias,

Vì vậy, nếu bạn muốn đồng bộ hóa với màn hình hiển thị trên android, chỉ cần cho android cho bạn biết khi quan điểm cần phải được rút ra - đó là điều cơ bản nhất một trong những hiện trên Android. Bạn sẽ lấy được một lớp học từ lớp Android được cung cấp cho Android. Bạn sẽ ghi đè lên lớp View onraw() phương thức mà android sẽ gọi mỗi lần xem cần phải được làm mới.

Nếu bạn muốn đảm bảo rằng mỗi khung bạn hiển thị là một khoảng thời gian được xác định trước, thì có thể bạn sẽ muốn thiết lập Chủ đề mới. Trong chuỗi mới, bạn sẽ nhập một vòng lặp thời gian - bắt đầu bằng cách capture System.nanoTime() (tỷ lệ thứ hai của độ phân giải thứ hai) thành một biến, sau đó lặp lại cho đến khi độ dài khung mong muốn của bạn đạt được, sau đó cập nhật biến boolean tĩnh chung. Boolean tĩnh toàn cục này có thể được kiểm tra trong phương thức onDraw() của bạn để xác định khi nào là thời gian để thay đổi cường độ.

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