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
|
// load the given data into the vertex input of the given name
|
||||||
fn bind_vertex_attrib(
|
fn bind_vertex_attrib(
|
||||||
context: &WebGl2RenderingContext,
|
context: &WebGl2RenderingContext,
|
||||||
program: &WebGlProgram,
|
index: u32,
|
||||||
name: &str,
|
|
||||||
size: i32,
|
size: i32,
|
||||||
data: &[f32]
|
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
|
// 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
|
// take whatever's bound to ARRAY_BUFFER---here, the data buffer created
|
||||||
// above---and bind it to the target attribute
|
// 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
|
// https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/vertexAttribPointer
|
||||||
//
|
//
|
||||||
context.vertex_attrib_pointer_with_i32(
|
context.vertex_attrib_pointer_with_i32(
|
||||||
attrib_index as u32,
|
index,
|
||||||
size,
|
size,
|
||||||
WebGl2RenderingContext::FLOAT,
|
WebGl2RenderingContext::FLOAT,
|
||||||
false, // don't normalize
|
false, // don't normalize
|
||||||
@ -150,6 +146,10 @@ fn main() {
|
|||||||
console::log_1(&JsValue::from(link_msg));
|
console::log_1(&JsValue::from(link_msg));
|
||||||
ctx.use_program(Some(&program));
|
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
|
// create a vertex array and bind it to the graphics context
|
||||||
let vertex_array = ctx.create_vertex_array().unwrap();
|
let vertex_array = ctx.create_vertex_array().unwrap();
|
||||||
ctx.bind_vertex_array(Some(&vertex_array));
|
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,
|
||||||
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
|
// set the vertex colors
|
||||||
let colors: [f32; 3*VERTEX_CNT] = [
|
let colors: [f32; 3*VERTEX_CNT] = [
|
||||||
@ -191,7 +191,7 @@ fn main() {
|
|||||||
0.5, 0.0, 1.0,
|
0.5, 0.0, 1.0,
|
||||||
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
|
// clear the screen and draw the scene
|
||||||
ctx.clear_color(0.0, 0.0, 0.0, 1.0);
|
ctx.clear_color(0.0, 0.0, 0.0, 1.0);
|
||||||
|
Loading…
Reference in New Issue
Block a user