feat: 传入uniform
This commit is contained in:
32
src/main.rs
32
src/main.rs
@@ -88,7 +88,9 @@ fn main() {
|
||||
unsafe { gl::BindVertexArray(vao) };
|
||||
|
||||
// 创建VBO
|
||||
let a: [f32; _] = [-0.5, -0.5, 0.0, 0.5, -0.5, 0.0, 0.0, 0.5, 0.0];
|
||||
let a: [f32; _] = [
|
||||
0.5, 0.5, 0.0, 0.5, -0.5, 0.0, -0.5, -0.5, 0.0, -0.5, 0.5, 0.0,
|
||||
];
|
||||
let mut vbo: u32 = 0;
|
||||
unsafe { gl::GenBuffers(1, &mut vbo) };
|
||||
unsafe { gl::BindBuffer(gl::ARRAY_BUFFER, vbo) };
|
||||
@@ -114,6 +116,20 @@ fn main() {
|
||||
};
|
||||
unsafe { gl::EnableVertexAttribArray(0) };
|
||||
|
||||
// 创建EBO
|
||||
let b: [u32; _] = [0, 1, 3, 1, 2, 3];
|
||||
let mut ebo = 0;
|
||||
unsafe { gl::GenBuffers(1, &mut ebo) };
|
||||
unsafe { gl::BindBuffer(gl::ELEMENT_ARRAY_BUFFER, ebo) };
|
||||
unsafe {
|
||||
gl::BufferData(
|
||||
gl::ELEMENT_ARRAY_BUFFER,
|
||||
size_of_val(&b) as _,
|
||||
b.as_ptr() as _,
|
||||
gl::STATIC_DRAW,
|
||||
)
|
||||
};
|
||||
|
||||
// 渲染循环
|
||||
while !window.should_close() {
|
||||
glfw.poll_events();
|
||||
@@ -135,11 +151,23 @@ fn handle_window_event(window: &mut glfw::Window, event: glfw::WindowEvent) {
|
||||
}
|
||||
|
||||
fn render(render_timer: &mut RenderTimer, sp: u32, vao: u32) {
|
||||
// 设置背景颜色
|
||||
let t = render_timer.time_count() as f32 / 1000.0 as f32;
|
||||
unsafe { gl::ClearColor(t.sin() * 0.5 + 1.0, t.cos() * 0.5 + 1.0, 0.3, 1.0) };
|
||||
unsafe { gl::Clear(gl::COLOR_BUFFER_BIT) };
|
||||
|
||||
// 向着色器传入颜色
|
||||
let location = unsafe { gl::GetUniformLocation(sp, "inColor".as_ptr() as _) };
|
||||
unsafe { gl::Uniform4f(location, t.cos() * 0.5 + 1.0, t.sin() * 0.5 + 1.0, 0.7, 1.0) };
|
||||
|
||||
// 绘制图形
|
||||
unsafe { gl::UseProgram(sp) };
|
||||
unsafe { gl::BindVertexArray(vao) };
|
||||
unsafe { gl::DrawArrays(gl::TRIANGLES, 0, 3) };
|
||||
if (t as u32) % 2 == 1 {
|
||||
unsafe { gl::PolygonMode(gl::FRONT_AND_BACK, gl::LINE) };
|
||||
}
|
||||
else {
|
||||
unsafe { gl::PolygonMode(gl::FRONT_AND_BACK, gl::FILL) };
|
||||
}
|
||||
unsafe { gl::DrawElements(gl::TRIANGLES, 6, gl::UNSIGNED_INT, null()) };
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
#version 330 core
|
||||
out vec4 FragColor;
|
||||
|
||||
uniform vec4 inColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
FragColor = vec4(0.0, 0.8824, 1.0, 1.0);
|
||||
FragColor = inColor;
|
||||
}
|
||||
Reference in New Issue
Block a user