blob: 38f8a28f9c5db6fd4234a0adf99c0d98d6fd04bc [file] [log] [blame]
/*-------------------------------------------------------------------------
* drawElements Quality Program OpenGL ES Utilities
* ------------------------------------------------
*
* Copyright 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
'use strict';
goog.provide('framework.opengl.gluObjectWrapper');
goog.scope(function() {
var gluObjectWrapper = framework.opengl.gluObjectWrapper;
/**
* @typedef {function(this:WebGLRenderingContextBase): WebGLObject}
*/
gluObjectWrapper.funcGenT;
/**
* @typedef {function(this:WebGLRenderingContextBase, WebGLObject)}
*/
gluObjectWrapper.funcDelT;
/**
* @typedef {{name: string, funcGen: !gluObjectWrapper.funcGenT, funcDel: !gluObjectWrapper.funcDelT}}
*/
gluObjectWrapper.traitsT;
/**
* Returns an object containing a configuration for an ObjectWrapper
* @param {string} name
* @param {gluObjectWrapper.funcGenT} funcGen
* @param {gluObjectWrapper.funcDelT} funcDel
* @return {gluObjectWrapper.traitsT}
*/
gluObjectWrapper.traits = function(name, funcGen, funcDel) {
return {
name: name,
funcGen: funcGen,
funcDel: funcDel
};
};
/**
* @constructor
* @param {WebGLRenderingContextBase} gl
* @param {gluObjectWrapper.traitsT} traits
*/
gluObjectWrapper.ObjectWrapper = function(gl, traits) {
/**
* @protected
* @type {WebGLRenderingContextBase}
*/
this.m_gl = gl;
/**
* @protected
* @type {gluObjectWrapper.traitsT}
*/
this.m_traits = traits;
/**
* @protected
* @type {WebGLObject}
*/
this.m_object = this.m_traits.funcGen.call(gl);
};
/**
* Destorys the WebGLObject associated with this object.
*/
gluObjectWrapper.ObjectWrapper.prototype.clear = function() {
this.m_traits.funcDel.call(this.m_gl, this.m_object);
};
/**
* Returns the WebGLObject associated with this object.
* @return {WebGLObject}
*/
gluObjectWrapper.ObjectWrapper.prototype.get = function() {
return this.m_object;
};
/**
* @constructor
* @extends {gluObjectWrapper.ObjectWrapper}
* @param {WebGLRenderingContextBase} gl
*/
gluObjectWrapper.Framebuffer = function(gl) {
gluObjectWrapper.ObjectWrapper.call(this, gl, gluObjectWrapper.traits(
'framebuffer',
/** @type {gluObjectWrapper.funcGenT} */(gl.createFramebuffer),
/** @type {gluObjectWrapper.funcDelT} */(gl.deleteFramebuffer)
));
};
gluObjectWrapper.Framebuffer.prototype = Object.create(gluObjectWrapper.ObjectWrapper.prototype);
gluObjectWrapper.Framebuffer.prototype.constructor = gluObjectWrapper.Framebuffer;
/**
* @return {WebGLFramebuffer}
*/
gluObjectWrapper.Framebuffer.prototype.get;
});