void OSReleaseMutex(void) { RI_ASSERT(mutexInitialized); mutexRefCount--; RI_ASSERT(mutexRefCount >= 0); int ret = pthread_mutex_unlock(&mutex); RI_ASSERT(ret != EPERM); //assert that the current thread owns the mutex RI_ASSERT(!ret); //check that there aren't more errors RI_UNREF(ret); }
Font::~Font() { //remove references to paths and images for(int i=0;i<m_glyphs.size();i++) clearGlyph(&m_glyphs[i]); RI_ASSERT(m_referenceCount == 0); }
Font::Font(int capacityHint) : m_referenceCount(0), m_glyphs() { RI_ASSERT(capacityHint >= 0); m_glyphs.reserve(capacityHint); }
static bool isBigEndian() { static const RIuint32 v = 0x12345678u; const RIuint8* p = (const RIuint8*)&v; RI_ASSERT (*p == (RIuint8)0x12u || *p == (RIuint8)0x78u); return (*p == (RIuint8)(0x12)) ? true : false; }
void Font::clearGlyph(Glyph* g) { RI_ASSERT(g); if(g->m_path != VG_INVALID_HANDLE) { Path* p = (Path*)g->m_path; if(!p->removeReference()) RI_DELETE(p); } if(g->m_image != VG_INVALID_HANDLE) { Image* p = (Image*)g->m_image; p->removeInUse(); if(!p->removeReference()) RI_DELETE(p); } Glyph a; *g = a; }
void OSAcquireMutex(void) { if(!mutexInitialized) { int ret; pthread_mutexattr_t attr; ret = pthread_mutexattr_init(&attr); //initially not locked RI_ASSERT(!ret); //check that there aren't any errors ret = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); //count the number of recursive locks RI_ASSERT(!ret); //check that there aren't any errors ret = pthread_mutex_init(&mutex, &attr); pthread_mutexattr_destroy(&attr); RI_ASSERT(!ret); //check that there aren't more errors RI_UNREF(ret); mutexInitialized = true; } int ret = pthread_mutex_lock(&mutex); RI_ASSERT(ret != EINVAL); //assert that the mutex has been initialized RI_ASSERT(ret != EAGAIN); //assert that the maximum number of recursive locks hasn't been exceeded RI_ASSERT(ret != EDEADLK); //recursive mutexes shouldn't return this RI_ASSERT(!ret); //check that there aren't other errors RI_UNREF(ret); mutexRefCount++; }
void OSReleaseMutex(void) { RI_ASSERT(mutexInitialized); mutexRefCount--; RI_ASSERT(mutexRefCount >= 0); }
VGContext::VGContext(VGContext* shareContext) : // Mode settings m_matrixMode(VG_MATRIX_PATH_USER_TO_SURFACE), m_fillRule(VG_EVEN_ODD), m_imageQuality(VG_IMAGE_QUALITY_FASTER), m_renderingQuality(VG_RENDERING_QUALITY_BETTER), m_blendMode(VG_BLEND_SRC_OVER), m_imageMode(VG_DRAW_IMAGE_NORMAL), // Scissor rectangles m_scissor(), // Stroke parameters m_strokeLineWidth(1.0f), m_inputStrokeLineWidth(1.0f), m_strokeCapStyle(VG_CAP_BUTT), m_strokeJoinStyle(VG_JOIN_MITER), m_strokeMiterLimit(4.0f), m_inputStrokeMiterLimit(4.0f), m_strokeDashPattern(), m_inputStrokeDashPattern(), m_strokeDashPhase(0.0f), m_inputStrokeDashPhase(0.0f), m_strokeDashPhaseReset(VG_FALSE), // Edge fill color for vgConvolve and pattern paint m_tileFillColor(0,0,0,0, Color::sRGBA), m_inputTileFillColor(0,0,0,0, Color::sRGBA), // Color for vgClear m_clearColor(0,0,0,0, Color::sRGBA), m_inputClearColor(0,0,0,0, Color::sRGBA), m_glyphOrigin(0.0f, 0.0f), m_inputGlyphOrigin(0.0f, 0.0f), m_masking(VG_FALSE), m_scissoring(VG_FALSE), m_pixelLayout(VG_PIXEL_LAYOUT_UNKNOWN), m_filterFormatLinear(VG_FALSE), m_filterFormatPremultiplied(VG_FALSE), m_filterChannelMask(VG_RED|VG_GREEN|VG_BLUE|VG_ALPHA), // Matrices m_pathUserToSurface(), m_imageUserToSurface(), m_glyphUserToSurface(), m_fillPaintToUser(), m_strokePaintToUser(), m_fillPaint(VG_INVALID_HANDLE), m_strokePaint(VG_INVALID_HANDLE), m_colorTransform(VG_FALSE), m_colorTransformValues(), m_inputColorTransformValues(), m_error(VG_NO_ERROR), m_imageManager(NULL), m_pathManager(NULL), m_paintManager(NULL), m_fontManager(NULL), m_maskLayerManager(NULL), m_eglDrawable(NULL) { if(shareContext) { m_imageManager = shareContext->m_imageManager; m_pathManager = shareContext->m_pathManager; m_paintManager = shareContext->m_paintManager; m_fontManager = shareContext->m_fontManager; m_maskLayerManager = shareContext->m_maskLayerManager; } else { try { m_imageManager = RI_NEW(OpenVGRI::ResourceManager<Image>, ()); //throws bad_alloc m_pathManager = RI_NEW(OpenVGRI::ResourceManager<Path>, ()); //throws bad_alloc m_paintManager = RI_NEW(OpenVGRI::ResourceManager<Paint>, ()); //throws bad_alloc m_fontManager = RI_NEW(OpenVGRI::ResourceManager<Font>, ()); //throws bad_alloc m_maskLayerManager = RI_NEW(OpenVGRI::ResourceManager<Surface>, ()); //throws bad_alloc } catch(std::bad_alloc) { RI_DELETE(m_imageManager); RI_DELETE(m_pathManager); RI_DELETE(m_paintManager); RI_DELETE(m_fontManager); RI_DELETE(m_maskLayerManager); throw; } } RI_ASSERT(m_imageManager); RI_ASSERT(m_pathManager); RI_ASSERT(m_paintManager); RI_ASSERT(m_fontManager); RI_ASSERT(m_maskLayerManager); m_imageManager->addReference(); m_pathManager->addReference(); m_paintManager->addReference(); m_fontManager->addReference(); m_maskLayerManager->addReference(); m_inputColorTransformValues[0] = 1.0f; m_inputColorTransformValues[1] = 1.0f; m_inputColorTransformValues[2] = 1.0f; m_inputColorTransformValues[3] = 1.0f; m_inputColorTransformValues[4] = 0.0f; m_inputColorTransformValues[5] = 0.0f; m_inputColorTransformValues[6] = 0.0f; m_inputColorTransformValues[7] = 0.0f; m_colorTransformValues[0] = 1.0f; m_colorTransformValues[1] = 1.0f; m_colorTransformValues[2] = 1.0f; m_colorTransformValues[3] = 1.0f; m_colorTransformValues[4] = 0.0f; m_colorTransformValues[5] = 0.0f; m_colorTransformValues[6] = 0.0f; m_colorTransformValues[7] = 0.0f; }