This JavaScript WebGL program demonstrates how color a point with a cteated texture, rather than an image file, and does it without using a buffer.
<!DOCTYPE html>
<html>
<head>
<title>XoaX.net's WebGL</title>
<script id="idVertexShader" type="c">
void main() {
gl_Position = vec4(-0.3, 0.2, 0.0, 1.0);
gl_PointSize = 200.0;
}
</script>
<script id="idFragmantShader" type="c">
precision mediump float;
uniform sampler2D usamp2D;
void main() {
gl_FragColor = texture2D(usamp2D, gl_PointCoord.xy);
}
</script>
</head>
<body onload="Render()">
<script>
function Render() {
// Get A WebGL context
var qCanvas = document.querySelector("#idWebGL");
var qGL = qCanvas.getContext("webgl");
// The Vertex Shader
var sVertextShaderCode = document.querySelector("#idVertexShader").text;
var qVertexShader = qGL.createShader(qGL.VERTEX_SHADER);
qGL.shaderSource(qVertexShader, sVertextShaderCode);
qGL.compileShader(qVertexShader);
// The Fragment Shader
var sFragShaderCode = document.querySelector("#idFragmantShader").text;
var qFragmentShader = qGL.createShader(qGL.FRAGMENT_SHADER);
qGL.shaderSource(qFragmentShader, sFragShaderCode);
qGL.compileShader(qFragmentShader);
// Compile and link the program
var qProgram = qGL.createProgram();
qGL.attachShader(qProgram, qVertexShader);
qGL.attachShader(qProgram, qFragmentShader);
qGL.linkProgram(qProgram);
// Deallocate
qGL.detachShader(qProgram, qVertexShader);
qGL.detachShader(qProgram, qFragmentShader);
qGL.deleteShader(qVertexShader);
qGL.deleteShader(qFragmentShader);
qGL.clearColor(0.75, 0.75, 0.75, 1.0);
qGL.clear(qGL.COLOR_BUFFER_BIT);
// A 2x2 image
const kuiPixelData = new Uint8Array([
0x00, 0x00, 0x88, 0xFF, // Blue
0xFF, 0x00, 0x00, 0xFF, // Red
0xFF, 0x00, 0x00, 0xFF, // Red
0xFF, 0xFF, 0xFF, 0xFF // White
]);
const kqTexture = qGL.createTexture();
qGL.bindTexture(qGL.TEXTURE_2D, kqTexture);
qGL.texImage2D(qGL.TEXTURE_2D,
0, // Level
qGL.RGBA, // Format (Internal)
2, // Width
2, // Height
0, // Border
qGL.RGBA, // Format
qGL.UNSIGNED_BYTE, // Channel Data Type
kuiPixelData, // Pixel Data
);
qGL.texParameteri(qGL.TEXTURE_2D, qGL.TEXTURE_MIN_FILTER, qGL.NEAREST);
qGL.texParameteri(qGL.TEXTURE_2D, qGL.TEXTURE_MAG_FILTER, qGL.NEAREST);
qGL.useProgram(qProgram);
qGL.drawArrays(qGL.POINTS, 0, 1);
// Deallocate
qGL.useProgram(null);
if (qProgram) qGL.deleteProgram(qProgram);
}
</script>
<canvas id="idWebGL" width="400", height="400" style="border:1px solid #444444"></canvas>
</body>
</html>© 20072025 XoaX.net LLC. All rights reserved.