Find vertex attribute indices in advance
This commit is contained in:
parent
5885189b04
commit
81f9b8e040
@ -26,8 +26,7 @@ fn compile_shader(
|
||||
// load the given data into the vertex input of the given name
|
||||
fn bind_vertex_attrib(
|
||||
context: &WebGl2RenderingContext,
|
||||
program: &WebGlProgram,
|
||||
name: &str,
|
||||
index: u32,
|
||||
size: i32,
|
||||
data: &[f32]
|
||||
) {
|
||||
@ -48,11 +47,8 @@ fn bind_vertex_attrib(
|
||||
);
|
||||
}
|
||||
|
||||
// find the target attribute in the program's attribute list
|
||||
let attrib_index = context.get_attrib_location(&program, name);
|
||||
|
||||
// allow the target attribute to be used
|
||||
context.enable_vertex_attrib_array(attrib_index as u32);
|
||||
context.enable_vertex_attrib_array(index);
|
||||
|
||||
// take whatever's bound to ARRAY_BUFFER---here, the data buffer created
|
||||
// above---and bind it to the target attribute
|
||||
@ -60,7 +56,7 @@ fn bind_vertex_attrib(
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/vertexAttribPointer
|
||||
//
|
||||
context.vertex_attrib_pointer_with_i32(
|
||||
attrib_index as u32,
|
||||
index,
|
||||
size,
|
||||
WebGl2RenderingContext::FLOAT,
|
||||
false, // don't normalize
|
||||
@ -150,6 +146,10 @@ fn main() {
|
||||
console::log_1(&JsValue::from(link_msg));
|
||||
ctx.use_program(Some(&program));
|
||||
|
||||
// find indices of vertex attributes
|
||||
let position_index = ctx.get_attrib_location(&program, "position") as u32;
|
||||
let color_index = ctx.get_attrib_location(&program, "color") as u32;
|
||||
|
||||
// create a vertex array and bind it to the graphics context
|
||||
let vertex_array = ctx.create_vertex_array().unwrap();
|
||||
ctx.bind_vertex_array(Some(&vertex_array));
|
||||
@ -174,7 +174,7 @@ fn main() {
|
||||
-1.0, -1.0, -7.0,
|
||||
1.0, -1.0, -7.0
|
||||
];
|
||||
bind_vertex_attrib(&ctx, &program, "position", 3, &positions);
|
||||
bind_vertex_attrib(&ctx, position_index, 3, &positions);
|
||||
|
||||
// set the vertex colors
|
||||
let colors: [f32; 3*VERTEX_CNT] = [
|
||||
@ -191,7 +191,7 @@ fn main() {
|
||||
0.5, 0.0, 1.0,
|
||||
0.5, 0.0, 1.0
|
||||
];
|
||||
bind_vertex_attrib(&ctx, &program, "color", 3, &colors);
|
||||
bind_vertex_attrib(&ctx, color_index, 3, &colors);
|
||||
|
||||
// clear the screen and draw the scene
|
||||
ctx.clear_color(0.0, 0.0, 0.0, 1.0);
|
||||
|
Loading…
Reference in New Issue
Block a user