blob: 95688a09c9590a1d2d8e6be69173b7b8f424cc90 [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 {
WebGLSamplerState::WebGLSamplerState()
: compreFunc(GL_LEQUAL)
, compreMode(GL_NONE)
, magFilter(GL_LINEAR)
, minFilter(GL_NEAREST_MIPMAP_LINEAR)
, wrapR(GL_REPEAT)
, wrapS(GL_REPEAT)
, wrapT(GL_REPEAT)
, maxLod(1000.0f)
, minLod(-1000.0f)
{
}
WebGLSampler* WebGLSampler::create(WebGL2RenderingContextBase* ctx)
{
return new WebGLSampler(ctx);
}
WebGLSampler::~WebGLSampler()
{
// See the comment in WebGLObject::detachAndDeleteObject().
detachAndDeleteObject();
}
WebGLSampler::WebGLSampler(WebGL2RenderingContextBase* ctx)
: WebGLSharedPlatform3DObject(ctx)
{
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_state.compreFunc = param;
break;
case GL_TEXTURE_COMPARE_MODE:
m_state.compreMode = param;
break;
case GL_TEXTURE_MAG_FILTER:
m_state.magFilter = param;
break;
case GL_TEXTURE_MIN_FILTER:
m_state.minFilter = param;
break;
case GL_TEXTURE_WRAP_R:
m_state.wrapR = param;
break;
case GL_TEXTURE_WRAP_S:
m_state.wrapS = param;
break;
case GL_TEXTURE_WRAP_T:
m_state.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_state.maxLod = param;
break;
case GL_TEXTURE_MIN_LOD:
m_state.minLod = param;
break;
default:
ASSERT_NOT_REACHED();
return;
}
}
} // namespace blink