1 #ifndef __DALI_INTERNAL_GPU_BUFFER_H__
2 #define __DALI_INTERNAL_GPU_BUFFER_H__
5 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <dali/internal/render/gl-resources/context.h>
31 * Used to create and update a GPU memory buffer.
33 * The buffer can be used for storing vertex data, index arrays (indices)
34 * or pixel data (PBO).
36 * The buffer allows data to be stored in high-performance
37 * graphics memory on the server side and
38 * promotes efficient data transfer.
45 * Enum to encapsulate the GL buffer type. This is to avoid having to store a whole int for type
49 ARRAY_BUFFER, ///< GL_ARRAY_BUFFER
50 ELEMENT_ARRAY_BUFFER, ///< GL_ELEMENT_ARRAY_BUFFER
51 TRANSFORM_FEEDBACK_BUFFER ///< GL_TRANSFORM_FEEDBACK_BUFFER
55 * Enum to encapsulate the GL draw mode. This is to avoid having to store a whole int for mode
59 STREAM_DRAW, ///< GL_STREAM_DRAW
60 STATIC_DRAW, ///< GL_STATIC_DRAW
61 DYNAMIC_DRAW, ///< GL_DYNAMIC_DRAW
68 * @param context drawing context
70 GpuBuffer( Context& context );
73 * Destructor, non virtual as no virtual methods or inheritance
79 * Creates or updates a buffer object and binds it to the target.
80 * @param size Specifies the size in bytes of the buffer object's new data store.
81 * @param data pointer to the data to load
82 * @param usage How the buffer will be used
84 void UpdateDataBuffer(GLsizeiptr size, const GLvoid *data, Usage usage);
87 * Bind the buffer object to the target
88 * Will assert if the buffer size is zero
90 void Bind(Target target) const;
93 * @return true if the GPU buffer is valid, i.e. its created and not empty
95 bool BufferIsValid() const;
98 * Get the size of the buffer
101 GLsizeiptr GetBufferSize() const
107 * Needs to be called when GL context is destroyed
109 void GlContextDestroyed();
114 * Perfoms a bind without checking the size of the buffer
115 * @param bufferId to bind
117 void BindNoChecks(GLuint bufferId) const;
121 Context& mContext; ///< dali drawing context
122 GLsizeiptr mCapacity; ///< buffer capacity
123 GLsizeiptr mSize; ///< buffer size
124 GLuint mBufferId; ///< buffer object name(id)
126 bool mBufferCreated:1; ///< whether buffer has been created
130 } // namespace Internal
134 #endif // __DALI_INTERNAL_GPU_BUFFER_H__