Tool Request: 179853862 - create_file
{"content":"<!DOCTYPE html>\n<html>\n<head>\n <title>WebGL Shader Demo</title>\n <style>body { margin: 0; } canvas { display: block; }</style>\n</head>\n<body>\n<canvas id=\"glCanvas\"></canvas>\n<script>\nconst canvas = document.getElementById('glCanvas');\ncanvas.width = window.innerWidth;\ncanvas.height = window.innerHeight;\n\nconst gl = canvas.getContext('webgl');\nif (!gl) {\n alert('WebGL not supported');\n}\n\n// Vertex shader source code\nconst vsSource = ` \nattribute vec2 a_position;\nvoid main() {\n gl_Position = vec4(a_position, 0.0, 1.0);\n}\n`;\n\n// Fragment shader source code\nconst fsSource = ` \nprecision mediump float;\nvoid main() {\n gl_FragColor = vec4(1, 0, 0, 1); // Red color\n}\n`;\n\n// Compile shader\nfunction compileShader(source, type) {\n const shader = gl.createShader(type);\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n console.error('An error occurred compiling the shaders: ' + gl.getShaderInfoLog(shader));\n return null;\n }\n return shader;\n}\n\n// Link program\nfunction createProgram(vertexShader, fragmentShader) {\n const program = gl.createProgram();\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n console.error('Unable to initialize the shader program: ' + gl.getProgramInfoLog(program));\n return null;\n }\n return program;\n}\n\n// Create shaders\nconst vertexShader = compileShader(vsSource, gl.VERTEX_SHADER);\nconst fragmentShader = compileShader(fsSource, gl.FRAGMENT_SHADER);\n\n// Create program\nconst program = createProgram(vertexShader, fragmentShader);\n\n// Set up buffer for a triangle\nconst positionBuffer = gl.createBuffer();\ngl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n\n// Define positions for a triangle\nconst positions = [\n 0.0, 0.5,\n -0.5, -0.5,\n 0.5, -0.5\n];\ngl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);\n\n// Use the program and set up attributes\ngl.useProgram(program);\nconst aPositionLocation = gl.getAttribLocation(program, 'a_position');\ngl.enableVertexAttribArray(aPositionLocation);\ngl.vertexAttribPointer(aPositionLocation, 2, gl.FLOAT, false, 0, 0);\n\n// Draw the triangle\ngl.drawArrays(gl.TRIANGLES, 0, 3);\n</script>\n</body>\n</html>","file_name":"index.html"}