Skip to content

Commit c30c92a

Browse files
committed
cavaGLSL
1 parent 52f4db1 commit c30c92a

File tree

7 files changed

+368
-12
lines changed

7 files changed

+368
-12
lines changed

include/modules/cava/cava.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,20 @@ class Cava final : public ALabel, public sigc::trackable {
99
public:
1010
Cava(const std::string&, const Json::Value&);
1111
~Cava() = default;
12-
auto onUpdate(const std::string& input) -> void;
13-
auto onSilence() -> void;
1412
auto doAction(const std::string& name) -> void override;
1513

1614
private:
1715
std::shared_ptr<CavaBackend> backend_;
1816
// Text to display
1917
Glib::ustring label_text_{""};
18+
bool silence_{false};
2019
bool hide_on_silence_{false};
2120
std::string format_silent_{""};
2221
int ascii_range_{0};
23-
bool silence_{false};
2422
// Cava method
2523
void pause_resume();
24+
auto onUpdate(const std::string& input) -> void;
25+
auto onSilence() -> void;
2626
// ModuleActionMap
2727
static inline std::map<const std::string, void (waybar::modules::cava::Cava::* const)()>
2828
actionMap_{{"mode", &waybar::modules::cava::Cava::pause_resume}};

include/modules/cava/cavaGLSL.hpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#pragma once
2+
3+
#include <GL/gl.h>
4+
5+
#include "AModule.hpp"
6+
#include "cava_backend.hpp"
7+
8+
namespace waybar::modules::cava {
9+
10+
class CavaGLSL final : public AModule, public Gtk::GLArea {
11+
public:
12+
CavaGLSL(const std::string&, const Json::Value&);
13+
~CavaGLSL() = default;
14+
15+
private:
16+
std::shared_ptr<CavaBackend> backend_;
17+
struct ::cava::config_params prm_;
18+
int frame_counter{0};
19+
bool silence_{false};
20+
bool hide_on_silence_{false};
21+
// Cava method
22+
auto onUpdate(const ::cava::audio_raw& input) -> void;
23+
auto onSilence() -> void;
24+
// Member variable to store the shared pointer
25+
std::shared_ptr<::cava::audio_raw> m_data_;
26+
GLuint shaderProgram_;
27+
// OpenGL variables
28+
GLuint fbo_;
29+
GLuint texture_;
30+
GLint uniform_bars_;
31+
GLint uniform_previous_bars_;
32+
GLint uniform_bars_count_;
33+
GLint uniform_time_;
34+
// Methods
35+
void onRealize();
36+
bool onRender(const Glib::RefPtr<Gdk::GLContext>& context);
37+
38+
void initShaders();
39+
void initSurface();
40+
void initGLSL();
41+
GLuint loadShader(const std::string& fileName, GLenum type);
42+
};
43+
} // namespace waybar::modules::cava

include/modules/cava/cava_backend.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,14 @@ class CavaBackend final {
3232
int getAsciiRange();
3333
void doPauseResume();
3434
void Update();
35+
const struct ::cava::config_params* getPrm();
36+
std::chrono::milliseconds getFrameTimeMilsec();
37+
3538
// Signal accessor
3639
using type_signal_update = sigc::signal<void(const std::string&)>;
3740
type_signal_update signal_update();
41+
using type_signal_audio_raw_update = sigc::signal<void(const ::cava::audio_raw&)>;
42+
type_signal_audio_raw_update signal_audio_raw_update();
3843
using type_signal_silence = sigc::signal<void()>;
3944
type_signal_silence signal_silence();
4045

@@ -73,6 +78,7 @@ class CavaBackend final {
7378

7479
// Signal
7580
type_signal_update m_signal_update_;
81+
type_signal_audio_raw_update m_signal_audio_raw_;
7682
type_signal_silence m_signal_silence_;
7783
};
7884
} // namespace waybar::modules::cava

meson.build

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -503,10 +503,18 @@ cava = dependency('libcava',
503503
fallback : ['libcava', 'cava_dep'],
504504
not_found_message: 'cava is not found. Building waybar without cava')
505505

506+
eproxy = dependency('epoxy', required: false)
507+
506508
if cava.found()
507509
add_project_arguments('-DHAVE_LIBCAVA', language: 'cpp')
508-
src_files += files('src/modules/cava/cava.cpp', 'src/modules/cava/cava_backend.cpp')
510+
src_files += files('src/modules/cava/cava.cpp',
511+
'src/modules/cava/cava_backend.cpp')
509512
man_files += files('man/waybar-cava.5.scd')
513+
514+
if eproxy.found()
515+
add_project_arguments('-DHAVE_LIBCAVAGLSL', language: 'cpp')
516+
src_files += files('src/modules/cava/cavaGLSL.cpp')
517+
endif
510518
endif
511519

512520
if libgps.found()
@@ -554,6 +562,7 @@ executable(
554562
tz_dep,
555563
xkbregistry,
556564
cava,
565+
eproxy,
557566
libgps
558567
],
559568
include_directories: inc_dirs,

src/factory.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@
110110
#endif
111111
#ifdef HAVE_LIBCAVA
112112
#include "modules/cava/cava.hpp"
113+
#ifdef HAVE_LIBCAVAGLSL
114+
#include "modules/cava/cavaGLSL.hpp"
115+
#endif
113116
#endif
114117
#ifdef HAVE_SYSTEMD_MONITOR
115118
#include "modules/systemd_failed_units.hpp"
@@ -344,6 +347,10 @@ waybar::AModule* waybar::Factory::makeModule(const std::string& name,
344347
#ifdef HAVE_LIBCAVA
345348
if (ref == "cava") {
346349
return new waybar::modules::cava::Cava(id, config_[name]);
350+
#ifdef HAVE_LIBCAVAGLSL
351+
} else if (ref == "cavaGLSL") {
352+
return new waybar::modules::cava::CavaGLSL(id, config_[name]);
353+
#endif
347354
}
348355
#endif
349356
#ifdef HAVE_SYSTEMD_MONITOR

0 commit comments

Comments
 (0)