Search in sources :

Example 6 with RenderingState

use of master.flame.danmaku.danmaku.renderer.IRenderer.RenderingState in project ABPlayer by winkstu.

the class DrawTask method drawDanmakus.

protected RenderingState drawDanmakus(AbsDisplayer<?> disp, DanmakuTimer timer) {
    if (clearRetainerFlag) {
        DanmakusRetainer.clear();
        clearRetainerFlag = false;
    }
    if (danmakuList != null) {
        Canvas canvas = (Canvas) disp.getExtraData();
        DrawHelper.clearCanvas(canvas);
        if (mIsHidden) {
            return mRenderingState;
        }
        long beginMills = timer.currMillisecond - DanmakuFactory.MAX_DANMAKU_DURATION - 100;
        long endMills = timer.currMillisecond + DanmakuFactory.MAX_DANMAKU_DURATION;
        if (mLastBeginMills > beginMills || timer.currMillisecond > mLastEndMills) {
            IDanmakus subDanmakus = danmakuList.sub(beginMills, endMills);
            if (subDanmakus != null) {
                danmakus = subDanmakus;
            } else {
                danmakus.clear();
            }
            mLastBeginMills = beginMills;
            mLastEndMills = endMills;
        } else {
            beginMills = mLastBeginMills;
            endMills = mLastEndMills;
        }
        if (danmakus != null && !danmakus.isEmpty()) {
            RenderingState renderingState = mRenderingState = mRenderer.draw(mDisp, danmakus, mStartRenderTime);
            if (renderingState.nothingRendered) {
                if (renderingState.beginTime == RenderingState.UNKNOWN_TIME) {
                    renderingState.beginTime = beginMills;
                }
                if (renderingState.endTime == RenderingState.UNKNOWN_TIME) {
                    renderingState.endTime = endMills;
                }
            }
            return renderingState;
        } else {
            mRenderingState.nothingRendered = true;
            mRenderingState.beginTime = beginMills;
            mRenderingState.endTime = endMills;
            return mRenderingState;
        }
    }
    return null;
}
Also used : Canvas(android.graphics.Canvas) RenderingState(master.flame.danmaku.danmaku.renderer.IRenderer.RenderingState) IDanmakus(master.flame.danmaku.danmaku.model.IDanmakus)

Example 7 with RenderingState

use of master.flame.danmaku.danmaku.renderer.IRenderer.RenderingState in project ABPlayer by winkstu.

the class DanmakuSurfaceView method drawDanmakus.

@Override
public long drawDanmakus() {
    if (!isSurfaceCreated)
        return 0;
    if (!isShown())
        return -1;
    long stime = System.currentTimeMillis();
    long dtime = 0;
    Canvas canvas = mSurfaceHolder.lockCanvas();
    if (canvas != null) {
        if (handler != null) {
            RenderingState rs = handler.draw(canvas);
            if (mShowFps) {
                if (mDrawTimes == null)
                    mDrawTimes = new LinkedList<Long>();
                dtime = System.currentTimeMillis() - stime;
                String fps = String.format(Locale.getDefault(), "fps %.2f,time:%d s,cache:%d,miss:%d", fps(), getCurrentTime() / 1000, rs.cacheHitCount, rs.cacheMissCount);
                DrawHelper.drawFPS(canvas, fps);
            }
        }
        if (isSurfaceCreated)
            mSurfaceHolder.unlockCanvasAndPost(canvas);
    }
    dtime = System.currentTimeMillis() - stime;
    return dtime;
}
Also used : Canvas(android.graphics.Canvas) RenderingState(master.flame.danmaku.danmaku.renderer.IRenderer.RenderingState) LinkedList(java.util.LinkedList)

Example 8 with RenderingState

use of master.flame.danmaku.danmaku.renderer.IRenderer.RenderingState in project ABPlayer by winkstu.

the class DanmakuTextureView method drawDanmakus.

@Override
public synchronized long drawDanmakus() {
    if (!isSurfaceCreated)
        return 0;
    long stime = System.currentTimeMillis();
    if (!isShown())
        return -1;
    long dtime = 0;
    Canvas canvas = lockCanvas();
    if (canvas != null) {
        if (handler != null) {
            RenderingState rs = handler.draw(canvas);
            if (mShowFps) {
                if (mDrawTimes == null)
                    mDrawTimes = new LinkedList<Long>();
                dtime = System.currentTimeMillis() - stime;
                String fps = String.format(Locale.getDefault(), "fps %.2f,time:%d s,cache:%d,miss:%d", fps(), getCurrentTime() / 1000, rs.cacheHitCount, rs.cacheMissCount);
                DrawHelper.drawFPS(canvas, fps);
            }
        }
        if (isSurfaceCreated)
            unlockCanvasAndPost(canvas);
    }
    dtime = System.currentTimeMillis() - stime;
    return dtime;
}
Also used : Canvas(android.graphics.Canvas) RenderingState(master.flame.danmaku.danmaku.renderer.IRenderer.RenderingState) LinkedList(java.util.LinkedList)

