From b0a3bc3f3dbc405aff6329fb0e19ac9da7c97234 Mon Sep 17 00:00:00 2001 From: Clemens Albrecht Date: Fri, 11 Apr 2025 10:43:28 +0200 Subject: [PATCH] move shaders to files --- README.md | 4 ++++ data/main.frag | 6 ++++++ data/main.vert | 8 ++++++++ src/main.rs | 39 ++++++++++++++++----------------------- 4 files changed, 34 insertions(+), 23 deletions(-) create mode 100644 README.md create mode 100644 data/main.frag create mode 100644 data/main.vert diff --git a/README.md b/README.md new file mode 100644 index 0000000..7be96b6 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# Opengl-Starter + +This is a template for developing an OpenGL based application in Rust. +It targets OpenGL Core 4.6 on Linux. diff --git a/data/main.frag b/data/main.frag new file mode 100644 index 0000000..43d4866 --- /dev/null +++ b/data/main.frag @@ -0,0 +1,6 @@ +#version 460 core +in vec3 ourColor; +out vec4 FragColor; +void main() { + FragColor = vec4(ourColor, 1.0); +} diff --git a/data/main.vert b/data/main.vert new file mode 100644 index 0000000..84b0200 --- /dev/null +++ b/data/main.vert @@ -0,0 +1,8 @@ +#version 460 core +layout(location = 0) in vec3 aPos; +layout(location = 1) in vec3 aColor; +out vec3 ourColor; +void main() { + gl_Position = vec4(aPos, 1.0); + ourColor = aColor; +} diff --git a/src/main.rs b/src/main.rs index 9f5cbaf..f9a93c3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,14 +7,14 @@ use glow::{Context, HasContext, NativeProgram, NativeVertexArray}; use glutin::{ config::{ConfigSurfaceTypes, ConfigTemplateBuilder}, - context::{ContextAttributesBuilder, GlProfile, PossiblyCurrentContext}, + context::{ContextApi, ContextAttributesBuilder, GlProfile, PossiblyCurrentContext, Version}, display::GetGlDisplay, prelude::*, surface::{Surface, SurfaceAttributesBuilder, WindowSurface}, }; use glutin_winit::DisplayBuilder; use raw_window_handle::HasRawWindowHandle; -use std::{error::Error, ffi::CString}; +use std::{error::Error, ffi::CString, fs::File, io::Read, path::Path}; use winit::{ application::ApplicationHandler, event::WindowEvent, @@ -97,6 +97,16 @@ impl ApplicationHandler for App { } fn main() -> Result<(), Box> { + let mut vert_shader_file = + File::open(Path::new("./data/main.vert")).expect("Didn't find vertex shader"); + let mut vert_shader_src = "".to_string(); + vert_shader_file.read_to_string(&mut vert_shader_src)?; + + let mut frag_shader_file = + File::open(Path::new("./data/main.frag")).expect("Didn't find fragment shader"); + let mut frag_shader_src = "".to_string(); + frag_shader_file.read_to_string(&mut frag_shader_src)?; + // Create an event loop let event_loop = EventLoop::new().unwrap(); event_loop.set_control_flow(ControlFlow::Poll); @@ -133,8 +143,9 @@ fn main() -> Result<(), Box> { // Create OpenGL context attributes let context_attributes = ContextAttributesBuilder::new() + .with_context_api(ContextApi::OpenGl(Some(Version::new(4, 6)))) .with_profile(GlProfile::Core) - .build(None); + .build(window.raw_window_handle().ok()); // Create the OpenGL surface attributes let surface_attributes = SurfaceAttributesBuilder::::new().build( @@ -177,17 +188,7 @@ fn main() -> Result<(), Box> { let vertex_shader = gl .create_shader(glow::VERTEX_SHADER) .expect("Cannot create shader"); - let vertex_shader_src = r#" - #version 330 core - layout (location = 0) in vec3 aPos; - layout (location = 1) in vec3 aColor; - out vec3 ourColor; - void main() { - gl_Position = vec4(aPos, 1.0); - ourColor = aColor; - } - "#; - gl.shader_source(vertex_shader, vertex_shader_src); + gl.shader_source(vertex_shader, &vert_shader_src); gl.compile_shader(vertex_shader); // Check for shader compilation errors @@ -200,15 +201,7 @@ fn main() -> Result<(), Box> { let fragment_shader = gl .create_shader(glow::FRAGMENT_SHADER) .expect("Cannot create shader"); - let fragment_shader_src = r#" - #version 330 core - in vec3 ourColor; - out vec4 FragColor; - void main() { - FragColor = vec4(ourColor, 1.0); - } - "#; - gl.shader_source(fragment_shader, fragment_shader_src); + gl.shader_source(fragment_shader, &frag_shader_src); gl.compile_shader(fragment_shader); // Check for shader compilation errors