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 <dali/internal/imaging/common/native-bitmap-buffer-impl.h>
22 #include <dali/integration-api/debug.h>
23 #include <dali/integration-api/bitmap.h>
26 #include <dali/internal/graphics/gles/gl-implementation.h>
27 #include <dali/internal/graphics/gles/egl-graphics.h>
38 NativeBitmapBuffer::NativeBitmapBuffer( Adaptor* adaptor, unsigned int width, unsigned int height, Pixel::Format pFormat )
39 : mGlAbstraction( nullptr),
42 mPixelFormat(pFormat),
45 DALI_ASSERT_ALWAYS( adaptor );
46 mBuffer = new Integration::LocklessBuffer( width * height * Pixel::GetBytesPerPixel(pFormat) );
48 GraphicsInterface* graphics = &(adaptor->GetGraphicsInterface());
49 auto eglGraphics = static_cast<EglGraphics *>(graphics);
50 mGlAbstraction = &(eglGraphics->GetGlAbstraction());
53 NativeBitmapBuffer::~NativeBitmapBuffer()
58 void NativeBitmapBuffer::PrepareTexture()
60 DALI_ASSERT_ALWAYS( mBuffer );
61 GLenum pixelFormat = GL_RGBA;
62 GLenum pixelDataType = GL_UNSIGNED_BYTE;
64 Integration::ConvertToGlFormat( mPixelFormat, pixelDataType, pixelFormat );
66 const unsigned char* buf = mBuffer->Read();
68 if( buf && buf != mLastReadBuffer ) // Prevent same buffer being uploaded multiple times
70 mLastReadBuffer = buf;
72 // The active texture has already been set to a sampler and bound.
73 mGlAbstraction->TexImage2D( GL_TEXTURE_2D, 0, pixelFormat, mWidth, mHeight, 0, pixelFormat, pixelDataType, buf );
77 void NativeBitmapBuffer::Write( const unsigned char *src, size_t size )
79 mBuffer->Write( src, size ); // Write will cause LocklessBuffer to switch to the other buffer
82 bool NativeBitmapBuffer::GlExtensionCreate()
87 void NativeBitmapBuffer::GlExtensionDestroy()
91 unsigned int NativeBitmapBuffer::TargetTexture()
96 unsigned int NativeBitmapBuffer::GetWidth() const
101 unsigned int NativeBitmapBuffer::GetHeight() const
106 bool NativeBitmapBuffer::RequiresBlending() const
108 return Pixel::HasAlpha( mPixelFormat );
111 } // namespace Adaptor
113 } // namespace Internal