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>
36 NativeBitmapBuffer::NativeBitmapBuffer( Adaptor* adaptor, unsigned int width, unsigned int height, Pixel::Format pFormat )
39 mPixelFormat(pFormat),
42 DALI_ASSERT_ALWAYS( adaptor );
43 mBuffer = new Integration::LocklessBuffer( width * height * Pixel::GetBytesPerPixel(pFormat) );
44 mGlAbstraction = &(adaptor->GetGlAbstraction());
47 NativeBitmapBuffer::~NativeBitmapBuffer()
52 void NativeBitmapBuffer::PrepareTexture()
54 DALI_ASSERT_ALWAYS( mBuffer );
55 GLenum pixelFormat = GL_RGBA;
56 GLenum pixelDataType = GL_UNSIGNED_BYTE;
58 Integration::ConvertToGlFormat( mPixelFormat, pixelDataType, pixelFormat );
60 const unsigned char* buf = mBuffer->Read();
62 if( buf && buf != mLastReadBuffer ) // Prevent same buffer being uploaded multiple times
64 mLastReadBuffer = buf;
66 // The active texture has already been set to a sampler and bound.
67 mGlAbstraction->TexImage2D( GL_TEXTURE_2D, 0, pixelFormat, mWidth, mHeight, 0, pixelFormat, pixelDataType, buf );
71 void NativeBitmapBuffer::Write( const unsigned char *src, size_t size )
73 mBuffer->Write( src, size ); // Write will cause LocklessBuffer to switch to the other buffer
76 bool NativeBitmapBuffer::GlExtensionCreate()
81 void NativeBitmapBuffer::GlExtensionDestroy()
85 unsigned int NativeBitmapBuffer::TargetTexture()
90 unsigned int NativeBitmapBuffer::GetWidth() const
95 unsigned int NativeBitmapBuffer::GetHeight() const
100 Pixel::Format NativeBitmapBuffer::GetPixelFormat() const
105 } // namespace Adaptor
107 } // namespace Internal