feat: 传入uniform

This commit is contained in:
meishibiezb
2026-03-05 03:46:00 +08:00
parent eeb3d016c8
commit 91fb640d37
2 changed files with 34 additions and 4 deletions

View File

@@ -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()) };
}

View File

@@ -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;
}