void UIStaticText::PrepareSpriteInternal(DAVA::BaseObject *caller, void *param, void *callerData) { if (textBlock->IsSpriteReady()) { Sprite *sprite = textBlock->GetSprite(); shadowBg->SetSprite(sprite, 0); textBg->SetSprite(sprite, 0); Texture *tex = sprite->GetTexture(); if(tex && tex->GetFormat() == FORMAT_A8) { textBg->SetShader(RenderManager::TEXTURE_MUL_FLAT_COLOR_IMAGE_A8); shadowBg->SetShader(RenderManager::TEXTURE_MUL_FLAT_COLOR_IMAGE_A8); } else { textBg->SetShader(RenderManager::TEXTURE_MUL_FLAT_COLOR); shadowBg->SetShader(RenderManager::TEXTURE_MUL_FLAT_COLOR); } } else { shadowBg->SetSprite(NULL, 0); textBg->SetSprite(NULL, 0); } }
void GenericBuffer::CopyFrom(vk::CommandBuffer commandBuffer, Texture& srcTexture) { auto textureSize = srcTexture.GetWidth() * srcTexture.GetHeight() * GetBytesPerPixel(srcTexture.GetFormat()); if (textureSize != mSize) { throw std::runtime_error("Cannot copy texture of different sizes"); } srcTexture.Barrier(commandBuffer, vk::ImageLayout::eGeneral, vk::AccessFlagBits::eShaderWrite | vk::AccessFlagBits::eColorAttachmentWrite, vk::ImageLayout::eTransferSrcOptimal, vk::AccessFlagBits::eTransferRead); auto info = vk::BufferImageCopy() .setImageSubresource({vk::ImageAspectFlagBits::eColor, 0, 0, 1}) .setImageExtent({srcTexture.GetWidth(), srcTexture.GetHeight(), 1}); commandBuffer.copyImageToBuffer( srcTexture.mImage, vk::ImageLayout::eTransferSrcOptimal, mBuffer, info); srcTexture.Barrier(commandBuffer, vk::ImageLayout::eTransferSrcOptimal, vk::AccessFlagBits::eTransferRead, vk::ImageLayout::eGeneral, vk::AccessFlagBits::eShaderRead | vk::AccessFlagBits::eColorAttachmentRead); Barrier(commandBuffer, vk::AccessFlagBits::eTransferWrite, vk::AccessFlagBits::eShaderRead); }