/** * paradiso - Paradigmen der Softwareentwicklung * * (c) Copyright 2023 Hartmut Seichter * */ #include #include #include #include #include #include #include #include #include void setup_shaders(paradiso::Shader& shader) { const auto unlit_v = R"( #version 330 core layout (location = 0) in vec3 vertices; layout (location = 1) in vec3 normals; layout (location = 2) in vec2 texture_coords; uniform vec4 pivot = vec4( 0.5, 0.5, 0.0, 1.0 ); out vec2 tex_c; void main() { tex_c = texture_coords; gl_Position = vec4(vertices, 1.0) + pivot; } )"; const auto unlit_f = R"( #version 330 core uniform vec4 color = vec4(1.0, 0.0, 0.0, 1.0); uniform sampler2D tex_color; in vec2 tex_c; out vec4 frag_color; void main() { frag_color = texture(tex_color,tex_c); // * color; })"; shader.set_source(paradiso::Shader::Type::Vertex, unlit_v); shader.set_source(paradiso::Shader::Type::Fragment, unlit_f); shader.build(); } auto main() -> int { auto window = paradiso::Window(); window.set_size(paradiso::Size{.width = 1280, .height = 720}) .set_position(paradiso::Point{.x = 100, .y = 100}) .set_title("PardiSO") .set_visible(true); auto ctx = paradiso::Context{}; auto sprite = paradiso::Sprite { .bitmap = paradiso::Bitmap::from_data( paradiso::Size{2, 2}, paradiso::RGBA::from_rgba(0x00, 0xFF, 0x00, 0x80), // G paradiso::RGBA::from_rgba(0xFF, 0x00, 0x00, 0x80), // R paradiso::RGBA::from_rgba(0x00, 0x00, 0xFF, 0x80), // B paradiso::RGBA::from_rgba(0xFF, 0x00, 0xFF, 0x80)) // C }; auto renderer = paradiso::Renderer{}; auto shader = paradiso::Shader{}; setup_shaders(shader); uint8_t slider_value = 0xFF; bool want_close{false}; int frame_counter = 10; window.set_keyboardcallback( [&](auto& w, int key, int scancode, int action, int mods) { if (key == 'Q' || key == 256) want_close = true; else if (key == 'A' ) { slider_value += 10; } }); while (window.update([&](auto& w) -> bool { ctx.set_clearcolor(paradiso::RGBA::from_rgb(slider_value, slider_value, slider_value)); ctx.set_viewport(paradiso::Rectangle{ .size = w.client_size() }); ctx.clear(); renderer.draw(sprite, shader); return !want_close; })) { }; return 0; }