blob: f5fcb478975273388ddea3b18cfda631fb8f676e [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 COBALT_RENDERER_BACKEND_EGL_TEXTURE_DATA_CPU_H_
#define COBALT_RENDERER_BACKEND_EGL_TEXTURE_DATA_CPU_H_
#include "base/memory/aligned_memory.h"
#include "cobalt/renderer/backend/egl/texture_data.h"
#include "cobalt/renderer/backend/egl/utils.h"
namespace cobalt {
namespace renderer {
namespace backend {
// Creates a TextreData object where the texture memory is simply CPU-allocated
// (e.g. via malloc) memory. While not the most efficient technique, it is
// the most compatible.
class TextureDataCPU : public TextureDataEGL {
public:
TextureDataCPU(const math::Size& size, GLenum format);
const math::Size& GetSize() const OVERRIDE { return size_; }
GLenum GetFormat() const OVERRIDE { return format_; }
int GetPitchInBytes() const OVERRIDE {
return size_.width() * BytesPerPixelForGLFormat(format_);
}
uint8_t* GetMemory() OVERRIDE { return static_cast<uint8_t*>(memory_.get()); }
GLuint ConvertToTexture(GraphicsContextEGL* graphics_context,
bool bgra_supported);
private:
math::Size size_;
GLenum format_;
scoped_array<uint8_t> memory_;
};
class RawTextureMemoryCPU : public RawTextureMemoryEGL {
public:
RawTextureMemoryCPU(size_t size_in_bytes, size_t alignment);
// Returns the allocated size of the texture memory.
size_t GetSizeInBytes() const OVERRIDE { return size_in_bytes_; }
// Returns a CPU-accessible pointer to the allocated memory.
uint8_t* GetMemory() OVERRIDE { return memory_.get(); }
GLuint CreateTexture(GraphicsContextEGL* graphics_context, intptr_t offset,
const math::Size& size, GLenum format,
int pitch_in_bytes, bool bgra_supported) const OVERRIDE;
protected:
void MakeConst() OVERRIDE {}
private:
size_t size_in_bytes_;
scoped_ptr_malloc<uint8_t, base::ScopedPtrAlignedFree> memory_;
};
} // namespace backend
} // namespace renderer
} // namespace cobalt
#endif // COBALT_RENDERER_BACKEND_EGL_TEXTURE_DATA_CPU_H_