// Copyright (c) 2012 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 PPAPI_C_DEV_PPB_GLES_CHROMIUM_TEXTURE_MAPPING_DEV_H_
#define PPAPI_C_DEV_PPB_GLES_CHROMIUM_TEXTURE_MAPPING_DEV_H_

#include "ppapi/c/pp_resource.h"
#include "ppapi/c/ppb_opengles2.h"

#define PPB_GLES_CHROMIUM_TEXTURE_MAPPING_DEV_INTERFACE_0_1 \
    "PPB_GLESChromiumTextureMapping(Dev);0.1"
#define PPB_GLES_CHROMIUM_TEXTURE_MAPPING_DEV_INTERFACE \
    PPB_GLES_CHROMIUM_TEXTURE_MAPPING_DEV_INTERFACE_0_1

// PPB_GLES_CHROMIUM_TEXTURE_MAPPING_DEV_INTERFACE is deprecated. Please use
// PPB_OPENGLES2_CHROMIUMMAPSUB_INTERFACE instead.

#define PPB_OPENGLES2_CHROMIUMMAPSUB_DEV_INTERFACE_1_0 \
    "PPB_OpenGLES2ChromiumMapSub(Dev);1.0"

// PPB_OPENGLES2_CHROMIUMMAPSUB_DEV_INTERFACE_1_0 is also deprecated.  Please
// use PPB_OPENGLES2_CHROMIUMMAPSUB_INTERFACE instead.

struct PPB_GLESChromiumTextureMapping_Dev_0_1 {
  // Maps the sub-image of a texture. 'level', 'xoffset', 'yoffset', 'width',
  // 'height', 'format' and 'type' correspond to the similarly named parameters
  // of TexSubImage2D, and define the sub-image region, as well as the format of
  // the data. 'access' must be one of GL_READ_ONLY, GL_WRITE_ONLY or
  // GL_READ_WRITE. If READ is included, the returned buffer will contain the
  // pixel data for the sub-image. If WRITE is included, the pixel data for the
  // sub-image will be updated to the contents of the buffer when
  // UnmapTexSubImage2DCHROMIUM is called. NOTE: for a GL_WRITE_ONLY map, it
  // means that all the values of the buffer must be written.
  void* (*MapTexSubImage2DCHROMIUM)(
     PP_Resource context,
     GLenum target,
     GLint level,
     GLint xoffset,
     GLint yoffset,
     GLsizei width,
     GLsizei height,
     GLenum format,
     GLenum type,
     GLenum access);

  // Unmaps the sub-image of a texture. If the sub-image was mapped with one of
  // the WRITE accesses, the pixels are updated at this time to the contents of
  // the buffer. 'mem' must be the pointer returned by MapTexSubImage2DCHROMIUM.
  void (*UnmapTexSubImage2DCHROMIUM)(PP_Resource context, const void* mem);
};

typedef struct PPB_GLESChromiumTextureMapping_Dev_0_1
    PPB_GLESChromiumTextureMapping_Dev;

#endif  // PPAPI_C_DEV_PPB_GLES_CHROMIUM_TEXTURE_MAPPING_DEV_H_
