4Manuals

  • PDF Cloud HOME

解锁时lockHardwareCanvas比lockCanvas慢 Download

    春季启动-Couchbase AbstractCouchbaseConfiguration-如何避免覆盖不必要的方法 如何在Android中使用WebRTC缩放相机 我不知道(未解决的编译问题:) Android 10,API29:在应用程序文件夹中使用C ++库编写文件会使应用程序崩溃 如何将动态值传递给渐变xml 加载数据并推送到未显示的RecyclerView中 调用Model类的函数时出现java.lang.NullPointerException 字符串数组在for循环中初始化时忽略索引0 从网络加载图像时,“接收到完整的报头之前关闭连接 Spring MVC @ModelAttribute未填充AJAX发布请求

我正在用Java Android制作一个应用程序,并在硬件加速的SurfaceView上进行自定义绘图。在此我使用了很多路径,矩形以及最重要的是使用BlurMaskFilter制作的阴影。在添加大量阴影(我正在绘制尽可能少的阴影)之后,这些帧当然开始下降到60fps以下,我认为可以通过使用surfaceHolder.lockHardwareCanvas();而不是surfaceHolder.lockCanvas();来轻松解决此问题。

问题是:尽管“硬件加速的画布”的渲染时间约为非“硬件加速的”画布的渲染时间的十分之一,但fps的增加幅度几乎不如速度增加所指示的那样快。

也许渲染以外的其他东西会占用时间?在Android Studio Profiler中,似乎surfaceHolder.unlockCanvasAndPost();花费了太多时间(30-100毫秒),这时发生了太多事情,因此帧将迅速下降(仅在HA-Canvas中)。 这意味着HA帧速率通常为60fps,但有时会降至40-45,而非HA则保持稳定的50-55fps。

有人可以告诉我为什么解锁画布会发生这种情况吗?我是在做错什么,还是只需要在屏幕上少画些画? 这是我的SurfaceView绘制方法:

public void draw(DrawMethod drawMethod) {
    canvas = null;

    try {
        if(holder.getSurface().isValid()) {
            canvas = holder.lockHardwareCanvas();
        }
        if(canvas != null) {
            synchronized (holder) {
                drawMethod.draw(canvas);    //Draws everything on screen
            }
        }
    } finally {
        if(canvas != null) {
            holder.unlockCanvasAndPost(canvas);
        }
    }

}

如果还有其他相关的技巧可以确保最佳的绘图性能,我也将不胜感激。我真的在任何地方都找不到任何东西。

尽管我已经编程了一段时间,但是我没有那么丰富的经验,所以如果没有任何意义,请与我一起裸露。 感谢任何人的帮助 -拉斯慕斯

0 个答案:

没有答案



Similar searches
    电子应用程序与光谱测试的简单示例 Swift:为什么我们需要keypath Windows Defender阻止我的愚蠢程序 Samsung SR-L678EV Refrigerator User Manual MVC Web API不接受来自其他MVC客户端的令牌