本文整理汇总了C++中SkRandom::nextRangeU方法的典型用法代码示例。如果您正苦于以下问题:C++ SkRandom::nextRangeU方法的具体用法?C++ SkRandom::nextRangeU怎么用?C++ SkRandom::nextRangeU使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SkRandom
的用法示例。
在下文中一共展示了SkRandom::nextRangeU方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: test_sampleLocations
void test_sampleLocations(skiatest::Reporter* reporter, TestSampleLocationsInterface* testInterface,
GrContext* ctx) {
SkRandom rand;
SkAutoTUnref<GrRenderTarget> bottomUps[numTestPatterns];
SkAutoTUnref<GrRenderTarget> topDowns[numTestPatterns];
for (int i = 0; i < numTestPatterns; ++i) {
int numSamples = (int)kTestPatterns[i].size();
GrAlwaysAssert(numSamples > 1 && SkIsPow2(numSamples));
bottomUps[i].reset(create_render_target(ctx, kBottomLeft_GrSurfaceOrigin,
rand.nextRangeU(1 + numSamples / 2, numSamples)));
topDowns[i].reset(create_render_target(ctx, kTopLeft_GrSurfaceOrigin,
rand.nextRangeU(1 + numSamples / 2, numSamples)));
}
// Ensure all sample locations get queried and/or cached properly.
GrStencilSettings dummyStencil;
for (int repeat = 0; repeat < 2; ++repeat) {
for (int i = 0; i < numTestPatterns; ++i) {
testInterface->overrideSamplePattern(kTestPatterns[i]);
assert_equal(reporter, kTestPatterns[i],
topDowns[i]->renderTargetPriv().getMultisampleSpecs(dummyStencil), false);
assert_equal(reporter, kTestPatterns[i],
bottomUps[i]->renderTargetPriv().getMultisampleSpecs(dummyStencil), true);
}
}
}
示例2: stream_peek_test
// Asserts that asset == expected and is peekable.
static void stream_peek_test(skiatest::Reporter* rep,
SkStreamAsset* asset,
const SkData* expected) {
if (asset->getLength() != expected->size()) {
ERRORF(rep, "Unexpected length.");
return;
}
SkRandom rand;
uint8_t buffer[4096];
const uint8_t* expect = expected->bytes();
for (size_t i = 0; i < asset->getLength(); ++i) {
uint32_t maxSize =
SkToU32(SkTMin(sizeof(buffer), asset->getLength() - i));
size_t size = rand.nextRangeU(1, maxSize);
SkASSERT(size >= 1);
SkASSERT(size <= sizeof(buffer));
SkASSERT(size + i <= asset->getLength());
if (asset->peek(buffer, size) < size) {
ERRORF(rep, "Peek Failed!");
return;
}
if (0 != memcmp(buffer, &expect[i], size)) {
ERRORF(rep, "Peek returned wrong bytes!");
return;
}
uint8_t value;
REPORTER_ASSERT(rep, 1 == asset->read(&value, 1));
if (value != expect[i]) {
ERRORF(rep, "Read Failed!");
return;
}
}
}
示例3: draw
void draw(SkCanvas* canvas) {
SkRandom random;
SkBitmap bitmap;
bitmap.allocN32Pixels(64, 64);
bitmap.eraseColor(SK_ColorTRANSPARENT);
for (int y = 0; y < 256; y += 64) {
for (int x = 0; x < 256; x += 64) {
SkColor color = random.nextU();
uint32_t w = random.nextRangeU(4, 32);
uint32_t cx = random.nextRangeU(0, 64 - w);
uint32_t h = random.nextRangeU(4, 32);
uint32_t cy = random.nextRangeU(0, 64 - h);
bitmap.erase(color, SkIRect::MakeXYWH(cx, cy, w, h));
canvas->drawBitmap(bitmap, x, y);
}
}
}
示例4: test_memory_pool
static void test_memory_pool(skiatest::Reporter* reporter) {
// prealloc and min alloc sizes for the pool
static const size_t gSizes[][2] = {
{0, 0},
{10 * sizeof(A), 20 * sizeof(A)},
{100 * sizeof(A), 100 * sizeof(A)},
{500 * sizeof(A), 500 * sizeof(A)},
{10000 * sizeof(A), 0},
{1, 100 * sizeof(A)},
};
// different percentages of creation vs deletion
static const float gCreateFraction[] = {1.f, .95f, 0.75f, .5f};
// number of create/destroys per test
static const int kNumIters = 20000;
// check that all the values stored in A objects are correct after this
// number of iterations
static const int kCheckPeriod = 500;
SkRandom r;
for (size_t s = 0; s < SK_ARRAY_COUNT(gSizes); ++s) {
A::SetAllocator(gSizes[s][0], gSizes[s][1]);
for (size_t c = 0; c < SK_ARRAY_COUNT(gCreateFraction); ++c) {
SkTDArray<Rec> instanceRecs;
for (int i = 0; i < kNumIters; ++i) {
float createOrDestroy = r.nextUScalar1();
if (createOrDestroy < gCreateFraction[c] ||
0 == instanceRecs.count()) {
Rec* rec = instanceRecs.append();
rec->fInstance = A::Create(&r);
rec->fValue = static_cast<int>(r.nextU());
rec->fInstance->setValues(rec->fValue);
} else {
int d = r.nextRangeU(0, instanceRecs.count() - 1);
Rec& rec = instanceRecs[d];
REPORTER_ASSERT(reporter, rec.fInstance->checkValues(rec.fValue));
delete rec.fInstance;
instanceRecs.removeShuffle(d);
}
if (0 == i % kCheckPeriod) {
for (int r = 0; r < instanceRecs.count(); ++r) {
Rec& rec = instanceRecs[r];
REPORTER_ASSERT(reporter, rec.fInstance->checkValues(rec.fValue));
}
}
}
for (int i = 0; i < instanceRecs.count(); ++i) {
Rec& rec = instanceRecs[i];
REPORTER_ASSERT(reporter, rec.fInstance->checkValues(rec.fValue));
delete rec.fInstance;
}
#ifdef SK_ENABLE_INST_COUNT
REPORTER_ASSERT(reporter, !A::GetInstanceCount());
#endif
}
}
}
示例5: testTightBoundsLines
static void testTightBoundsLines(PathOpsThreadState* data) {
SkRandom ran;
for (int index = 0; index < 1000; ++index) {
SkPath path;
int contourCount = ran.nextRangeU(1, 10);
for (int cIndex = 0; cIndex < contourCount; ++cIndex) {
int lineCount = ran.nextRangeU(1, 10);
path.moveTo(ran.nextRangeF(-1000, 1000), ran.nextRangeF(-1000, 1000));
for (int lIndex = 0; lIndex < lineCount; ++lIndex) {
path.lineTo(ran.nextRangeF(-1000, 1000), ran.nextRangeF(-1000, 1000));
}
if (ran.nextBool()) {
path.close();
}
}
SkRect classicBounds = path.getBounds();
SkRect tightBounds;
REPORTER_ASSERT(data->fReporter, TightBounds(path, &tightBounds));
REPORTER_ASSERT(data->fReporter, classicBounds == tightBounds);
}
}
示例6: onDraw
void onDraw(const int loops, SkCanvas*) override {
SkRandom r;
C* objects[M];
for (int i = 0; i < loops; i++) {
uint32_t count = r.nextRangeU(0, M-1);
for (uint32_t i = 0; i < count; i++) {
objects[i] = new C;
}
for (uint32_t i = 0; i < count; i++) {
delete objects[i];
}
}
}
示例7: onDraw
virtual void onDraw(SkCanvas* canvas) {
SkRandom r;
A* objects[M];
for (int i = 0; i < N; i++) {
uint32_t count = r.nextRangeU(0, M-1);
for (uint32_t i = 0; i < count; i++) {
objects[i] = new A;
}
for (uint32_t i = 0; i < count; i++) {
delete objects[i];
}
}
}
示例8: RectanizerView
RectanizerView()
: fCurRandRect(0) {
for (int i = 0; i < 3; ++i) {
fRects[i].setReserve(kNumRandRects);
}
fRectLocations.setReserve(kNumRandRects);
SkRandom random;
for (int i = 0; i < kNumRandRects; ++i) {
*fRects[0].append() = SkISize::Make(random.nextRangeU(kMinRectSize, kMaxRectSize),
random.nextRangeU(kMinRectSize, kMaxRectSize));
*fRects[1].append() = SkISize::Make(
GrNextPow2(random.nextRangeU(kMinRectSize, kMaxRectSize)),
GrNextPow2(random.nextRangeU(kMinRectSize, kMaxRectSize)));
*fRects[2].append() = SkISize::Make(128, 128);
*fRectLocations.append() = SkIPoint16::Make(0, 0);
}
fCurRects = &fRects[0];
fRectanizers[0] = new GrRectanizerPow2(kWidth, kHeight);
fRectanizers[1] = new GrRectanizerSkyline(kWidth, kHeight);
fCurRectanizer = fRectanizers[0];
}
示例9: SkQSort_UnitTest
void SkQSort_UnitTest()
{
#ifdef SK_SUPPORT_UNITTEST
int array[100];
SkRandom rand;
for (int i = 0; i < 1000; i++)
{
int j, count = rand.nextRangeU(1, SK_ARRAY_COUNT(array));
for (j = 0; j < count; j++)
array[j] = rand.nextS() & 0xFF;
SkQSort(array, count, sizeof(int), compare_int);
for (j = 1; j < count; j++)
SkASSERT(array[j-1] <= array[j]);
}
#endif
}
示例10: onDelayedSetup
void onDelayedSetup() override {
SkScalar w = SkIntToScalar(fShapesSize.width());
SkScalar h = SkIntToScalar(fShapesSize.height());
fRect.setRect(SkRect::MakeXYWH(-w / 2, -h / 2, w, h));
fOval.setOval(fRect.rect());
fRRect.setNinePatch(fRect.rect(), w / 8, h / 13, w / 11, h / 7);
if (kNone_ShapesType != fInnerShapesType) {
fRect.inset(w / 7, h / 11, &fInnerRect);
fInnerRect.offset(w / 28, h / 44);
fInnerOval.setOval(fInnerRect.rect());
fInnerRRect.setRectXY(fInnerRect.rect(), w / 13, w / 7);
}
SkRandom rand;
fShapes.push_back_n(fNumShapes);
for (int i = 0; i < fNumShapes; i++) {
float pad = sqrtf(static_cast<float>(fShapesSize.width() * fShapesSize.width()) +
static_cast<float>(fShapesSize.height() * fShapesSize.height()));
fShapes[i].fMatrix.setTranslate(0.5f * pad + rand.nextF() * (kBenchWidth - pad),
0.5f * pad + rand.nextF() * (kBenchHeight - pad));
fShapes[i].fMatrix.preRotate(rand.nextF() * 360.0f);
if (fPerspective) {
fShapes[i].fMatrix.setPerspX(0.00015f);
fShapes[i].fMatrix.setPerspY(-0.00015f);
}
fShapes[i].fColor = rand.nextU() | 0xff808080;
}
for (int i = 0; i < fNumShapes; i++) {
// Do this in a separate loop so mixed shapes get the same random numbers during
// placement as non-mixed do.
int shapeType = fShapesType;
if (kMixed_ShapesType == shapeType) {
shapeType = rand.nextRangeU(kRect_ShapesType, kRRect_ShapesType);
}
int innerShapeType = fInnerShapesType;
if (kMixed_ShapesType == innerShapeType) {
innerShapeType = rand.nextRangeU(kRect_ShapesType, kRRect_ShapesType);
}
if (kNone_ShapesType == innerShapeType) {
switch (shapeType) {
using namespace std;
using namespace std::placeholders;
case kRect_ShapesType:
fShapes[i].fDraw = bind(&SkCanvas::drawRect, _1, cref(fRect.rect()), _2);
break;
case kOval_ShapesType:
fShapes[i].fDraw = bind(&SkCanvas::drawOval, _1, cref(fOval.rect()), _2);
break;
case kRRect_ShapesType:
fShapes[i].fDraw = bind(&SkCanvas::drawRRect, _1, cref(fRRect), _2);
break;
}
} else {
const SkRRect* outer;
switch (shapeType) {
case kRect_ShapesType: outer = &fRect; break;
case kOval_ShapesType: outer = &fOval; break;
case kRRect_ShapesType: outer = &fRRect; break;
}
const SkRRect* inner;
switch (innerShapeType) {
case kRect_ShapesType: inner = &fInnerRect; break;
case kOval_ShapesType: inner = &fInnerOval; break;
case kRRect_ShapesType: inner = &fInnerRRect; break;
}
fShapes[i].fDraw = std::bind(&SkCanvas::drawDRRect, std::placeholders::_1,
std::cref(*outer), std::cref(*inner),
std::placeholders::_2);
}
}
}
示例11: onOnceBeforeDraw
void onOnceBeforeDraw() override {
fPaint.setAntiAlias(true);
fPaint.setLCDRenderText(fLCD);
SkISize size = this->getISize();
SkScalar w = SkIntToScalar(size.fWidth);
SkScalar h = SkIntToScalar(size.fHeight);
static_assert(4 == SK_ARRAY_COUNT(fTypefaces), "typeface_cnt");
fTypefaces[0] = sk_tool_utils::create_portable_typeface("sans-serif", SkFontStyle());
fTypefaces[1] = sk_tool_utils::create_portable_typeface("sans-serif",
SkFontStyle::FromOldStyle(SkTypeface::kBold));
fTypefaces[2] = sk_tool_utils::create_portable_typeface("serif", SkFontStyle());
fTypefaces[3] = sk_tool_utils::create_portable_typeface("serif",
SkFontStyle::FromOldStyle(SkTypeface::kBold));
SkRandom random;
for (int i = 0; i < kCnt; ++i) {
int length = random.nextRangeU(kMinLength, kMaxLength);
char text[kMaxLength];
for (int j = 0; j < length; ++j) {
text[j] = (char)random.nextRangeU('!', 'z');
}
fStrings[i].set(text, length);
fColors[i] = random.nextU();
fColors[i] |= 0xFF000000;
fColors[i] = sk_tool_utils::color_to_565(fColors[i]);
static const SkScalar kMinPtSize = 8.f;
static const SkScalar kMaxPtSize = 32.f;
fPtSizes[i] = random.nextRangeScalar(kMinPtSize, kMaxPtSize);
fTypefaceIndices[i] = random.nextULessThan(SK_ARRAY_COUNT(fTypefaces));
SkRect r;
fPaint.setColor(fColors[i]);
fPaint.setTypeface(fTypefaces[fTypefaceIndices[i]]);
fPaint.setTextSize(fPtSizes[i]);
fPaint.measureText(fStrings[i].c_str(), fStrings[i].size(), &r);
// safeRect is set of x,y positions where we can draw the string without hitting
// the GM's border.
SkRect safeRect = SkRect::MakeLTRB(-r.fLeft, -r.fTop, w - r.fRight, h - r.fBottom);
if (safeRect.isEmpty()) {
// If we don't fit then just don't worry about how we get cliped to the device
// border.
safeRect = SkRect::MakeWH(w, h);
}
fPositions[i].fX = random.nextRangeScalar(safeRect.fLeft, safeRect.fRight);
fPositions[i].fY = random.nextRangeScalar(safeRect.fTop, safeRect.fBottom);
fClipRects[i] = r;
fClipRects[i].offset(fPositions[i].fX, fPositions[i].fY);
fClipRects[i].outset(2.f, 2.f);
if (fEffectiveClip) {
fClipRects[i].fRight -= 0.25f * fClipRects[i].width();
}
}
}
示例12: testTightBoundsQuads
static void testTightBoundsQuads(PathOpsThreadState* data) {
SkRandom ran;
const int bitWidth = 32;
const int bitHeight = 32;
const float pathMin = 1;
const float pathMax = (float) (bitHeight - 2);
SkBitmap& bits = *data->fBitmap;
if (bits.width() == 0) {
bits.allocN32Pixels(bitWidth, bitHeight);
}
SkCanvas canvas(bits);
SkPaint paint;
for (int index = 0; index < 100; ++index) {
SkPath path;
int contourCount = ran.nextRangeU(1, 10);
for (int cIndex = 0; cIndex < contourCount; ++cIndex) {
int lineCount = ran.nextRangeU(1, 10);
path.moveTo(ran.nextRangeF(1, pathMax), ran.nextRangeF(pathMin, pathMax));
for (int lIndex = 0; lIndex < lineCount; ++lIndex) {
if (ran.nextBool()) {
path.lineTo(ran.nextRangeF(pathMin, pathMax), ran.nextRangeF(pathMin, pathMax));
} else {
path.quadTo(ran.nextRangeF(pathMin, pathMax), ran.nextRangeF(pathMin, pathMax),
ran.nextRangeF(pathMin, pathMax), ran.nextRangeF(pathMin, pathMax));
}
}
if (ran.nextBool()) {
path.close();
}
}
SkRect classicBounds = path.getBounds();
SkRect tightBounds;
REPORTER_ASSERT(data->fReporter, TightBounds(path, &tightBounds));
REPORTER_ASSERT(data->fReporter, classicBounds.contains(tightBounds));
canvas.drawColor(SK_ColorWHITE);
canvas.drawPath(path, paint);
SkIRect bitsWritten = {31, 31, 0, 0};
for (int y = 0; y < bitHeight; ++y) {
uint32_t* addr1 = data->fBitmap->getAddr32(0, y);
bool lineWritten = false;
for (int x = 0; x < bitWidth; ++x) {
if (addr1[x] == (uint32_t) -1) {
continue;
}
lineWritten = true;
bitsWritten.fLeft = SkTMin(bitsWritten.fLeft, x);
bitsWritten.fRight = SkTMax(bitsWritten.fRight, x);
}
if (!lineWritten) {
continue;
}
bitsWritten.fTop = SkTMin(bitsWritten.fTop, y);
bitsWritten.fBottom = SkTMax(bitsWritten.fBottom, y);
}
if (!bitsWritten.isEmpty()) {
SkIRect tightOut;
tightBounds.roundOut(&tightOut);
REPORTER_ASSERT(data->fReporter, tightOut.contains(bitsWritten));
}
}
}