blob: e44502f5edf5d9be201ffd3cd95ef0c4402473e1 [file] [log] [blame]
/*
* Copyright 2015 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef GLIMP_GLES_BUFFER_IMPL_H_
#define GLIMP_GLES_BUFFER_IMPL_H_
#include <KHR/khrplatform.h>
namespace glimp {
namespace gles {
// Implements functionality required to support GL memory buffers. These
// buffers are typically used to store vertex data and vertex index data,
// however it can also be used to store texture data that can later be used
// to create a texture.
class BufferImpl {
public:
// Corresponds to the |usage| GLenum passed into glBufferData().
enum Usage {
kStreamDraw,
kStaticDraw,
kDynamicDraw,
};
virtual ~BufferImpl() {}
// Sets the size and usage of allocated memory for the buffer.
// Since no data is available at this point, implementations are free to
// delay the actual allocation of memory until data is provided. Called from
// glBufferData().
// https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBufferData.xml
virtual void Allocate(Usage usage, size_t size) = 0;
// Upload the specified data into this buffer. Allocate() must have
// previously been called for a call to SetData() to be valid.
// This method is called by glBufferData() (when data is not NULL) and
// glBufferSubData().
// https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBufferData.xml
// https://www.khronos.org/opengles/sdk/docs/man/xhtml/glBufferSubData.xml
virtual void SetData(intptr_t offset, size_t size, const void* data) = 0;
// Maps the buffer's data to a CPU-addressible memory location and then
// returns a pointer to that location. This method is called when
// glMapBufferRange() is called. glimp only supports calls to
// glMapBufferRange() with the flag GL_MAP_INVALIDATE_BUFFER_BIT set,
// therefore this method is free to throw away any existing memory when
// this method is called.
// https://www.khronos.org/opengles/sdk/docs/man3/html/glMapBufferRange.xhtml
virtual void* Map() = 0;
// Unmaps the data previously mapped to a CPU-addressible memory location
// through a call to Map(). This method will be called when
// glUnmapBuffer() is called. This command should return false if the
// underlying buffer resource has become invalid while the memory was mapped.
// Otherwise, it should return true.
// https://www.khronos.org/opengles/sdk/docs/man3/html/glMapBufferRange.xhtml
virtual bool Unmap() = 0;
private:
};
} // namespace gles
} // namespace glimp
#endif // GLIMP_GLES_BUFFER_IMPL_H_