blob: 6524f613d21f2999ac165350bc7e804f1ebd08a0 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_VIZ_COMMON_GPU_TEXTURE_ALLOCATION_H_
#define COMPONENTS_VIZ_COMMON_GPU_TEXTURE_ALLOCATION_H_
#include "components/viz/common/resources/resource_format.h"
#include "components/viz/common/viz_common_export.h"
#include "third_party/khronos/GLES2/gl2.h"
#include <stdint.h>
namespace gfx {
class ColorSpace;
class Size;
} // namespace gfx
namespace gpu {
struct Capabilities;
namespace gles2 {
class GLES2Interface;
}
namespace raster {
class RasterInterface;
}
} // namespace gpu
namespace viz {
class VIZ_COMMON_EXPORT TextureAllocation {
public:
GLuint texture_id = 0;
GLenum texture_target = 0;
bool overlay_candidate = false;
// Generates a texture id and sets it up for use, but without any storage
// allocated pixels.
static TextureAllocation MakeTextureId(gpu::gles2::GLES2Interface* gl,
const gpu::Capabilities& caps,
ResourceFormat format,
bool use_gpu_memory_buffer_resources,
bool for_framebuffer_attachment);
// Allocates the storage for a texture id previously from MakeTextureId().
// Can be called on a different context, if the texture id is mapped to
// another context with a mailbox. The |format| should match the one given to
// MakeTextureId().
static void AllocateStorage(gpu::gles2::GLES2Interface* gl,
const gpu::Capabilities& caps,
ResourceFormat format,
const gfx::Size& size,
const TextureAllocation& alloc,
const gfx::ColorSpace& color_space);
static void AllocateStorage(gpu::raster::RasterInterface* ri,
const gpu::Capabilities& caps,
ResourceFormat format,
const gfx::Size& size,
const TextureAllocation& alloc,
const gfx::ColorSpace& color_space);
// Allocates storage for a texture id previously generated by MakeTextureId(),
// and uploads the contents of |pixels| to it. |pixels| should point to a
// bitmap with a width and height of |size|, and no additional row stride
// padding.
static void UploadStorage(gpu::gles2::GLES2Interface* gl,
const gpu::Capabilities& caps,
ResourceFormat format,
const gfx::Size& size,
const TextureAllocation& alloc,
const gfx::ColorSpace& color_space,
const void* pixels);
};
} // namespace viz
#endif // COMPONENTS_VIZ_COMMON_GPU_TEXTURE_ALLOCATION_H_