Example 9 with RenderingState

use of master.flame.danmaku.danmaku.renderer.IRenderer.RenderingState in project DanmakuFlameMaster by Bilibili.

the class DrawTask method drawDanmakus.

protected RenderingState drawDanmakus(AbsDisplayer disp, DanmakuTimer timer) {
    if (clearRetainerFlag) {
        mRenderer.clearRetainer();
        clearRetainerFlag = false;
    }
    if (danmakuList != null) {
        Canvas canvas = (Canvas) disp.getExtraData();
        DrawHelper.clearCanvas(canvas);
        if (mIsHidden) {
            return mRenderingState;
        }
        RenderingState renderingState = mRenderingState;
        // prepare screenDanmakus
        long beginMills = timer.currMillisecond - mContext.mDanmakuFactory.MAX_DANMAKU_DURATION - 100;
        long endMills = timer.currMillisecond + mContext.mDanmakuFactory.MAX_DANMAKU_DURATION;
        IDanmakus screenDanmakus = danmakus;
        if (mLastBeginMills > beginMills || timer.currMillisecond > mLastEndMills) {
            screenDanmakus = danmakuList.sub(beginMills, endMills);
            if (screenDanmakus != null) {
                danmakus = screenDanmakus;
            }
            mLastBeginMills = beginMills;
            mLastEndMills = endMills;
        } else {
            beginMills = mLastBeginMills;
            endMills = mLastEndMills;
        }
        // prepare runningDanmakus to draw (in sync-mode)
        IDanmakus runningDanmakus = mRunningDanmakus;
        beginTracing(renderingState, runningDanmakus, screenDanmakus);
        if (runningDanmakus != null && !runningDanmakus.isEmpty()) {
            mRenderingState.isRunningDanmakus = true;
            mRenderer.draw(disp, runningDanmakus, 0, mRenderingState);
        }
        // draw screenDanmakus
        mRenderingState.isRunningDanmakus = false;
        if (screenDanmakus != null && !screenDanmakus.isEmpty()) {
            mRenderer.draw(mDisp, screenDanmakus, mStartRenderTime, renderingState);
            endTracing(renderingState);
            if (renderingState.nothingRendered) {
                if (mLastDanmaku != null && mLastDanmaku.isTimeOut()) {
                    mLastDanmaku = null;
                    if (mTaskListener != null) {
                        mTaskListener.onDanmakusDrawingFinished();
                    }
                }
                if (renderingState.beginTime == RenderingState.UNKNOWN_TIME) {
                    renderingState.beginTime = beginMills;
                }
                if (renderingState.endTime == RenderingState.UNKNOWN_TIME) {
                    renderingState.endTime = endMills;
                }
            }
            return renderingState;
        } else {
            renderingState.nothingRendered = true;
            renderingState.beginTime = beginMills;
            renderingState.endTime = endMills;
            return renderingState;
        }
    }
    return null;
}
Also used : Canvas(android.graphics.Canvas) RenderingState(master.flame.danmaku.danmaku.renderer.IRenderer.RenderingState) IDanmakus(master.flame.danmaku.danmaku.model.IDanmakus)

Example 10 with RenderingState

use of master.flame.danmaku.danmaku.renderer.IRenderer.RenderingState in project DanmakuFlameMaster by Bilibili.

the class DanmakuTextureView method drawDanmakus.

@Override
public synchronized long drawDanmakus() {
    if (!isSurfaceCreated)
        return 0;
    long stime = SystemClock.uptimeMillis();
    if (!isShown())
        return -1;
    long dtime = 0;
    Canvas canvas = lockCanvas();
    if (canvas != null) {
        if (handler != null) {
            RenderingState rs = handler.draw(canvas);
            if (mShowFps) {
                if (mDrawTimes == null)
                    mDrawTimes = new LinkedList<Long>();
                dtime = SystemClock.uptimeMillis() - stime;
                String fps = String.format(Locale.getDefault(), "fps %.2f,time:%d s,cache:%d,miss:%d", fps(), getCurrentTime() / 1000, rs.cacheHitCount, rs.cacheMissCount);
                DrawHelper.drawFPS(canvas, fps);
            }
        }
        if (isSurfaceCreated)
            unlockCanvasAndPost(canvas);
    }
    dtime = SystemClock.uptimeMillis() - stime;
    return dtime;
}
Also used : Canvas(android.graphics.Canvas) RenderingState(master.flame.danmaku.danmaku.renderer.IRenderer.RenderingState) LinkedList(java.util.LinkedList)

Aggregations

RenderingState (master.flame.danmaku.danmaku.renderer.IRenderer.RenderingState)10 Canvas (android.graphics.Canvas)6 LinkedList (java.util.LinkedList)6 IDanmakus (master.flame.danmaku.danmaku.model.IDanmakus)2