From ea057e4edafae6c13754e0cff95109f4a44a7909 Mon Sep 17 00:00:00 2001
From: Tzanio Kolev
Date: Mon, 5 Jan 2026 11:55:17 -0800
Subject: [PATCH 1/9] Release branch for glvis-4.5
---
CHANGELOG | 5 +++--
CONTRIBUTING.md | 2 +-
README.md | 2 +-
share/Info.cmake.plist.in | 2 +-
share/Info.plist | 2 +-
vcpkg.json | 2 +-
6 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index edfb4987..11c70900 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -9,11 +9,12 @@
https://glvis.org
-Version 4.4.1 (development)
-===================================
+Version 4.5 released on Jan XX, 2026
+====================================
Unlike previous GLVis releases, this version requires a C++17 compiler.
+
Version 4.4 released on May 1, 2025
===================================
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 623a34a9..a607255a 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -3,7 +3,7 @@
-
+
diff --git a/README.md b/README.md
index ee4c3dee..8ba6d5da 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
https://glvis.org
-
+
diff --git a/share/Info.cmake.plist.in b/share/Info.cmake.plist.in
index 54d0ff0d..c4ab03bb 100644
--- a/share/Info.cmake.plist.in
+++ b/share/Info.cmake.plist.in
@@ -11,7 +11,7 @@
CFBundleIconFile
GLVis.icns
CFBundleShortVersionString
- 4.4
+ 4.5
CFBundleInfoDictionaryVersion
6.0
CFBundlePackageType
diff --git a/share/Info.plist b/share/Info.plist
index 609ed69b..e360a65a 100644
--- a/share/Info.plist
+++ b/share/Info.plist
@@ -11,7 +11,7 @@
CFBundleIconFile
GLVis.icns
CFBundleShortVersionString
- 4.4
+ 4.5
CFBundleInfoDictionaryVersion
6.0
CFBundlePackageType
diff --git a/vcpkg.json b/vcpkg.json
index 52846354..f689236a 100644
--- a/vcpkg.json
+++ b/vcpkg.json
@@ -1,7 +1,7 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg/master/scripts/vcpkg.schema.json",
"name": "glvis",
- "version": "4.4",
+ "version": "4.5",
"dependencies": [
"fontconfig",
"freetype",
From 89ad0b1f9ab8c565e264a194fbcd8474838d7956 Mon Sep 17 00:00:00 2001
From: Tzanio Kolev
Date: Mon, 2 Feb 2026 08:38:50 -0800
Subject: [PATCH 2/9] Updated CHANGELOG before glvis-4.5 release
---
CHANGELOG | 61 ++++++++++++++++++++++++-------------------------------
1 file changed, 27 insertions(+), 34 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index c87c3507..f6ab822e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -9,50 +9,43 @@
https://glvis.org
-Version 4.5 released on Jan XX, 2026
-====================================
+Version 4.5 released on Feb X, 2026
+===================================
Unlike previous GLVis releases, this version requires a C++17 compiler.
+- Added visualization of the finite element DOF numbering in 2D scalar mode,
+ with the 'n'/'N' keys that now cycles through: None → Elements → Edges →
+ Vertices → DOFs. In parallel, the default numbering is the "local" one for
+ each rank. This can be switched to "global" parallel numbering with Alt+n.
+
+- Added visualization of complex data for grid functions from MFEM's class
+ (Par)ComplexGridFunction. The complex values are represented by their
+ magnitude, phase, real part or imaginary part, which can be cycled with the
+ 'Q' key. Additionally, complex functions can be animated by an added harmonic
+ phase. The phase frequency, can be increased/decreased with keys ';'/':'.
+
+- Added the option to choose palettes by name using the command line argument
+ -pname or --palette-name. This option is also available in scripts and streams
+ using the keyword "palette_name".
+
- Added headless (no GUI) visualization, relying on the EGL (Linux) or CGL
- (MacOS) interface. It is available through '-hl' command-line option or
- 'headless' script command (before the visualization commands). The end of the
- loaded stream or script file ends the visualization in this mode. Note GLVis
- must be compiled with with EGL/CGL (see INSTALL).
-
-- Added non-persistent mode of the server, when the server terminates after all
- visualization windows are closed.
-
-- Added visualization of complex function data originating from
- '(Par)ComplexGridFunction' class in MFEM. The complex values are represented
- by their magnitude, phase, real part or imaginary part, which can be switched
- by 'Q' key. Additionally, the complex function can be animated by an added
- harmonic phase. To increase or decrease the phase frequency, use ';' or ':',
- respectively.
-
-- Implemented DOF numbering in 2D scalar mode, pressing the `n` or `N` key cycles
- through: None → Elements → Edges → Vertices → DOFs. Parallel numbering is now by
- default 'local' to each rank; 'global' vs. 'local' numbering can be toggled with
- 'Alt+n'.
-
-- Refactored code base enabling automatic generation of the script and stream
- command lists (shown as help when an unrecognized option is entered). Other
- improvements include:
- * Unified window initialization between the app and GLVis-js.
+ (macOS) interface. It is available through '-hl' command-line option or the
+ 'headless' script command (before the visualization commands). In this mode,
+ visualization ends at the end of the stream or script file. Note that GLVis
+ must be compiled with EGL/CGL (see INSTALL).
+
+- Refactored the code base to enable automatic generation of the script and
+ stream command lists. Other improvements include:
+ * Unified window initialization between the app and glvis-js.
* Unified handling of streams and improved data storage, enabling animation
of all data types.
* Fixed the flag for real attributes of distributed meshes.
* Fixed setting of padding digits for data collections.
* Fixed cycling of the vector-to-scalar function in 2D with raw data.
-- Implemented DOF numbering in 2D scalar mode, pressing the `n` or `N` key cycles
- through: None → Elements → Edges → Vertices → DOFs. Parallel numbering is now by
- default 'local' to each rank; 'global' vs. 'local' numbering can be toggled with
- 'Alt+n'.
-
-- Added the option to choose palettes by name using the command line argument
- '-pname' or '--palette-name'. This option is also available in scripts and
- streams using the keyword 'palette_name'.
+- Added non-persistent mode for the GLVis server, where the server terminates
+ after all visualization windows are closed.
- Color palettes defined in an external file can now also be specified in
scripts and streams using the keyword 'palette_file'.
From 7f65053c4a72e562d3528c5a40d98674365a2fb9 Mon Sep 17 00:00:00 2001
From: Tzanio Kolev
Date: Mon, 2 Feb 2026 10:06:39 -0800
Subject: [PATCH 3/9] Minor editing
---
.github/workflows/builds.yml | 2 --
.github/workflows/release.yml | 2 --
INSTALL | 2 +-
glvis.cpp | 1 -
lib/aux_js.cpp | 10 +++-------
lib/egl/egl.hpp | 2 +-
lib/egl/egl_main.cpp | 2 +-
lib/glwindow.hpp | 2 +-
lib/sdl/sdl_main.hpp | 2 --
lib/stream_reader.cpp | 2 +-
lib/threads.cpp | 2 +-
lib/vssolution.cpp | 4 ++--
12 files changed, 11 insertions(+), 22 deletions(-)
diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml
index c2541d67..63bd4956 100644
--- a/.github/workflows/builds.yml
+++ b/.github/workflows/builds.yml
@@ -9,8 +9,6 @@
# terms of the BSD-3 license. We welcome feedback and contributions, see file
# CONTRIBUTING.md for details.
-# GLVis - an OpenGL visualization server based on the MFEM library
-
name: builds
on:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index a324d622..7ccb07d5 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -9,8 +9,6 @@
# terms of the BSD-3 license. We welcome feedback and contributions, see file
# CONTRIBUTING.md for details.
-# GLVis - an OpenGL visualization server based on the MFEM library
-
name: release
on:
diff --git a/INSTALL b/INSTALL
index 10b6198c..e9db6c8b 100644
--- a/INSTALL
+++ b/INSTALL
@@ -11,7 +11,7 @@
GLVis is a multiplatform OpenGL application and can be built on Linux/Unix
systems, including Mac OS X, and under Windows.
-Besides a C++ compiler, GLVis depends on the following external packages:
+Besides a C++17 compiler, GLVis depends on the following external packages:
- the MFEM library (use the latest release) plus any libraries that MFEM was
built to depend on
diff --git a/glvis.cpp b/glvis.cpp
index 683d7b8a..1f87e2e4 100644
--- a/glvis.cpp
+++ b/glvis.cpp
@@ -9,7 +9,6 @@
// terms of the BSD-3 license. We welcome feedback and contributions, see file
// CONTRIBUTING.md for details.
-
// GLVis - an OpenGL visualization server based on the MFEM library
#include
diff --git a/lib/aux_js.cpp b/lib/aux_js.cpp
index 3fcfbd4b..7e68884b 100644
--- a/lib/aux_js.cpp
+++ b/lib/aux_js.cpp
@@ -88,13 +88,11 @@ void display(std::stringstream & commands, const int w, const int h)
SendExposeEvent();
}
-//
// StreamReader::ReadStream requires a list of unique_ptr to istream and since
// we cannot directly pass a list of string we need to repack the strings into
// a new list.
//
-// each string in streams must start with `parallel '
-//
+// Each string in streams must start with `parallel '
using StringArray = std::vector;
void processParallelStreams(DataState & state,
const StringArray & streams,
@@ -153,9 +151,8 @@ void displayStream(const std::string & stream, const int w, const int h)
display(ss, w, h);
}
-//
// update the existing stream
-//
+
int update(DataState & new_state)
{
double mesh_range = -1.0;
@@ -206,9 +203,8 @@ int updateParallelStreams(const StringArray & streams)
return update(new_state);
}
-//
// other methods
-//
+
void iterVisualization()
{
win.wnd->mainIter();
diff --git a/lib/egl/egl.hpp b/lib/egl/egl.hpp
index 9e8763e7..941d35ab 100644
--- a/lib/egl/egl.hpp
+++ b/lib/egl/egl.hpp
@@ -21,7 +21,7 @@
#endif
#ifdef GLVIS_USE_CGL
-#define GL_SILENCE_DEPRECATION // CGL has been deprecated since MacOS 10.14
+#define GL_SILENCE_DEPRECATION // CGL has been deprecated since macOS 10.14
#include
#endif
diff --git a/lib/egl/egl_main.cpp b/lib/egl/egl_main.cpp
index 073842d6..c3d8be6d 100644
--- a/lib/egl/egl_main.cpp
+++ b/lib/egl/egl_main.cpp
@@ -421,7 +421,7 @@ EglMainThread::Handle EglMainThread::CreateWindow(EglWindow *caller, int w,
return out_hnd;
}
-#endif //GLVIS_USE_EGL
+#endif // GLVIS_USE_EGL
#ifdef GLVIS_USE_CGL
if (!out_hnd.isInitialized()) { return out_hnd; }
CGLError err = CGLSetCurrentContext(out_hnd.ctx.get());
diff --git a/lib/glwindow.hpp b/lib/glwindow.hpp
index b0da9d50..81b3e8ca 100644
--- a/lib/glwindow.hpp
+++ b/lib/glwindow.hpp
@@ -147,7 +147,7 @@ class GLWindow
/// Set window position
virtual void setWindowPos(int x, int y) { }
- /// Returns true if the window has been succesfully initialized
+ /// Returns true if the window has been successfully initialized
virtual bool isWindowInitialized() const { return false; }
/// Returns true if the OpenGL context was successfully initialized
diff --git a/lib/sdl/sdl_main.hpp b/lib/sdl/sdl_main.hpp
index 339448d2..f4b7ace7 100644
--- a/lib/sdl/sdl_main.hpp
+++ b/lib/sdl/sdl_main.hpp
@@ -121,7 +121,6 @@ class SdlMainThread : public MainThread
bool terminating {false};
std::unique_ptr bg_wnd{nullptr, SDL_DestroyWindow};
- // -------------------------------------------------------------------------
// Objects for handling passing of window control commands to the main event
// loop.
@@ -130,7 +129,6 @@ class SdlMainThread : public MainThread
int num_windows {-1}; // -1: waiting for window to be created
- // -------------------------------------------------------------------------
// Objects for handling dispatching events from the main event loop to
// worker threads.
diff --git a/lib/stream_reader.cpp b/lib/stream_reader.cpp
index 5913fce1..67d6720b 100644
--- a/lib/stream_reader.cpp
+++ b/lib/stream_reader.cpp
@@ -110,7 +110,7 @@ bool StreamReader::CheckStreamIsComplex(std::istream &solin,
solin >> ws;
// Returning of the characters to stream(buffer) does not work reliably,
// so compare only the initial character, which fortunately does not
- // conincide with the header of FiniteElementSpace.
+ // coincide with the header of FiniteElementSpace.
return (solin.peek() == header[0]);
}
diff --git a/lib/threads.cpp b/lib/threads.cpp
index 4e553e50..d2827b11 100644
--- a/lib/threads.cpp
+++ b/lib/threads.cpp
@@ -1084,7 +1084,7 @@ void communication_thread::execute()
{
break;
}
- *is[np] >> ident >> ws; // "parallel"
+ *is[np] >> ident >> ws; // 'parallel'
if (ident != "parallel")
{
cout << "Expected keyword \"parallel\", got \"" << ident
diff --git a/lib/vssolution.cpp b/lib/vssolution.cpp
index 18eb1e2d..1cb5b8ea 100644
--- a/lib/vssolution.cpp
+++ b/lib/vssolution.cpp
@@ -2007,8 +2007,8 @@ void VisualizationSceneSolution::PrepareVertexNumbering()
}
else
{
- // Draw the vertices for each element. This is redundant,
- // except when the elements or domains are shrunk.
+ // Draw the vertices for each element. This is redundant, except when the
+ // elements or domains are shrunk.
for (int e = 0; e < mesh->GetNE(); e++)
{
if (!el_attr_to_show[mesh->GetAttribute(e) - 1]) { continue; }
From 2d1565d1a8d1274cf46b1ed10cebb06a37538d4f Mon Sep 17 00:00:00 2001
From: Jan Nikl
Date: Mon, 2 Feb 2026 10:42:07 -0800
Subject: [PATCH 4/9] Repointed data submodule to master.
---
tests/data | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/data b/tests/data
index f1d01ff0..2930875a 160000
--- a/tests/data
+++ b/tests/data
@@ -1 +1 @@
-Subproject commit f1d01ff03a5e1d2149e15adef506a803100b45ec
+Subproject commit 2930875afd504d9f6b4835de65abfd43c0338f0f
From 630276d7e9f724c72445434875ba5c814623e030 Mon Sep 17 00:00:00 2001
From: Jan Nikl
Date: Mon, 2 Feb 2026 10:45:48 -0800
Subject: [PATCH 5/9] Mentioned alpha palettes in Changelog.
---
CHANGELOG | 3 +++
1 file changed, 3 insertions(+)
diff --git a/CHANGELOG b/CHANGELOG
index f6ab822e..429462a7 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -50,6 +50,9 @@ Unlike previous GLVis releases, this version requires a C++17 compiler.
- Color palettes defined in an external file can now also be specified in
scripts and streams using the keyword 'palette_file'.
+- Added single-color palettes with a linear gradient of opacity to
+ share/palettes-variable-opacity.txt.
+
Version 4.4 released on May 1, 2025
===================================
From 668754b3370e67820c979b62122c1ca587dd938d Mon Sep 17 00:00:00 2001
From: Jan Nikl
Date: Mon, 2 Feb 2026 10:57:45 -0800
Subject: [PATCH 6/9] Updated code structure in Contributing.md.
---
CONTRIBUTING.md | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index a607255a..b45a9d3b 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -89,8 +89,10 @@ The GLVis source code has the following structure:
```
.
├── lib
- │ └── gl
- │ └── shaders
+ │ ├── egl
+ │ ├── gl
+ │ │ └── shaders
+ │ └── sdl
├── share
└── tests
```
From 1fd93f4efa8e4bd478e746591424dfe820c1b27e Mon Sep 17 00:00:00 2001
From: Jan Nikl
Date: Mon, 2 Feb 2026 14:38:16 -0800
Subject: [PATCH 7/9] Removed doxygen references.
---
CONTRIBUTING.md | 9 +++------
README.md | 1 -
2 files changed, 3 insertions(+), 7 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index b45a9d3b..a40ae44b 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -6,7 +6,6 @@
-
@@ -204,8 +203,8 @@ Before you can start, you need a GitHub account, here are a few suggestions:
change the code by default.
- Code specifics
- - All significant new classes, methods and functions have Doxygen-style
- documentation in source comments.
+ - All significant new classes, methods and functions have (preferably
+ Doxygen-style) documentation in source comments.
- Consistent code styling is enforced with `make style` in the top-level
directory. This requires [Artistic Style](http://astyle.sourceforge.net)
version 3.1 and MFEM's style configuration file, typically located in
@@ -267,10 +266,9 @@ Before a PR can be merged, it should satisfy the following:
- [ ] Check if `make distclean; git status` shows any files that were generated from the source by the project (not an IDE) but we don't want to track in the repository.
- [ ] Add new patterns (just for the new files above) and re-run the above test.
- [ ] New capability:
- - [ ] All significant new classes, methods and functions have Doxygen-style documentation in source comments.
+ - [ ] All significant new classes, methods and functions have (preferably Doxygen-style) documentation in source comments.
- [ ] Consider saving cool simulation pictures with the new capability in the Confluence gallery (LLNL only) or submitting them, via pull request, to the gallery section of the `glvis/web` repo.
- [ ] If this is a major new feature, consider mentioning it in the short summary inside `README` *(rare)*.
- - [ ] List major new classes in `doc/CodeDocumentation.dox` *(rare)*.
- [ ] Update this checklist, if the new pull request affects it.
@@ -312,7 +310,6 @@ Before a PR can be merged, it should satisfy the following:
```
- [ ] Create the release tarball and push to `glvis/releases`.
- [ ] Recreate the `next` branch as described in previous section.
-- [ ] Update and push documentation to `glvis/doxygen`.
- [ ] Update URL shortlinks:
- [ ] Create a shortlink at [http://bit.ly/](http://bit.ly/) for the release tarball, e.g. https://glvis.github.io/releases/glvis-3.1.tgz.
- [ ] (LLNL only) Add and commit the new shortlink in the `links` and `links-glvis` files of the internal `glvis/downloads` repo.
diff --git a/README.md b/README.md
index 8d83ef61..2a78818e 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,6 @@
-
From 07ec22c7b8a659a44f4b07a098872d6e47c55526 Mon Sep 17 00:00:00 2001
From: Jan Nikl
Date: Wed, 4 Feb 2026 10:00:06 -0800
Subject: [PATCH 8/9] Minor changes in CHANGELOG
---
CHANGELOG | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index 429462a7..8587a4d9 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -23,12 +23,15 @@ Unlike previous GLVis releases, this version requires a C++17 compiler.
(Par)ComplexGridFunction. The complex values are represented by their
magnitude, phase, real part or imaginary part, which can be cycled with the
'Q' key. Additionally, complex functions can be animated by an added harmonic
- phase. The phase frequency, can be increased/decreased with keys ';'/':'.
+ phase. The phase frequency can be increased/decreased with keys ';'/':'.
- Added the option to choose palettes by name using the command line argument
-pname or --palette-name. This option is also available in scripts and streams
using the keyword "palette_name".
+- Color palettes defined in an external file can now also be specified in
+ scripts and streams using the keyword 'palette_file'.
+
- Added headless (no GUI) visualization, relying on the EGL (Linux) or CGL
(macOS) interface. It is available through '-hl' command-line option or the
'headless' script command (before the visualization commands). In this mode,
@@ -47,9 +50,6 @@ Unlike previous GLVis releases, this version requires a C++17 compiler.
- Added non-persistent mode for the GLVis server, where the server terminates
after all visualization windows are closed.
-- Color palettes defined in an external file can now also be specified in
- scripts and streams using the keyword 'palette_file'.
-
- Added single-color palettes with a linear gradient of opacity to
share/palettes-variable-opacity.txt.
From 8b30e2d5f1ca30eaf74a90569a59acba5f778adc Mon Sep 17 00:00:00 2001
From: Jan Nikl
Date: Wed, 4 Feb 2026 10:06:53 -0800
Subject: [PATCH 9/9] Clarified numbering in CHANGELOG
---
CHANGELOG | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG b/CHANGELOG
index 8587a4d9..8b62197f 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -17,7 +17,8 @@ Unlike previous GLVis releases, this version requires a C++17 compiler.
- Added visualization of the finite element DOF numbering in 2D scalar mode,
with the 'n'/'N' keys that now cycles through: None → Elements → Edges →
Vertices → DOFs. In parallel, the default numbering is the "local" one for
- each rank. This can be switched to "global" parallel numbering with Alt+n.
+ each rank. This can be switched to the "global" parallel numbering with
+ 'Alt+n' (the former numbering method).
- Added visualization of complex data for grid functions from MFEM's class
(Par)ComplexGridFunction. The complex values are represented by their