| /*------------------------------------------------------------------------- |
| * 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; |
| }); |