doc_shader-order.html 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <!-- Any copyright is dedicated to the Public Domain.
  2. http://creativecommons.org/publicdomain/zero/1.0/ -->
  3. <!doctype html>
  4. <html>
  5. <head>
  6. <meta charset="utf-8"/>
  7. <title>WebGL editor test page</title>
  8. <script id="shader-vs" type="x-shader/x-vertex">
  9. precision lowp float;
  10. void main(void) {
  11. gl_Position = vec4(0, 0, 0, 1); // I'm a vertex shader!
  12. }
  13. </script>
  14. <script id="shader-fs" type="x-shader/x-fragment">
  15. precision lowp float;
  16. varying vec3 vFragmentColor;
  17. void main(void) {
  18. gl_FragColor = vec4(1, 0, 0, 1); // I'm a fragment shader!
  19. }
  20. </script>
  21. </head>
  22. <body>
  23. <canvas width="512" height="512"></canvas>
  24. <script type="text/javascript;version=1.8">
  25. "use strict";
  26. let canvas, gl;
  27. window.onload = function() {
  28. canvas = document.querySelector("canvas");
  29. gl = canvas.getContext("webgl", { preserveDrawingBuffer: true });
  30. let shaderProgram = gl.createProgram();
  31. let vertexShader, fragmentShader;
  32. // Compile and attach the shaders in a random order. The test will
  33. // ensure that the correct vertex and fragment source is retrieved
  34. // regardless of this crazyness.
  35. if (Math.random() > 0.5) {
  36. vertexShader = getShader(gl, "shader-vs");
  37. fragmentShader = getShader(gl, "shader-fs");
  38. } else {
  39. fragmentShader = getShader(gl, "shader-fs");
  40. vertexShader = getShader(gl, "shader-vs");
  41. }
  42. if (Math.random() > 0.5) {
  43. gl.attachShader(shaderProgram, vertexShader);
  44. gl.attachShader(shaderProgram, fragmentShader);
  45. } else {
  46. gl.attachShader(shaderProgram, fragmentShader);
  47. gl.attachShader(shaderProgram, vertexShader);
  48. }
  49. gl.linkProgram(shaderProgram);
  50. }
  51. function getShader(gl, id) {
  52. let script = document.getElementById(id);
  53. let source = script.textContent;
  54. let shader;
  55. if (script.type == "x-shader/x-fragment") {
  56. shader = gl.createShader(gl.FRAGMENT_SHADER);
  57. } else if (script.type == "x-shader/x-vertex") {
  58. shader = gl.createShader(gl.VERTEX_SHADER);
  59. }
  60. gl.shaderSource(shader, source);
  61. gl.compileShader(shader);
  62. return shader;
  63. }
  64. </script>
  65. </body>
  66. </html>