X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Fimages%2Fframe-buffer-image-impl.cpp;h=15aa6a8ff4cf533456491fbb6c7304fa3edb61ca;hb=698c38bd1a76158dd449639aaf014d7046dd3ae4;hp=35125a1387f844dfc587e3b4fb0af6a78bec5549;hpb=5ffab8f9d300d52646f3adfce9581bc541482520;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/images/frame-buffer-image-impl.cpp b/dali/internal/event/images/frame-buffer-image-impl.cpp index 35125a1..15aa6a8 100644 --- a/dali/internal/event/images/frame-buffer-image-impl.cpp +++ b/dali/internal/event/images/frame-buffer-image-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2015 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,7 +21,6 @@ // INTERNAL INCLUDES #include #include -#include namespace Dali { @@ -32,42 +31,46 @@ namespace Internal namespace { TypeRegistration mType( typeid( Dali::FrameBufferImage ), typeid( Dali::Image ), NULL ); -} // unnamed namespace -FrameBufferImage::~FrameBufferImage() -{ -} +const int RenderBufferFormatToFrameBufferAttachments[] = { Dali::FrameBuffer::Attachment::NONE, + Dali::FrameBuffer::Attachment::DEPTH, + Dali::FrameBuffer::Attachment::STENCIL, + Dali::FrameBuffer::Attachment::DEPTH_STENCIL + }; + +} // unnamed namespace -FrameBufferImagePtr FrameBufferImage::New(unsigned int width, +FrameBufferImagePtr FrameBufferImage::New( unsigned int width, unsigned int height, Pixel::Format pixelFormat, - ReleasePolicy releasePolicy, - RenderBuffer::Format bufferformat) + RenderBuffer::Format bufferformat ) { - FrameBufferImagePtr image = new FrameBufferImage(width, height, pixelFormat, releasePolicy, bufferformat); + FrameBufferImagePtr image = new FrameBufferImage( width, height ); image->Initialize(); - return image; -} -FrameBufferImagePtr FrameBufferImage::New( NativeImageInterface& nativeImage ) -{ - FrameBufferImagePtr image = new FrameBufferImage(nativeImage); - image->Initialize(); + image->mTexture = Texture::New( Dali::TextureType::TEXTURE_2D, pixelFormat, width, height ); + image->mFrameBufferObject = FrameBuffer::New( width, height, RenderBufferFormatToFrameBufferAttachments[bufferformat] ); + image->mFrameBufferObject->AttachColorTexture( image->mTexture, 0u, 0u ); + return image; } -FrameBufferImagePtr FrameBufferImage::New( NativeImageInterface& nativeImage, ReleasePolicy releasePolicy ) +FrameBufferImagePtr FrameBufferImage::New( NativeImageInterface& nativeImage ) { - FrameBufferImagePtr image = new FrameBufferImage(nativeImage, releasePolicy); + FrameBufferImagePtr image = new FrameBufferImage( nativeImage ); image->Initialize(); + + image->mTexture = Texture::New( nativeImage ); + image->mFrameBufferObject = FrameBuffer::New( image->mTexture->GetWidth(), image->mTexture->GetHeight(), Dali::FrameBuffer::Attachment::NONE ); + image->mFrameBufferObject->AttachColorTexture( image->mTexture, 0u, 0u ); + return image; } -FrameBufferImage::FrameBufferImage(unsigned int width, unsigned int height, Pixel::Format pixelFormat, ReleasePolicy releasePolicy, RenderBuffer::Format bufferformat) -: Image( releasePolicy ), - mNativeImage(), - mPixelFormat( pixelFormat ), - mBufferFormat( bufferformat ) +FrameBufferImage::FrameBufferImage( unsigned int width, unsigned int height) +: Image(), + mNativeImage(0), + mIsNativeFbo( false ) { mWidth = width; mHeight = height; @@ -76,62 +79,20 @@ FrameBufferImage::FrameBufferImage(unsigned int width, unsigned int height, Pixe FrameBufferImage::FrameBufferImage( NativeImageInterface& nativeImage ) : Image(), mNativeImage( &nativeImage ), - mPixelFormat( Pixel::FIRST_VALID_PIXEL_FORMAT ), - mBufferFormat( RenderBuffer::COLOR ) + mIsNativeFbo( true ) { mWidth = nativeImage.GetWidth(); mHeight = nativeImage.GetHeight(); } -FrameBufferImage::FrameBufferImage( NativeImageInterface& nativeImage, ReleasePolicy releasePolicy ) -: Image( releasePolicy ), - mNativeImage( &nativeImage ), - mPixelFormat( Pixel::FIRST_VALID_PIXEL_FORMAT ), - mBufferFormat( RenderBuffer::COLOR ) -{ - mWidth = nativeImage.GetWidth(); - mHeight = nativeImage.GetHeight(); -} -void FrameBufferImage::Connect() +bool FrameBufferImage::IsNativeFbo() const { - ++mConnectionCount; - - if (mConnectionCount == 1) - { - // ticket was thrown away when related actors went offstage - if (!mTicket) - { - ResourceClient& resourceClient = ThreadLocalStorage::Get().GetResourceClient(); - if (mNativeImage) - { - mTicket = resourceClient.AddFrameBufferImage(*mNativeImage); - mTicket->AddObserver(*this); - } - else - { - mTicket = resourceClient.AddFrameBufferImage(mWidth, mHeight, mPixelFormat, mBufferFormat); - mTicket->AddObserver(*this); - } - } - } + return mIsNativeFbo; } -void FrameBufferImage::Disconnect() +FrameBufferImage::~FrameBufferImage() { - if(!mTicket) - { - return; - } - - DALI_ASSERT_DEBUG(mConnectionCount > 0); - --mConnectionCount; - if (mConnectionCount == 0 && mReleasePolicy == Dali::Image::UNUSED) - { - // release image memory when it's not visible anymore (decrease ref. count of texture) - mTicket->RemoveObserver(*this); - mTicket.Reset(); - } } } // namespace Internal