blob: cc8958f883e3bd87972d2f0016e757446ffd155a [file] [log] [blame]
// Copyright 2015 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 "config.h"
#include "modules/webgl/WebGLSampler.h"
#include "modules/webgl/WebGL2RenderingContextBase.h"
namespace blink {
WebGLSampler* WebGLSampler::create(WebGL2RenderingContextBase* ctx)
{
return new WebGLSampler(ctx);
}
WebGLSampler::~WebGLSampler()
{
// See the comment in WebGLObject::detachAndDeleteObject().
detachAndDeleteObject();
}
WebGLSampler::WebGLSampler(WebGL2RenderingContextBase* ctx)
: WebGLSharedPlatform3DObject(ctx)
, m_compreFunc(GL_LEQUAL)
, m_compreMode(GL_NONE)
, m_magFilter(GL_LINEAR)
, m_minFilter(GL_NEAREST_MIPMAP_LINEAR)
, m_wrapR(GL_REPEAT)
, m_wrapS(GL_REPEAT)
, m_wrapT(GL_REPEAT)
, m_maxLod(1000.0f)
, m_minLod(-1000.0f)
{
setObject(ctx->webContext()->createSampler());
}
void WebGLSampler::deleteObjectImpl(WebGraphicsContext3D* context3d)
{
context3d->deleteSampler(m_object);
m_object = 0;
}
void WebGLSampler::setParameteri(GLenum pname, GLint param)
{
ASSERT(object());
switch (pname) {
case GL_TEXTURE_MAX_LOD:
case GL_TEXTURE_MIN_LOD:
{
GLfloat fparam = static_cast<GLfloat>(param);
setParameterf(pname, fparam);
return;
}
case GL_TEXTURE_COMPARE_FUNC:
m_compreFunc = param;
break;
case GL_TEXTURE_COMPARE_MODE:
m_compreMode = param;
break;
case GL_TEXTURE_MAG_FILTER:
m_magFilter = param;
break;
case GL_TEXTURE_MIN_FILTER:
m_minFilter = param;
break;
case GL_TEXTURE_WRAP_R:
m_wrapR = param;
break;
case GL_TEXTURE_WRAP_S:
m_wrapS = param;
break;
case GL_TEXTURE_WRAP_T:
m_wrapT = param;
break;
default:
ASSERT_NOT_REACHED();
return;
}
}
void WebGLSampler::setParameterf(GLenum pname, GLfloat param)
{
ASSERT(object());
switch (pname) {
case GL_TEXTURE_COMPARE_FUNC:
case GL_TEXTURE_COMPARE_MODE:
case GL_TEXTURE_MAG_FILTER:
case GL_TEXTURE_MIN_FILTER:
case GL_TEXTURE_WRAP_R:
case GL_TEXTURE_WRAP_S:
case GL_TEXTURE_WRAP_T:
{
GLint iparam = static_cast<GLint>(param);
setParameteri(pname, iparam);
return;
}
case GL_TEXTURE_MAX_LOD:
m_maxLod = param;
break;
case GL_TEXTURE_MIN_LOD:
m_minLod = param;
break;
default:
ASSERT_NOT_REACHED();
return;
}
}
} // namespace blink