// Copyright 2013 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.

#include "cc/test/test_texture.h"

#include "gpu/GLES2/gl2extchromium.h"
#include "third_party/khronos/GLES2/gl2.h"
#include "third_party/khronos/GLES2/gl2ext.h"

namespace cc {

size_t TextureSizeBytes(gfx::Size size, ResourceFormat format) {
  unsigned int components_per_pixel = 4;
  unsigned int bytes_per_component = 1;
  return size.width() * size.height() * components_per_pixel *
         bytes_per_component;
}

TestTexture::TestTexture() : format(RGBA_8888) {
  // Initialize default parameter values.
  params[GL_TEXTURE_MAG_FILTER] = GL_LINEAR;
  params[GL_TEXTURE_MIN_FILTER] = GL_NEAREST_MIPMAP_LINEAR;
  params[GL_TEXTURE_WRAP_S] = GL_REPEAT;
  params[GL_TEXTURE_WRAP_T] = GL_REPEAT;
  params[GL_TEXTURE_POOL_CHROMIUM] = GL_TEXTURE_POOL_UNMANAGED_CHROMIUM;
  params[GL_TEXTURE_USAGE_ANGLE] = GL_NONE;
}

TestTexture::~TestTexture() {}

void TestTexture::Reallocate(gfx::Size size, ResourceFormat format) {
  this->size = size;
  this->format = format;
  this->data.reset(new uint8_t[TextureSizeBytes(size, format)]);
}

bool TestTexture::IsValidParameter(blink::WGC3Denum pname) {
  return params.find(pname) != params.end();
}

}  // namespace cc
