123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- #include "WebGL2Context.h"
- #include "WebGLSampler.h"
- #include "GLContext.h"
- namespace mozilla {
- already_AddRefed<WebGLSampler>
- WebGL2Context::CreateSampler()
- {
- if (IsContextLost())
- return nullptr;
- GLuint sampler;
- MakeContextCurrent();
- gl->fGenSamplers(1, &sampler);
- RefPtr<WebGLSampler> globj = new WebGLSampler(this, sampler);
- return globj.forget();
- }
- void
- WebGL2Context::DeleteSampler(WebGLSampler* sampler)
- {
- if (!ValidateDeleteObject("deleteSampler", sampler))
- return;
- for (int n = 0; n < mGLMaxTextureUnits; n++) {
- if (mBoundSamplers[n] == sampler) {
- mBoundSamplers[n] = nullptr;
- InvalidateResolveCacheForTextureWithTexUnit(n);
- }
- }
- sampler->RequestDelete();
- }
- bool
- WebGL2Context::IsSampler(const WebGLSampler* sampler)
- {
- if (!ValidateIsObject("isSampler", sampler))
- return false;
- MakeContextCurrent();
- return gl->fIsSampler(sampler->mGLName);
- }
- void
- WebGL2Context::BindSampler(GLuint unit, WebGLSampler* sampler)
- {
- if (IsContextLost())
- return;
- if (sampler && !ValidateObject("bindSampler", *sampler))
- return;
- if (GLint(unit) >= mGLMaxTextureUnits)
- return ErrorInvalidValue("bindSampler: unit must be < %d", mGLMaxTextureUnits);
- ////
- gl->MakeCurrent();
- gl->fBindSampler(unit, sampler ? sampler->mGLName : 0);
- InvalidateResolveCacheForTextureWithTexUnit(unit);
- mBoundSamplers[unit] = sampler;
- }
- void
- WebGL2Context::SamplerParameteri(WebGLSampler& sampler, GLenum pname, GLint param)
- {
- const char funcName[] = "samplerParameteri";
- if (IsContextLost())
- return;
- if (!ValidateObject(funcName, sampler))
- return;
- sampler.SamplerParameter(funcName, pname, FloatOrInt(param));
- }
- void
- WebGL2Context::SamplerParameterf(WebGLSampler& sampler, GLenum pname, GLfloat param)
- {
- const char funcName[] = "samplerParameterf";
- if (IsContextLost())
- return;
- if (!ValidateObject(funcName, sampler))
- return;
- sampler.SamplerParameter(funcName, pname, FloatOrInt(param));
- }
- void
- WebGL2Context::GetSamplerParameter(JSContext*, const WebGLSampler& sampler, GLenum pname,
- JS::MutableHandleValue retval)
- {
- const char funcName[] = "getSamplerParameter";
- retval.setNull();
- if (IsContextLost())
- return;
- if (!ValidateObject(funcName, sampler))
- return;
- ////
- gl->MakeCurrent();
- switch (pname) {
- case LOCAL_GL_TEXTURE_MIN_FILTER:
- case LOCAL_GL_TEXTURE_MAG_FILTER:
- case LOCAL_GL_TEXTURE_WRAP_S:
- case LOCAL_GL_TEXTURE_WRAP_T:
- case LOCAL_GL_TEXTURE_WRAP_R:
- case LOCAL_GL_TEXTURE_COMPARE_MODE:
- case LOCAL_GL_TEXTURE_COMPARE_FUNC:
- {
- GLint param = 0;
- gl->fGetSamplerParameteriv(sampler.mGLName, pname, ¶m);
- retval.set(JS::Int32Value(param));
- }
- return;
- case LOCAL_GL_TEXTURE_MIN_LOD:
- case LOCAL_GL_TEXTURE_MAX_LOD:
- {
- GLfloat param = 0;
- gl->fGetSamplerParameterfv(sampler.mGLName, pname, ¶m);
- retval.set(JS::Float32Value(param));
- }
- return;
- default:
- ErrorInvalidEnumArg(funcName, "pname", pname);
- return;
- }
- }
- } // namespace mozilla
|