| Index: skia/sgl/SkAlphaRuns.cpp
|
| ===================================================================
|
| --- skia/sgl/SkAlphaRuns.cpp (revision 16859)
|
| +++ skia/sgl/SkAlphaRuns.cpp (working copy)
|
| @@ -1,185 +0,0 @@
|
| -/* libs/graphics/sgl/SkAlphaRuns.cpp
|
| -**
|
| -** Copyright 2006, The Android Open Source Project
|
| -**
|
| -** Licensed under the Apache License, Version 2.0 (the "License");
|
| -** you may not use this file except in compliance with the License.
|
| -** You may obtain a copy of the License at
|
| -**
|
| -** http://www.apache.org/licenses/LICENSE-2.0
|
| -**
|
| -** Unless required by applicable law or agreed to in writing, software
|
| -** distributed under the License is distributed on an "AS IS" BASIS,
|
| -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -** See the License for the specific language governing permissions and
|
| -** limitations under the License.
|
| -*/
|
| -
|
| -#include "SkAntiRun.h"
|
| -
|
| -void SkAlphaRuns::reset(int width)
|
| -{
|
| - SkASSERT(width > 0);
|
| -
|
| - fRuns[0] = SkToS16(width);
|
| - fRuns[width] = 0;
|
| - fAlpha[0] = 0;
|
| -
|
| - SkDEBUGCODE(fWidth = width;)
|
| - SkDEBUGCODE(this->validate();)
|
| -}
|
| -
|
| -void SkAlphaRuns::Break(int16_t runs[], uint8_t alpha[], int x, int count)
|
| -{
|
| - SkASSERT(count > 0 && x >= 0);
|
| -
|
| -// SkAlphaRuns::BreakAt(runs, alpha, x);
|
| -// SkAlphaRuns::BreakAt(&runs[x], &alpha[x], count);
|
| -
|
| - int16_t* next_runs = runs + x;
|
| - uint8_t* next_alpha = alpha + x;
|
| -
|
| - while (x > 0)
|
| - {
|
| - int n = runs[0];
|
| - SkASSERT(n > 0);
|
| -
|
| - if (x < n)
|
| - {
|
| - alpha[x] = alpha[0];
|
| - runs[0] = SkToS16(x);
|
| - runs[x] = SkToS16(n - x);
|
| - break;
|
| - }
|
| - runs += n;
|
| - alpha += n;
|
| - x -= n;
|
| - }
|
| -
|
| - runs = next_runs;
|
| - alpha = next_alpha;
|
| - x = count;
|
| -
|
| - for (;;)
|
| - {
|
| - int n = runs[0];
|
| - SkASSERT(n > 0);
|
| -
|
| - if (x < n)
|
| - {
|
| - alpha[x] = alpha[0];
|
| - runs[0] = SkToS16(x);
|
| - runs[x] = SkToS16(n - x);
|
| - break;
|
| - }
|
| - x -= n;
|
| - if (x <= 0)
|
| - break;
|
| -
|
| - runs += n;
|
| - alpha += n;
|
| - }
|
| -}
|
| -
|
| -void SkAlphaRuns::add(int x, U8CPU startAlpha, int middleCount, U8CPU stopAlpha, U8CPU maxValue)
|
| -{
|
| - SkASSERT(middleCount >= 0);
|
| - SkASSERT(x >= 0 && x + (startAlpha != 0) + middleCount + (stopAlpha != 0) <= fWidth);
|
| -
|
| - int16_t* runs = fRuns;
|
| - uint8_t* alpha = fAlpha;
|
| -
|
| - if (startAlpha)
|
| - {
|
| - SkAlphaRuns::Break(runs, alpha, x, 1);
|
| - /* I should be able to just add alpha[x] + startAlpha.
|
| - However, if the trailing edge of the previous span and the leading
|
| - edge of the current span round to the same super-sampled x value,
|
| - I might overflow to 256 with this add, hence the funny subtract (crud).
|
| - */
|
| - unsigned tmp = alpha[x] + startAlpha;
|
| - SkASSERT(tmp <= 256);
|
| - alpha[x] = SkToU8(tmp - (tmp >> 8)); // was (tmp >> 7), but that seems wrong if we're trying to catch 256
|
| -
|
| - runs += x + 1;
|
| - alpha += x + 1;
|
| - x = 0;
|
| - SkDEBUGCODE(this->validate();)
|
| - }
|
| - if (middleCount)
|
| - {
|
| - SkAlphaRuns::Break(runs, alpha, x, middleCount);
|
| - alpha += x;
|
| - runs += x;
|
| - x = 0;
|
| - do {
|
| - alpha[0] = SkToU8(alpha[0] + maxValue);
|
| - int n = runs[0];
|
| - SkASSERT(n <= middleCount);
|
| - alpha += n;
|
| - runs += n;
|
| - middleCount -= n;
|
| - } while (middleCount > 0);
|
| - SkDEBUGCODE(this->validate();)
|
| - }
|
| - if (stopAlpha)
|
| - {
|
| - SkAlphaRuns::Break(runs, alpha, x, 1);
|
| - alpha[x] = SkToU8(alpha[x] + stopAlpha);
|
| - SkDEBUGCODE(this->validate();)
|
| - }
|
| -}
|
| -
|
| -#ifdef SK_DEBUG
|
| - void SkAlphaRuns::assertValid(int y, int maxStep) const
|
| - {
|
| - int max = (y + 1) * maxStep - (y == maxStep - 1);
|
| -
|
| - const int16_t* runs = fRuns;
|
| - const uint8_t* alpha = fAlpha;
|
| -
|
| - while (*runs)
|
| - {
|
| - SkASSERT(*alpha <= max);
|
| - alpha += *runs;
|
| - runs += *runs;
|
| - }
|
| - }
|
| -
|
| - void SkAlphaRuns::dump() const
|
| - {
|
| - const int16_t* runs = fRuns;
|
| - const uint8_t* alpha = fAlpha;
|
| -
|
| - SkDebugf("Runs");
|
| - while (*runs)
|
| - {
|
| - int n = *runs;
|
| -
|
| - SkDebugf(" %02x", *alpha);
|
| - if (n > 1)
|
| - SkDebugf(",%d", n);
|
| - alpha += n;
|
| - runs += n;
|
| - }
|
| - SkDebugf("\n");
|
| - }
|
| -
|
| - void SkAlphaRuns::validate() const
|
| - {
|
| - SkASSERT(fWidth > 0);
|
| -
|
| - int count = 0;
|
| - const int16_t* runs = fRuns;
|
| -
|
| - while (*runs)
|
| - {
|
| - SkASSERT(*runs > 0);
|
| - count += *runs;
|
| - SkASSERT(count <= fWidth);
|
| - runs += *runs;
|
| - }
|
| - SkASSERT(count == fWidth);
|
| - }
|
| -#endif
|
| -
|
|
|