From 91fb640d374d8e83951d6c7da59ec00da90bbfe2 Mon Sep 17 00:00:00 2001 From: meishibiezb <750783119@qq.com> Date: Thu, 5 Mar 2026 03:46:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=A0=E5=85=A5uniform?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.rs | 34 +++++++++++++++++++++++++++++++--- src/shaders/fs.frag | 4 +++- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 049f037..8cb8456 100644 --- a/src/main.rs +++ b/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(); @@ -121,7 +137,7 @@ fn main() { handle_window_event(&mut window, event); } - render(&mut render_timer, sp ,vao); + render(&mut render_timer, sp, vao); window.swap_buffers(); } @@ -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()) }; } diff --git a/src/shaders/fs.frag b/src/shaders/fs.frag index 5a532b8..8b63fee 100644 --- a/src/shaders/fs.frag +++ b/src/shaders/fs.frag @@ -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; } \ No newline at end of file