bool VisualTextureContainer::initWithStyledString(VisualStyledString& styledString) { this->releaseTextureData(); bool success = true; const VisualString* aVisualString = &(styledString); VisualStringStyle& stringStyle = styledString.getStyle(); if (aVisualString->getNumberOfCharacters() == 0) { return false; } VisualGraphics* theVisualGraphics = VisualGraphics::getInstance(); uint32 maxPixelWidth = theVisualGraphics->getCanvasPixelWidth(); uint32 maxPixelHeight = theVisualGraphics->getCanvasPixelHeight(); this->textureName = theVisualGraphics->getNextFreeTextureName(); this->aTextureIsSet = true; VisualTextureContainer::textureRefCountMap[this->textureName] = 1; this->useRectExtension = theVisualGraphics->canUseTextureRectExtension(); #if TARGET_OS_MAC char alignmentStr[32]; switch (stringStyle.horizontalAlignment) { case (kLeftAligned): strcpy(alignmentStr, "left"); break; case(kCenterAligned): strcpy(alignmentStr, "center"); break; case(kRightAligned): strcpy(alignmentStr, "right"); break; default: break; } success = getDimensionsOfCocoaStringBitmap((void*)aVisualString, (void*)&stringStyle, &(this->imageRect.width), &(this->imageRect.height), maxPixelWidth, maxPixelHeight, alignmentStr); if (!success) { return success; } if (this->useRectExtension == false) { this->textureRect.width = theVisualGraphics->power2Ceiling(this->imageRect.width); this->textureRect.height = theVisualGraphics->power2Ceiling(this->imageRect.height); } else { this->textureRect.width = this->imageRect.width; this->textureRect.height = this->imageRect.height; } PixelColor* pixelBuffer = (uint32*)calloc(this->textureRect.width * this->textureRect.height, sizeof(uint32)); success = getCocoaStringBitmapData((void*)&styledString, this->textureRect.width, this->textureRect.height, alignmentStr, &(pixelBuffer)); success = theVisualGraphics->copyARGBBitmapDataToTexture(this->textureName, this->textureRect.width, this->textureRect.height, this->useRectExtension, const_cast<const uint32**>(&(pixelBuffer))); #endif #if TARGET_OS_WIN wchar_t* stringValueRef = (wchar_t*)(styledString.getCharactersPointer()); uint8 red = (uint8)(stringStyle.fontColor.r * 255.0f); uint8 green = (uint8)(stringStyle.fontColor.g * 255.0f); uint8 blue = (uint8)(stringStyle.fontColor.b * 255.0f); if (!stringValueRef) { success = false; return success; } success = theVisualGraphics->makeTextureOfStringWin(stringValueRef, styledString.getNumberOfCharacters(), this->textureName, this->textureRect.width, this->textureRect.height, this->imageRect.width, this->imageRect.height, stringStyle.fontNameStr, (uint16)stringStyle.fontSize, red, green, blue, stringStyle.horizontalAlignment, maxPixelWidth, maxPixelHeight); #endif if (this->useRectExtension == false) { this->logicalSize.width = (double)this->imageRect.width / (double)this->textureRect.width; this->logicalSize.height = (double)this->imageRect.height / (double)this->textureRect.height; } else { this->logicalSize.width = (double)this->textureRect.width; this->logicalSize.height = (double)this->textureRect.height; } return success; }
void monitorRenderMessageProcess() { static float framesPerSecond = 0.0f; static uint16 frameCount = 0; uint32 elapsedMilliseconds = 0; uint32 remainingMilliseconds = 0; VisualPlayerState* theVisualPlayerState = NULL; VisualGraphics* theVisualGraphics = NULL; uint8 playState; char cStr64[64]; theVisualPlayerState = VisualPlayerState::getInstance(); elapsedMilliseconds = VisualTiming::getElapsedMilliSecsSinceReset("fps"); if (elapsedMilliseconds > 1000) { framesPerSecond = (float)frameCount / (float)elapsedMilliseconds * 1000.0f; frameCount = 0; VisualTiming::resetTimestamp("fps"); } frameCount++; sprintf(cStr64, "%.2f", framesPerSecond); setProcessInfo("FramesPerSecond", cStr64); theVisualGraphics = VisualGraphics::getInstance(); setProcessInfo("RendererName",theVisualGraphics->getRendererName()); setProcessInfo("RendererVendor",theVisualGraphics->getRendererVendor()); setProcessInfo("RendererVersion",theVisualGraphics->getRendererVersion()); sprintf(cStr64, "%#x", theVisualGraphics->getGLVersion()); setProcessInfo("GLVersion", cStr64); sprintf(cStr64, "%ld", theVisualGraphics->getMaxTextureSize()); setProcessInfo("Maximum Texture Size", cStr64); // screen measurements PixelRect screenRect = theVisualGraphics->getScreenRect(); sprintf(cStr64, "width: %d, height: %d, refreshRate: %d", screenRect.width, screenRect.height, theVisualGraphics->getRefreshRateOfScreen()); setProcessInfo("Screen", cStr64); sprintf(cStr64, "%d", theVisualGraphics->getBitsPerPixelOfScreen()); setProcessInfo("BitsPerPixel", cStr64); sprintf(cStr64, "%d", theVisualGraphics->getCanvasPixelHeight()); setProcessInfo("CanvasPixelHeight", cStr64); sprintf(cStr64, "%d", theVisualGraphics->getCanvasPixelWidth()); setProcessInfo("CanvasPixelWidth", cStr64); BottomLeftPositionedPixelRect theCanvasRect; theCanvasRect = theVisualGraphics->getCanvasRect(); sprintf(cStr64, "bottom: %d, left: %d", theCanvasRect.bottomLeftPixel.y, theCanvasRect.bottomLeftPixel.x); setProcessInfo("CanvasRectTopLeft", cStr64); sprintf(cStr64, "width: %d, height: %d", theCanvasRect.pixelRect.width, theCanvasRect.pixelRect.height); setProcessInfo("CanvasRectWidthHeight", cStr64); /* sprintf(cStr64, "top: %.2f, left: %.2f", theVisualGraphics->getMaxTopCoordOfCanvas(), theVisualGraphics->getMaxLeftCoordOfCanvas()); setProcessInfo("CoordMaxTopLeft", cStr64); sprintf(cStr64, "bottom: %.2f, right: %.2f", theVisualGraphics->getMaxBottomCoordOfCanvas(), theVisualGraphics->getMaxRightCoordOfCanvas()); setProcessInfo("CoordMaxBottomRight", cStr64); sprintf(cStr64, "near: %.2f, far: %.2f", theVisualGraphics->getMaxNearCoordOfCanvas(), theVisualGraphics->getMaxFarCoordOfCanvas()); setProcessInfo("CoordMaxNearFar", cStr64); */ BottomLeftPositionedPixelRect bottomLeftPositionedPixelRect = theVisualGraphics->getViewportRect(); sprintf(cStr64, "bottom: %d, left: %d, width: %d, height: %d", bottomLeftPositionedPixelRect.bottomLeftPixel.y, bottomLeftPositionedPixelRect.bottomLeftPixel.x, bottomLeftPositionedPixelRect.pixelRect.width, bottomLeftPositionedPixelRect.pixelRect.height); setProcessInfo("ViewportRect", cStr64); playState = theVisualPlayerState->getAudioPlayState(); switch (playState) { case kAudioIsPlaying: sprintf(cStr64, "kAudioIsPlaying"); break; case kAudioPlayStarted: sprintf(cStr64, "kAudioPlayStarted"); break; case kAudioPlayResumed: sprintf(cStr64, "kAudioPlayResumed"); break; case kAudioPlayPaused: sprintf(cStr64, "kAudioPlayPaused"); break; case kAudioIsNotPlaying: sprintf(cStr64, "kAudioIsNotPlaying"); break; default: sprintf(cStr64, "unknown"); } setProcessInfo("AudioPlayState", cStr64); elapsedMilliseconds = theVisualPlayerState->getElapsedAudioTime(); sprintf(cStr64, "%d", elapsedMilliseconds); setProcessInfo("TrackTimeElapsed", cStr64); remainingMilliseconds = theVisualPlayerState->getRemainingAudioTime(); sprintf(cStr64, "%d", remainingMilliseconds); setProcessInfo("TrackTimeRemaining", cStr64); }
OSStatus VisualTextureContainer::initWithString(const VisualString& stringValue, VisualStringStyle& stringStyle) { this->releaseTextureData(); if (this->pixelBuffer != NULL) { free(this->pixelBuffer); this->pixelBuffer = NULL; } OSStatus status = noErr; VisualGraphics* theVisualGraphics = VisualGraphics::getInstance(); UInt16 maxPixelWidth = theVisualGraphics->getCanvasPixelWidth(); UInt16 maxPixelHeight = theVisualGraphics->getCanvasPixelHeight(); this->textureName = theVisualGraphics->getNextFreeTextureName(); this->textureIsSet = true; VisualTextureContainer::textureRefCountMap[this->textureName] = 1; this->useRectExtension = theVisualGraphics->canUseTextureRectExtension(); #if TARGET_OS_MAC char alignmentStr[32]; switch (stringStyle.horizontalAlignment) { case (kLeftAligned): strcpy(alignmentStr, "left"); break; case(kCenterAligned): strcpy(alignmentStr, "center"); break; case(kRightAligned): strcpy(alignmentStr, "right"); break; default: break; } status = getDimensionsOfCocoaStringBitmap((void*)&stringValue, &(this->imageWidth), &(this->imageHeight), const_cast<char*>(stringStyle.fontNameStr), &(stringStyle.fontSize), stringStyle.fontColor.r, stringStyle.fontColor.g, stringStyle.fontColor.b, maxPixelWidth, maxPixelHeight, alignmentStr); if (this->useRectExtension == false) { this->textureWidth = theVisualGraphics->power2Ceiling(this->imageWidth); this->textureHeight = theVisualGraphics->power2Ceiling(this->imageHeight); } else { this->textureWidth = this->imageWidth; this->textureHeight = this->imageHeight; } this->pixelBuffer = (UInt32*)calloc(this->textureWidth * this->textureHeight, sizeof(UInt32)); status = getCocoaStringBitmapData((void*)&stringValue, this->textureWidth, this->textureHeight, const_cast<char*>(stringStyle.fontNameStr), stringStyle.fontSize, stringStyle.fontColor.r, stringStyle.fontColor.g, stringStyle.fontColor.b, alignmentStr, &(this->pixelBuffer)); theVisualGraphics->copyARGBBitmapDataToTexture(this->textureName, this->textureWidth, this->textureHeight, this->useRectExtension, this->pixelFormat, this->dataType, const_cast<const UInt32**>(&(this->pixelBuffer))); #endif #if TARGET_OS_WIN wchar_t* stringValueRef = (wchar_t*)stringValue.getCharactersPointer(); UInt8 red = (UInt8)(stringStyle.fontColor.r * 255.0f); UInt8 green = (UInt8)(stringStyle.fontColor.g * 255.0f); UInt8 blue = (UInt8)(stringStyle.fontColor.b * 255.0f); status = theVisualGraphics->makeTextureOfStringWin(stringValueRef, stringValue.getNumberOfCharacters(), this->textureName, this->textureWidth, this->textureHeight, this->imageWidth, this->imageHeight, stringStyle.fontNameStr, (UInt16)stringStyle.fontSize, red, green, blue, stringStyle.horizontalAlignment, maxPixelWidth, maxPixelHeight); #endif if (this->useRectExtension == false) { this->textureLogicalWidth = (double)this->imageWidth / (double)this->textureWidth; this->textureLogicalHeight = (double)this->imageHeight / (double)this->textureHeight; } else { this->textureLogicalWidth = (double)this->textureWidth; this->textureLogicalHeight = (double)this->textureHeight; } return status; }