X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Fimages%2Fframe-buffer-image-impl.cpp;h=b5a4439c41cdf6146a2f66c5f1c6325ed47150a3;hb=a167df9844d0a4fb3bab4b6782da4785b614041b;hp=2329e6b06a73e3e755ea1bdab7667d5306d272e6;hpb=ea86ef9851ff0868616ea28825d9f257dd96cf88;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 2329e6b..b5a4439 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 { @@ -31,37 +30,44 @@ namespace Internal namespace { -TypeRegistration mType( typeid( Dali::FrameBufferImage ), typeid( Dali::Image ), NULL ); +const Dali::FrameBuffer::Attachment::Mask RenderBufferFormatToFrameBufferAttachments[] = + { Dali::FrameBuffer::Attachment::NONE, + Dali::FrameBuffer::Attachment::DEPTH, + Dali::FrameBuffer::Attachment::STENCIL, + Dali::FrameBuffer::Attachment::DEPTH_STENCIL }; } // unnamed namespace -FrameBufferImage::~FrameBufferImage() +FrameBufferImagePtr FrameBufferImage::New( unsigned int width, + unsigned int height, + Pixel::Format pixelFormat, + RenderBuffer::Format bufferformat ) { -} - -FrameBufferImagePtr FrameBufferImage::New(unsigned int width, unsigned int height, Pixel::Format pixelFormat, ReleasePolicy releasePolicy) -{ - FrameBufferImagePtr image = new FrameBufferImage(width, height, pixelFormat, releasePolicy); + 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) -: Image(releasePolicy), - mPixelFormat(pixelFormat) +FrameBufferImage::FrameBufferImage( unsigned int width, unsigned int height) +: Image(), + mNativeImage(0), + mIsNativeFbo( false ) { mWidth = width; mHeight = height; @@ -69,59 +75,21 @@ FrameBufferImage::FrameBufferImage(unsigned int width, unsigned int height, Pixe FrameBufferImage::FrameBufferImage( NativeImageInterface& nativeImage ) : Image(), - mNativeImage(&nativeImage) + mNativeImage( &nativeImage ), + mIsNativeFbo( true ) { mWidth = nativeImage.GetWidth(); mHeight = nativeImage.GetHeight(); } -FrameBufferImage::FrameBufferImage( NativeImageInterface& nativeImage, ReleasePolicy releasePolicy ) -: Image(releasePolicy), - mNativeImage(&nativeImage) -{ - 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); - 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