/lenasys/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/lenasys/trunk

« back to all changes in this revision

Viewing changes to js/webgl-utils.js

  • Committer: Gustav Hatvigsson
  • Date: 2013-05-31 06:15:46 UTC
  • mfrom: (90.1.20 lenasys2)
  • Revision ID: gustav.hartvigsson@gmail.com-20130531061546-vj8z28sq375kvghq
Merged Jonsson:s changes:
Fixed the layout on cms index so the arrows and dots marks expanded objects.
Fixed so the course content is sorted by course occasion and not by name

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright 2010, Google Inc.
 
3
 * All rights reserved.
 
4
 *
 
5
 * Redistribution and use in source and binary forms, with or without
 
6
 * modification, are permitted provided that the following conditions are
 
7
 * met:
 
8
 *
 
9
 *     * Redistributions of source code must retain the above copyright
 
10
 * notice, this list of conditions and the following disclaimer.
 
11
 *     * Redistributions in binary form must reproduce the above
 
12
 * copyright notice, this list of conditions and the following disclaimer
 
13
 * in the documentation and/or other materials provided with the
 
14
 * distribution.
 
15
 *     * Neither the name of Google Inc. nor the names of its
 
16
 * contributors may be used to endorse or promote products derived from
 
17
 * this software without specific prior written permission.
 
18
 *
 
19
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 
20
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 
21
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 
22
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 
23
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 
24
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 
25
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 
26
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 
27
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
28
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
29
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
30
 */
 
31
 
 
32
 
 
33
/**
 
34
 * @fileoverview This file contains functions every webgl program will need
 
35
 * a version of one way or another.
 
36
 *
 
37
 * Instead of setting up a context manually it is recommended to
 
38
 * use. This will check for success or failure. On failure it
 
39
 * will attempt to present an approriate message to the user.
 
40
 *
 
41
 *       gl = WebGLUtils.setupWebGL(canvas);
 
42
 *
 
43
 * For animated WebGL apps use of setTimeout or setInterval are
 
44
 * discouraged. It is recommended you structure your rendering
 
45
 * loop like this.
 
46
 *
 
47
 *       function render() {
 
48
 *         window.requestAnimFrame(render, canvas);
 
49
 *
 
50
 *         // do rendering
 
51
 *         ...
 
52
 *       }
 
53
 *       render();
 
54
 *
 
55
 * This will call your rendering function up to the refresh rate
 
56
 * of your display but will stop rendering if your app is not
 
57
 * visible.
 
58
 */
 
59
 
 
60
WebGLUtils = function() {
 
61
 
 
62
/**
 
63
 * Creates the HTLM for a failure message
 
64
 * @param {string} canvasContainerId id of container of th
 
65
 *        canvas.
 
66
 * @return {string} The html.
 
67
 */
 
68
var makeFailHTML = function(msg) {
 
69
  return '' +
 
70
    '<table style="background-color: #8CE; width: 100%; height: 100%;"><tr>' +
 
71
    '<td align="center">' +
 
72
    '<div style="display: table-cell; vertical-align: middle;">' +
 
73
    '<div style="">' + msg + '</div>' +
 
74
    '</div>' +
 
75
    '</td></tr></table>';
 
76
};
 
77
 
 
78
/**
 
79
 * Mesasge for getting a webgl browser
 
80
 * @type {string}
 
81
 */
 
82
var GET_A_WEBGL_BROWSER = '' +
 
83
  'This page requires a browser that supports WebGL.<br/>' +
 
84
  '<a href="http://get.webgl.org">Click here to upgrade your browser.</a>';
 
85
 
 
86
/**
 
87
 * Mesasge for need better hardware
 
88
 * @type {string}
 
89
 */
 
90
var OTHER_PROBLEM = '' +
 
91
  "It doesn't appear your computer can support WebGL.<br/>" +
 
92
  '<a href="http://get.webgl.org/troubleshooting/">Click here for more information.</a>';
 
93
 
 
94
/**
 
95
 * Creates a webgl context. If creation fails it will
 
96
 * change the contents of the container of the <canvas>
 
97
 * tag to an error message with the correct links for WebGL.
 
98
 * @param {Element} canvas. The canvas element to create a
 
99
 *     context from.
 
100
 * @param {WebGLContextCreationAttirbutes} opt_attribs Any
 
101
 *     creation attributes you want to pass in.
 
102
 * @param {function:(msg)} opt_onError An function to call
 
103
 *     if there is an error during creation.
 
104
 * @return {WebGLRenderingContext} The created context.
 
105
 */
 
106
var setupWebGL = function(canvas, opt_attribs, opt_onError) {
 
107
  function handleCreationError(msg) {
 
108
    var container = canvas.parentNode;
 
109
    if (container) {
 
110
      var str = window.WebGLRenderingContext ?
 
111
           OTHER_PROBLEM :
 
112
           GET_A_WEBGL_BROWSER;
 
113
      if (msg) {
 
114
        str += "<br/><br/>Status: " + msg;
 
115
      }
 
116
      container.innerHTML = makeFailHTML(str);
 
117
    }
 
118
  };
 
119
 
 
120
  opt_onError = opt_onError || handleCreationError;
 
121
 
 
122
  if (canvas.addEventListener) {
 
123
    canvas.addEventListener("webglcontextcreationerror", function(event) {
 
124
          opt_onError(event.statusMessage);
 
125
        }, false);
 
126
  }
 
127
  var context = create3DContext(canvas, opt_attribs);
 
128
  if (!context) {
 
129
    if (!window.WebGLRenderingContext) {
 
130
      opt_onError("");
 
131
    }
 
132
  }
 
133
  return context;
 
134
};
 
135
 
 
136
/**
 
137
 * Creates a webgl context.
 
138
 * @param {!Canvas} canvas The canvas tag to get context
 
139
 *     from. If one is not passed in one will be created.
 
140
 * @return {!WebGLContext} The created context.
 
141
 */
 
142
var create3DContext = function(canvas, opt_attribs) {
 
143
  var names = ["webgl", "experimental-webgl", "webkit-3d", "moz-webgl"];
 
144
  var context = null;
 
145
  for (var ii = 0; ii < names.length; ++ii) {
 
146
    try {
 
147
      context = canvas.getContext(names[ii], opt_attribs);
 
148
    } catch(e) {}
 
149
    if (context) {
 
150
      break;
 
151
    }
 
152
  }
 
153
  return context;
 
154
}
 
155
 
 
156
return {
 
157
  create3DContext: create3DContext,
 
158
  setupWebGL: setupWebGL
 
159
};
 
160
}();
 
161
 
 
162
/**
 
163
 * Provides requestAnimationFrame in a cross browser way.
 
164
 */
 
165
window.requestAnimFrame = (function() {
 
166
  return window.requestAnimationFrame ||
 
167
         window.webkitRequestAnimationFrame ||
 
168
         window.mozRequestAnimationFrame ||
 
169
         window.oRequestAnimationFrame ||
 
170
         window.msRequestAnimationFrame ||
 
171
         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
 
172
           window.setTimeout(callback, 1000/60);
 
173
         };
 
174
})();
 
 
b'\\ No newline at end of file'