| Index: third_party/WebKit/Source/modules/webgl/WebGLTexture.cpp
|
| diff --git a/third_party/WebKit/Source/modules/webgl/WebGLTexture.cpp b/third_party/WebKit/Source/modules/webgl/WebGLTexture.cpp
|
| index 77e15074bd061b4cbc2e88f354943193bbb93b22..321a766b9630d031036cc5f0fa46090629d73c3a 100644
|
| --- a/third_party/WebKit/Source/modules/webgl/WebGLTexture.cpp
|
| +++ b/third_party/WebKit/Source/modules/webgl/WebGLTexture.cpp
|
| @@ -37,13 +37,7 @@ WebGLTexture* WebGLTexture::create(WebGLRenderingContextBase* ctx)
|
| WebGLTexture::WebGLTexture(WebGLRenderingContextBase* ctx)
|
| : WebGLSharedPlatform3DObject(ctx)
|
| , m_target(0)
|
| - , m_isNPOT(false)
|
| - , m_isCubeComplete(false)
|
| - , m_isComplete(false)
|
| - , m_isFloatType(false)
|
| - , m_isHalfFloatType(false)
|
| , m_isWebGL2OrHigher(ctx->isWebGL2OrHigher())
|
| - , m_immutable(false)
|
| , m_baseLevel(0)
|
| , m_maxLevel(1000)
|
| {
|
| @@ -63,21 +57,7 @@ void WebGLTexture::setTarget(GLenum target, GLint maxLevel)
|
| // Target is finalized the first time bindTexture() is called.
|
| if (m_target)
|
| return;
|
| - switch (target) {
|
| - case GL_TEXTURE_2D:
|
| - case GL_TEXTURE_2D_ARRAY:
|
| - case GL_TEXTURE_3D:
|
| - m_target = target;
|
| - m_info.resize(1);
|
| - m_info[0].resize(maxLevel);
|
| - break;
|
| - case GL_TEXTURE_CUBE_MAP:
|
| - m_target = target;
|
| - m_info.resize(6);
|
| - for (int ii = 0; ii < 6; ++ii)
|
| - m_info[ii].resize(maxLevel);
|
| - break;
|
| - }
|
| + m_target = target;
|
| }
|
|
|
| void WebGLTexture::setParameteri(GLenum pname, GLint param)
|
| @@ -143,7 +123,6 @@ void WebGLTexture::setParameteri(GLenum pname, GLint param)
|
| default:
|
| return;
|
| }
|
| - update();
|
| }
|
|
|
| void WebGLTexture::setParameterf(GLenum pname, GLfloat param)
|
| @@ -154,129 +133,6 @@ void WebGLTexture::setParameterf(GLenum pname, GLfloat param)
|
| setParameteri(pname, iparam);
|
| }
|
|
|
| -void WebGLTexture::setLevelInfo(GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLenum type)
|
| -{
|
| - ASSERT(!m_immutable);
|
| -
|
| - if (!object() || !m_target)
|
| - return;
|
| - // We assume level, internalFormat, width, height, depth, and type have all been
|
| - // validated already.
|
| - int index = mapTargetToIndex(target);
|
| - if (index < 0)
|
| - return;
|
| - m_info[index][level].setInfo(internalFormat, width, height, depth, type);
|
| - update();
|
| -}
|
| -
|
| -void WebGLTexture::setTexStorageInfo(GLenum target, GLint levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth)
|
| -{
|
| - ASSERT(!m_immutable);
|
| -
|
| - // We assume level, internalFormat, width, height, and depth have all been
|
| - // validated already.
|
| - if (!object() || !m_target || target != m_target)
|
| - return;
|
| -
|
| - GLenum type = getValidTypeForInternalFormat(internalFormat);
|
| - if (type == GL_NONE)
|
| - return;
|
| -
|
| - for (size_t ii = 0; ii < m_info.size(); ++ii) {
|
| - GLsizei levelWidth = width;
|
| - GLsizei levelHeight = height;
|
| - GLsizei levelDepth = depth;
|
| - for (GLint level = 0; level < levels; ++level) {
|
| - LevelInfo& info = m_info[ii][level];
|
| - info.setInfo(internalFormat, levelWidth, levelHeight, levelDepth, type);
|
| - levelWidth = std::max(1, levelWidth >> 1);
|
| - levelHeight = std::max(1, levelHeight >> 1);
|
| - levelDepth = m_target == GL_TEXTURE_2D_ARRAY ? levelDepth : std::max(1, levelDepth >> 1);
|
| - }
|
| - }
|
| - update();
|
| -
|
| - m_immutable = true;
|
| -}
|
| -
|
| -void WebGLTexture::generateMipmapLevelInfo()
|
| -{
|
| - if (!object() || !m_target)
|
| - return;
|
| - if (!canGenerateMipmaps())
|
| - return;
|
| - if (!m_isComplete) {
|
| - for (size_t ii = 0; ii < m_info.size(); ++ii) {
|
| - const LevelInfo& info0 = m_info[ii][m_baseLevel];
|
| - GLsizei width = info0.width;
|
| - GLsizei height = info0.height;
|
| - GLsizei depth = info0.depth;
|
| - GLint levelCount = computeLevelCount(width, height, (m_target == GL_TEXTURE_2D_ARRAY ? 0 : depth));
|
| - size_t maxLevel = 0;
|
| - if (m_baseLevel + levelCount > 0)
|
| - maxLevel = m_baseLevel + levelCount - 1;
|
| - maxLevel = m_isWebGL2OrHigher ? std::min(m_maxLevel, maxLevel) : maxLevel;
|
| - ASSERT(maxLevel < m_info[ii].size());
|
| - for (size_t level = m_baseLevel + 1; level <= maxLevel; ++level) {
|
| - width = std::max(1, width >> 1);
|
| - height = std::max(1, height >> 1);
|
| - depth = m_target == GL_TEXTURE_2D_ARRAY ? depth : std::max(1, depth >> 1);
|
| - LevelInfo& info = m_info[ii][level];
|
| - info.setInfo(info0.internalFormat, width, height, depth, info0.type);
|
| - }
|
| - }
|
| - m_isComplete = true;
|
| - }
|
| -}
|
| -
|
| -GLenum WebGLTexture::getInternalFormat(GLenum target, GLint level) const
|
| -{
|
| - const LevelInfo* info = getLevelInfo(target, level);
|
| - if (!info)
|
| - return 0;
|
| - return info->internalFormat;
|
| -}
|
| -
|
| -GLenum WebGLTexture::getType(GLenum target, GLint level) const
|
| -{
|
| - const LevelInfo* info = getLevelInfo(target, level);
|
| - if (!info)
|
| - return 0;
|
| - return info->type;
|
| -}
|
| -
|
| -GLsizei WebGLTexture::getWidth(GLenum target, GLint level) const
|
| -{
|
| - const LevelInfo* info = getLevelInfo(target, level);
|
| - if (!info)
|
| - return 0;
|
| - return info->width;
|
| -}
|
| -
|
| -GLsizei WebGLTexture::getHeight(GLenum target, GLint level) const
|
| -{
|
| - const LevelInfo* info = getLevelInfo(target, level);
|
| - if (!info)
|
| - return 0;
|
| - return info->height;
|
| -}
|
| -
|
| -GLsizei WebGLTexture::getDepth(GLenum target, GLint level) const
|
| -{
|
| - const LevelInfo* info = getLevelInfo(target, level);
|
| - if (!info)
|
| - return 0;
|
| - return info->depth;
|
| -}
|
| -
|
| -bool WebGLTexture::isValid(GLenum target, GLint level) const
|
| -{
|
| - const LevelInfo* info = getLevelInfo(target, level);
|
| - if (!info)
|
| - return 0;
|
| - return info->valid;
|
| -}
|
| -
|
| bool WebGLTexture::isNPOT(GLsizei width, GLsizei height)
|
| {
|
| ASSERT(width >= 0 && height >= 0);
|
| @@ -287,13 +143,6 @@ bool WebGLTexture::isNPOT(GLsizei width, GLsizei height)
|
| return false;
|
| }
|
|
|
| -bool WebGLTexture::isNPOT() const
|
| -{
|
| - if (!object())
|
| - return false;
|
| - return m_isNPOT;
|
| -}
|
| -
|
| void WebGLTexture::deleteObjectImpl(WebGraphicsContext3D* context3d)
|
| {
|
| context3d->deleteTexture(m_object);
|
| @@ -330,20 +179,6 @@ int WebGLTexture::mapTargetToIndex(GLenum target) const
|
| return -1;
|
| }
|
|
|
| -bool WebGLTexture::canGenerateMipmaps()
|
| -{
|
| - if (!m_isWebGL2OrHigher && isNPOT())
|
| - return false;
|
| -
|
| - if (m_baseLevel >= m_info[0].size())
|
| - return false;
|
| -
|
| - if (m_info.size() > 1 && !m_isCubeComplete)
|
| - return false;
|
| -
|
| - return true;
|
| -}
|
| -
|
| GLint WebGLTexture::computeLevelCount(GLsizei width, GLsizei height, GLsizei depth)
|
| {
|
| // return 1 + log2Floor(std::max(width, height));
|
| @@ -364,77 +199,6 @@ GLint WebGLTexture::computeLevelCount(GLsizei width, GLsizei height, GLsizei dep
|
| return log + 1;
|
| }
|
|
|
| -void WebGLTexture::update()
|
| -{
|
| - m_isNPOT = false;
|
| - for (size_t ii = 0; ii < m_info.size(); ++ii) {
|
| - if (isNPOT(m_info[ii][0].width, m_info[ii][0].height)) {
|
| - m_isNPOT = true;
|
| - break;
|
| - }
|
| - }
|
| - m_isComplete = true;
|
| - m_isCubeComplete = true;
|
| -
|
| - if (m_baseLevel > m_maxLevel || m_baseLevel >= m_info[0].size()) {
|
| - m_isComplete = false;
|
| - }
|
| - else {
|
| - const LevelInfo& base = m_info[0][m_baseLevel];
|
| - size_t levelCount = computeLevelCount(base.width, base.height, (m_target == GL_TEXTURE_2D_ARRAY ? 0 : base.depth));
|
| - size_t maxLevel = 0;
|
| - if (m_baseLevel + levelCount > 0)
|
| - maxLevel = m_baseLevel + levelCount - 1;
|
| - maxLevel = m_isWebGL2OrHigher ? std::min(m_maxLevel, maxLevel) : maxLevel;
|
| - for (size_t ii = 0; ii < m_info.size(); ++ii) {
|
| - const LevelInfo& info0 = m_info[ii][m_baseLevel];
|
| - if (!info0.valid
|
| - || info0.width != base.width || info0.height != base.height || info0.depth != base.depth
|
| - || info0.internalFormat != base.internalFormat || info0.type != base.type
|
| - || (m_info.size() > 1 && info0.width != info0.height)) {
|
| - if (m_info.size() > 1)
|
| - m_isCubeComplete = false;
|
| - m_isComplete = false;
|
| - break;
|
| - }
|
| -
|
| - if (!m_isComplete)
|
| - continue;
|
| - GLsizei width = info0.width;
|
| - GLsizei height = info0.height;
|
| - GLsizei depth = info0.depth;
|
| - ASSERT(maxLevel < m_info[ii].size());
|
| - for (size_t level = m_baseLevel + 1; level <= maxLevel; ++level) {
|
| - width = std::max(1, width >> 1);
|
| - height = std::max(1, height >> 1);
|
| - depth = m_target == GL_TEXTURE_2D_ARRAY ? depth : std::max(1, depth >> 1);
|
| - const LevelInfo& info = m_info[ii][level];
|
| - if (!info.valid
|
| - || info.width != width || info.height != height || info.depth != depth
|
| - || info.internalFormat != info0.internalFormat || info.type != info0.type) {
|
| - m_isComplete = false;
|
| - break;
|
| - }
|
| -
|
| - }
|
| - }
|
| - }
|
| - m_isFloatType = m_info[0][0].type == GL_FLOAT;
|
| - m_isHalfFloatType = m_info[0][0].type == GL_HALF_FLOAT_OES;
|
| -}
|
| -
|
| -const WebGLTexture::LevelInfo* WebGLTexture::getLevelInfo(GLenum target, GLint level) const
|
| -{
|
| - if (!object() || !m_target)
|
| - return nullptr;
|
| - int targetIndex = mapTargetToIndex(target);
|
| - if (targetIndex < 0 || targetIndex >= static_cast<int>(m_info.size()))
|
| - return nullptr;
|
| - if (level < 0 || level >= static_cast<GLint>(m_info[targetIndex].size()))
|
| - return nullptr;
|
| - return &(m_info[targetIndex][level]);
|
| -}
|
| -
|
| // TODO(bajones): Logic surrounding relationship of internalFormat, format, and type needs to be revisisted for WebGL 2.0
|
| GLenum WebGLTexture::getValidTypeForInternalFormat(GLenum internalFormat)
|
| {
|
|
|