Tool Request: 271935888 - create_file
{"file_name":"index.html","content":"<!DOCTYPE html>\n<html><head><title>WebGL Demo</title></head>\n<body>\n<canvas id=\"glCanvas\" width=\"800\" height=\"600\"></canvas>\n<script>\nconst canvas = document.getElementById('glCanvas');\nconst gl = canvas.getContext('webgl');\n\nif (!gl) {\n alert('WebGL not supported');\n}\n\n// Vertex shader\nconst vertexShaderSource = `#version 300 es\nattribute vec2 a_position;\nvoid main() {\n gl_Position = vec4(a_position, 0.0, 1.0);\n}\n`;\n\n// Fragment shader\nconst fragmentShaderSource = `#version 300 es\nprecision mediump float;\nuniform vec4 u_color;\nvoid main() {\n gl_FragColor = u_color;\n}\n`;\n\nfunction createShader(type, source) {\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('Shader compile error:', gl.getShaderInfoLog(shader));\n gl.deleteShader(shader);\n return null;\n }\n return shader;\n}\n\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('Program link error:', gl.getProgramInfoLog(program));\n gl.deleteProgram(program);\n return null;\n }\n return program;\n}\n\nconst vertexShader = createShader(gl.VERTEX_SHADER, vertexShaderSource);\nconst fragmentShader = createShader(gl.FRAGMENT_SHADER, fragmentShaderSource);\n\nif (vertexShader && fragmentShader) {\n const program = createProgram(vertexShader, fragmentShader);\n if (program) {\n gl.useProgram(program);\n\n // Set up a simple square\n const positions = new Float32Array([\n -0.5, -0.5,\n 0.5, -0.5,\n 0.5, 0.5,\n -0.5, 0.5\n ]);\n\n const positionBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, positions, gl.STATIC_DRAW);\n\n const aPosition = gl.getAttribLocation(program, 'a_position');\n gl.enableVertexAttribArray(aPosition);\n gl.vertexAttribPointer(aPosition, 2, gl.FLOAT, false, 0, 0);\n\n // Set the color uniform\n const uColor = gl.getUniformLocation(program, 'u_color');\n gl.uniform4f(uColor, 1.0, 0.0, 0.0, 1.0);\n\n // Render\n gl.clearColor(0.0, 0.0, 0.0, 1.0);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.drawArrays(gl.TRIANGLE_FAN, 0, 4);\n }\n}\n</script>\n</body>\n</html>"}