2012-04-01 46 views
16

Tôi đang cố gắng sử dụng tăng tốc phần cứng cho Android bằng canvas của mình. Tôi đã từng có SurfaceView mà tôi đã làm lockCanvas() để lấy canvas mà sau này tôi vẽ lên, nhưng tôi đã đổi thành TextureView vì tôi không thể nhận được SurfaceView để sử dụng tăng tốc phần cứng. Tôi hiện đang cố gắng để có được vải này để sử dụng tăng tốc phần cứng.Tăng tốc phần cứng TextureView của Android với lockCanvas()

Canvas canvas = this.lockCanvas(); 
System.out.println(this.isHardwareAccelerated() + ", " + canvas.isHardwareAccelerated()); 

Cung cấp cho tôi đầu ra: true, false (this là một TextureView)

Có ai biết lý do tại sao canvas không phần cứng tăng tốc, và làm thế nào để làm cho nó như vậy?

Chỉnh sửa: Theo như tôi đã tìm thấy, có vẻ như tôi phải sử dụng OpenGL. Tuy nhiên, tôi vẫn muốn biết nếu có bất kỳ kế hoạch nào được công bố để tăng tốc phần cứng có thể cho một canvas như vậy.

+0

Bạn nên bật tăng tốc phần cứng cho hoạt động của mình: http://developer.android.com/guide/topics/manifest/activity-element.html#hwaccel. –

+0

Bạn có thể kiểm tra trong http://developer.android.com/guide/topics/graphics/hardware-accel.html. Tôi không biết đây có phải là câu trả lời không. Bởi vì nó nói rằng kiểm tra Canvas.isHardwareAccelerated có thể được sử dụng trong Canvas.onDraw. – e7fendy

Trả lời

5

Kiểm tra bài viết Hardware Acceleration.

Về cơ bản nếu bạn muốn bạn TextureView là phần cứng tăng tốc, bạn phải chắc chắn rằng khả năng tăng tốc phần cứng được kích hoạt ở mức độ nào trong bối cảnh TextureView của bạn, tức là một trong những cách sau:

  • Ở cấp độ ứng dụng: <application android:hardwareAccelerated="true" ...>
  • Ở cấp độ hoạt động: <activity android:hardwareAccelerated="true" />
  • Ở cấp độ cửa sổ:

getWindow().setFlags( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

Lưu ý rằng tăng tốc phần cứng thực sự là bắt buộc phải sử dụng một TextureView:

TextureView chỉ có thể được sử dụng trong một cửa sổ phần cứng tăng tốc. Khi kết xuất trong phần mềm, TextureView sẽ không vẽ gì cả.

+0

Câu trả lời tuyệt vời, cảm ơn bạn. – Sipty

9

TextureView chỉ hoạt động khi ứng dụng là phần cứng tăng tốc, nhưng Canvas nó trả về từ lockCanvas() hiện bao giờ phần cứng tăng tốc. Điều này có nghĩa là bạn sẽ vẽ bên trong phần mềm Canvas của TextureView trong phần mềm, nhưng TextureView chính nó sẽ được vẽ bằng cách sử dụng GPU. Hiện tại, cách duy nhất để có Canvas tăng tốc phần cứng là sử dụng phương thức Chế độ xem onDraw(Canvas).

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