2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include "native-bitmap-buffer-impl.h"
22 #include <dali/integration-api/debug.h>
23 #include <dali/integration-api/bitmap.h>
26 #include <common/gl/gl-implementation.h>
37 NativeBitmapBuffer::NativeBitmapBuffer( Adaptor* adaptor, unsigned int width, unsigned int height, Pixel::Format pFormat )
40 mPixelFormat(pFormat),
43 DALI_ASSERT_ALWAYS( adaptor );
44 mBuffer = new Integration::LocklessBuffer( width * height * Pixel::GetBytesPerPixel(pFormat) );
45 mGlAbstraction = &(adaptor->GetGlAbstraction());
48 NativeBitmapBuffer::~NativeBitmapBuffer()
53 void NativeBitmapBuffer::PrepareTexture()
55 DALI_ASSERT_ALWAYS( mBuffer );
56 GLenum pixelFormat = GL_RGBA;
57 GLenum pixelDataType = GL_UNSIGNED_BYTE;
59 Integration::ConvertToGlFormat( mPixelFormat, pixelDataType, pixelFormat );
61 const unsigned char* buf = mBuffer->Read();
63 if( buf && buf != mLastReadBuffer ) // Prevent same buffer being uploaded multiple times
65 mLastReadBuffer = buf;
67 // The active texture has already been set to a sampler and bound.
68 mGlAbstraction->TexImage2D( GL_TEXTURE_2D, 0, pixelFormat, mWidth, mHeight, 0, pixelFormat, pixelDataType, buf );
72 void NativeBitmapBuffer::Write( const unsigned char *src, size_t size )
74 mBuffer->Write( src, size ); // Write will cause LocklessBuffer to switch to the other buffer
77 bool NativeBitmapBuffer::GlExtensionCreate()
82 void NativeBitmapBuffer::GlExtensionDestroy()
86 unsigned int NativeBitmapBuffer::TargetTexture()
91 unsigned int NativeBitmapBuffer::GetWidth() const
96 unsigned int NativeBitmapBuffer::GetHeight() const
101 bool NativeBitmapBuffer::RequiresBlending() const
103 return Pixel::HasAlpha( mPixelFormat );
106 } // namespace Adaptor
108 } // namespace Internal