Visualization Library is a C++ middleware for high-performance 2D and 3D graphics applications based on OpenGL 1.x-4.x supporting Windows, Linux and Mac OS X.

Visualization Library 2.2

Gallery

About

Visualization Library is a C++ middleware for high-performance 2D and 3D graphics applications based on the industry standard OpenGL 1.x-4.x, designed to develop portable applications for the Windows, Linux and Mac OS X operating systems.

Compilation and Installation

Windows via CLI

Example to build and install a Debug build of VL and run the vlQt5_tests.exe glsl test:

cd C:\
git clone [email protected]:MicBosi/VisualizationLibrary.git
cd VisualizationLibrary
mkdir _BUILD
mkdir _INSTALL
cd _BUILD
cmake .. -G "Visual Studio 16 2019" -DVL_GUI_WIN32_SUPPORT=ON -DVL_GUI_WIN32_EXAMPLES=ON -DVL_GUI_QT5_SUPPORT=ON -DVL_GUI_QT5_EXAMPLES=ON -DVL_INSTALL_DATA=ON -DVL_BUILD_DOCS=ON -DCMAKE_INSTALL_PREFIX='C:\VisualizationLibrary\_INSTALL\'
cmake --build . --config Debug --target INSTALL
cmake --build . --config Debug --target Docs
set PATH=C:\VisualizationLibrary\_INSTALL\bin;%PATH%
set VL_DATA_PATH=C:\VisualizationLibrary\_INSTALL\data
vlQt5_tests.exe glsl
cat log.txt

Use make --build . --config Release --target INSTALL to build and install in Release mode.

Linux via CLI

Something similar to this should work (uses QT5 gui bindings as an example, requires Qt5 dev to be installed):

cd ~
git clone [email protected]:MicBosi/VisualizationLibrary.git
cd VisualizationLibrary
mkdir _BUILD/Debug _BUILD/Release -p
mkdir _INSTALL

# Debug build
cd _BUILD/Debug
cmake ../.. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DVL_GUI_QT5_SUPPORT=ON -DVL_GUI_QT5_EXAMPLES=ON -DVL_INSTALL_DATA=ON -DVL_BUILD_DOCS=ON -DCMAKE_INSTALL_PREFIX=~/VisualizationLibrary/_INSTALL
make -j 4
make install
make Docs
vlQt5_tests glsl
cat log.txt

# Release build
cd ../..
cd _BUILD/Release
cmake ../.. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DVL_GUI_QT5_SUPPORT=ON -DVL_GUI_QT5_EXAMPLES=ON -DVL_INSTALL_DATA=ON -DVL_BUILD_DOCS=ON -DCMAKE_INSTALL_PREFIX=~/VisualizationLibrary/_INSTALL
make -j 4
make install
export PATH=~/VisualizationLibrary/_INSTALL/bin:$PATH
export VL_DATA_PATH=~/VisualizationLibrary/_INSTALL/data
vlQt5_tests glsl
cat log.txt

Windows, Linux, Mac via GUI

Follow the instructions here: http://visualizationlibrary.org/docs/2.0/html/pag_install.html

Licensing

Visualization Library is released under the OSI approved Simplified BSD License (LICENSE.md).

Resources

Happy coding :)

Comments
  • Qt4, wxWidget, MFC gui bindings should use aggregation instead of inheritance.

    Qt4, wxWidget, MFC gui bindings should use aggregation instead of inheritance.

    The gui specific window class should cooperate with a gui specific 
    OpenGLContext subclass and hot having the latter inherit from the former.
    

    Original issue reported on code.google.com by [email protected] on 1 Mar 2011 at 7:41

  • Add GLFW support

    Add GLFW support

    It would be great to have a vlGLFW::GLFWWindow helper class. Ideally, it should support multiple windows (with the possibility to share contexts) and OpenGL Core Profile, though it would be good to get any GLFW support as a start...

  • New View + SceneView + Rendering implementation

    New View + SceneView + Rendering implementation

    Proposed architecture:
    
    View: (data only)
      + Camera 
      + Viewport
    
    SceneView: (data only)
      + View
      + SceneManagers[]
      + Renderers[] <-- viewport clear
    
    Rendering: (executes the rendering on the given SceneViews)
      + SceneViews[]
      > all renderers must use the same OpenGLContext so we don't need to clear GL states and makeCurrent() only once. Contract check made in debug mode at the very beginning.
    
     - Cons: 
       - introduces an extra layer of indirection.
    
     - Pro: 
       - can more easily add new scene/camera/renderers combinations.
       - minimize init/clearup of OpenGLContext states and makeCurrent() calls.
       - minimize need to resort to RenderingTree class.
    

    Original issue reported on code.google.com by [email protected] on 2 Mar 2011 at 1:18

  • Implement DrawCall demo-test

    Implement DrawCall demo-test

    Implement DrawCall Test utilizing all the draw call types and features.
    

    Original issue reported on code.google.com by [email protected] on 1 Mar 2011 at 9:54

  • Lower level classes directly usable, FBO*, GLSL*, Shader, Geometry, OpenGLContext, RenderTarget, Camera, scene managers etc.

    Lower level classes directly usable, FBO*, GLSL*, Shader, Geometry, OpenGLContext, RenderTarget, Camera, scene managers etc.

    Add example showing how to use lower level classes directly such as Shader, 
    Geometry, OpenGLContext, RenderTarget, Camera, scene managers, GLSL classes 
    etc. possibly using GLUT.
    

    Original issue reported on code.google.com by [email protected] on 1 Mar 2011 at 7:47

  • Make OpenGLContext usable without GUI bindings.

    Make OpenGLContext usable without GUI bindings.

    Add an example showing how to use and OpenGLContext without GUI bindings, 
    possibly using GLUT.
    

    Original issue reported on code.google.com by [email protected] on 1 Mar 2011 at 7:45

  • Incomplete or Deprecated?

    Incomplete or Deprecated?

    Object Serialization

    VL really needs to be able to serialize/deserialize its classes and data however the current system is quite labor intensive to maintain and we should at least investigate other possibilities. In any case serialization is poorly documented. We should at least ensure a definite subset of VL classes are properly serialized and well documented and allow the user to add de/serialization capability to custom classes. We might also switch to JSON/BSON rather than our current custom language. It might be more verbose but it would allow better interoperability. We can explicitly declare the data type in JSON by the use of standard suffixes like vertices__f32_ etc. However BSON is only an option if we can store large ints and doubles losslessly and also binary blobs.

    OpenGL ES

    Support for OpenGL ES does not seem to be a priority, we may deprecate and drop altogether its support which is broken anyway, unless someone else helps with its implementation and maintenance.

    Fixed Function Pipeline

    For the future I'm getting more and more convinced that we should drop pre OpenGL 3.2 compatibility and only focus on OpenGL 3.2 onward core compatibility.

  • Support Qt5

    Support Qt5

    Looks like most users use VL via Qt so as part of the current refocusing effort VL will update support to the latest GUI back ends but pay special attention to Qt5 as its primary GUI.

  • MiniEarth demo-test finalization

    MiniEarth demo-test finalization

    Wishlist:
    - Various textures.
    - Earth and moon bump-mapping.
    - Atmosphere.
    - Vertex displacement exaggeration.
    - Basic vector data: country borders and major city centers.
    
    
    

    Original issue reported on code.google.com by [email protected] on 2 Mar 2011 at 12:24

  • OpenGLContext should take ownership of the vl::Rendering logic that manages the render states.

    OpenGLContext should take ownership of the vl::Rendering logic that manages the render states.

    OpenGLContext should take ownership of the vl::Rendering logic that manages the 
    render states.
    
    OpenGLContext should be usable by itself and should be autonomously capable of 
    performing lazy setup of all render states in particular:
    
    - Modelview, Normal & Projection matrices setup. Including GLSL/non-GLSL 
    pipeline abstraction.
    - Uniform update.
    - Color, SecondaryColor, Normal, Fog
    
    OpenGLContext should have a beginRendering() and a endRendering() methods 
    between which the OpenGL context state is kept safe and delta-setup can be made.
    

    Original issue reported on code.google.com by [email protected] on 1 Mar 2011 at 10:26

  • vl::Geometry color, secondary color and normal render states optimization

    vl::Geometry color, secondary color and normal render states optimization

    vl::Geometry color, secondary color and normal render states should be updated 
    lazily, and such update should be delegated to the current OpenGLContext which 
    keeps track of the current color, sec color and normal.
    
    1% speedup has been observed in preliminary tests in doing this.
    

    Original issue reported on code.google.com by [email protected] on 1 Mar 2011 at 7:43

  • Documentation - VLMain missing from

    Documentation - VLMain missing from "getting started" find_package(VL COMPONENTS ...)

    I was having a ton of issues with CMake (Win32) - The example programs compiled fine during the library build, but I couldn't get my own program to link. (unable to find vl::VisualizationLibrary::init()/vl::VisualizationLibrary::shutdown()) I finally discovered that adding "VLMain" to the "find_package" command in my CMakeLists.txt fixed the issue.

    I'm not sure if this is the right fix, but if so, I'd recommend updating the "compiling and installing document" (https://www.visualizationlibrary.org/docs/2.1/html/pag_install.html) to include 'VLMain' in the example CMake project.

  • SDL2 support, with multiple windows and fullscreen support.

    SDL2 support, with multiple windows and fullscreen support.

    Hi Michele, this patch adds support for SDL2. It supports multiple windows and correct switching to full screen. I am unable to check whether it works with Windows or OSX, I am on holiday and have no virtual machines here. It has been tested on Linux with SDL2 2.0.22. Thank you

  • make error: implicit declaration of function 'lseek'

    make error: implicit declaration of function 'lseek'

    Env: MacOS11, Xcode13

    CC # make
    [  1%] Building C object src/vlCore/plugins/zlib/CMakeFiles/ZLib.dir/__/__/__/external/zlib/adler32.c.o
    [  1%] Building C object src/vlCore/plugins/zlib/CMakeFiles/ZLib.dir/__/__/__/external/zlib/compress.c.o
    [  1%] Building C object src/vlCore/plugins/zlib/CMakeFiles/ZLib.dir/__/__/__/external/zlib/crc32.c.o
    [  2%] Building C object src/vlCore/plugins/zlib/CMakeFiles/ZLib.dir/__/__/__/external/zlib/deflate.c.o
    [  2%] Building C object src/vlCore/plugins/zlib/CMakeFiles/ZLib.dir/__/__/__/external/zlib/gzclose.c.o
    [  2%] Building C object src/vlCore/plugins/zlib/CMakeFiles/ZLib.dir/__/__/__/external/zlib/gzlib.c.o
    /Users/cc/Downloads/VisualizationLibrary-master/src/external/zlib/gzlib.c:256:24: error: implicit declaration of function 'lseek' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
            state->start = LSEEK(state->fd, 0, SEEK_CUR);
                           ^
    /Users/cc/Downloads/VisualizationLibrary-master/src/external/zlib/gzlib.c:14:17: note: expanded from macro 'LSEEK'
    #  define LSEEK lseek
                    ^
    /Users/cc/Downloads/VisualizationLibrary-master/src/external/zlib/gzlib.c:256:24: note: did you mean 'fseek'?
    /Users/cc/Downloads/VisualizationLibrary-master/src/external/zlib/gzlib.c:14:17: note: expanded from macro 'LSEEK'
    #  define LSEEK lseek
                    ^
    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.0.sdk/usr/include/stdio.h:162:6: note: 'fseek' declared here
    int      fseek(FILE *, long, int);
             ^
    /Users/cc/Downloads/VisualizationLibrary-master/src/external/zlib/gzlib.c:355:9: error: implicit declaration of function 'lseek' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        if (LSEEK(state->fd, state->start, SEEK_SET) == -1)
            ^
    /Users/cc/Downloads/VisualizationLibrary-master/src/external/zlib/gzlib.c:14:17: note: expanded from macro 'LSEEK'
    #  define LSEEK lseek
                    ^
    /Users/cc/Downloads/VisualizationLibrary-master/src/external/zlib/gzlib.c:396:15: error: implicit declaration of function 'lseek' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
            ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR);
                  ^
    /Users/cc/Downloads/VisualizationLibrary-master/src/external/zlib/gzlib.c:14:17: note: expanded from macro 'LSEEK'
    #  define LSEEK lseek
                    ^
    /Users/cc/Downloads/VisualizationLibrary-master/src/external/zlib/gzlib.c:492:14: error: implicit declaration of function 'lseek' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        offset = LSEEK(state->fd, 0, SEEK_CUR);
                 ^
    /Users/cc/Downloads/VisualizationLibrary-master/src/external/zlib/gzlib.c:14:17: note: expanded from macro 'LSEEK'
    #  define LSEEK lseek
                    ^
    4 errors generated.
    make[2]: *** [src/vlCore/plugins/zlib/CMakeFiles/ZLib.dir/__/__/__/external/zlib/gzlib.c.o] Error 1
    make[1]: *** [src/vlCore/plugins/zlib/CMakeFiles/ZLib.dir/all] Error 2
    make: *** [all] Error 2
    CC # open /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.0.sdk/
    CC #
    
  • vlVG fix

    vlVG fix

    SceneManagerVectorGraphics.hpp file is invalid without VectorGraphics.hpp

    example usage: //#include <vlVG/VectorGraphics.hpp> // without it don't work - compile error #include <vlVG/SceneManagerVectorGraphics.hpp>

    CE, 86 line: "vectorGraphicObjects()->at(i)->actors()" (VectorGraphics is undefined)

Oxygine is C++ engine and framework for 2D games on iOS, Android, Windows, Linux and Mac

BUILD AND RUN See oxygine-framework/readme/ folder. It has instructions on how to build and run oxygine on different platforms. Wiki available at http

Dec 23, 2022
Serial Data Monitor is a multiplatform (Windows, Linux, Mac, ...) tool to interactively receive/edit/monitor data and send commands to an embedded system via the serial bus
Serial Data Monitor is a multiplatform (Windows, Linux, Mac, ...) tool to interactively receive/edit/monitor data and send commands to an embedded system via the serial bus

See wiki for full documentation Serial Data Monitor Description Serial Data Monitor is a multiplatform (Windows, Linux, Mac, ...) tool to interactivel

Oct 29, 2021
Windscribe 2.0 desktop client for Windows, Mac and Linux

Windscribe 2.0 Desktop Application This repo contains the complete source code for the Windscribe 2.0 app. This includes installer, service/helper, ba

Jan 3, 2023
Drmemory - Memory Debugger for Windows, Linux, Mac, and Android
Drmemory - Memory Debugger for Windows, Linux, Mac, and Android

Dr. Memory: the memory debugger About Dr. Memory Dr. Memory is a memory monitoring tool capable of identifying memory-related programming errors such

Dec 28, 2022
Free (libre) font editor for Windows, Mac OS X and GNU+Linux

FontForge FontForge is a free (libre) font editor for Windows, Mac OS X and GNU+Linux. Use it to create, edit and convert fonts in OpenType, TrueType,

Dec 27, 2022
Qt5 "Hello, world!" app for Linux, BSD, Windows, Mac.
Qt5

hello world in qt5 Contributions in all forms (code, bug reports, community engagement, localization, etc) are warmly welcomed. Development activity I

Jan 26, 2022
F Graphics Library (FGL) is a small graphics C++ portable library for LCD displays on embedded systems

F Graphics Library (FGL) Full documentation: fgl.docsforge.com (By Filipe Chagas) F Graphics Library is a C++ library that I created for use in embedd

Oct 31, 2022
An eventing framework for building high performance and high scalability systems in C.

NOTE: THIS PROJECT HAS BEEN DEPRECATED AND IS NO LONGER ACTIVELY MAINTAINED As of 2019-03-08, this project will no longer be maintained and will be ar

Dec 14, 2022
Make your Pop!_OS (Ubuntu Linux) shortcut key experience more like Mac OS

Meta Mac Enables a Mac OS-like shortcut key experience on Pop!_OS (and most Ubuntu-based Linux distros). Installation Download or git clone this repos

Dec 31, 2022
A Mac like Control Center for Windows
A Mac like Control Center for Windows

A Mac like Control Center for Windows.

Mar 8, 2022
Fluid Visualization - The code compilation is only tested on Arch Linux x86_64

Fluid Visualization The code compilation is only tested on Arch Linux x86_64, Linux kernel 5.15.13-arch1, with gcc 11.1.0, CMake 3.22.1, Xorg X server

Jan 30, 2022
GraphicsFuzz provides tools for automatically finding and simplifying bugs in graphics drivers, specifically graphics shader compilers.

GraphicsFuzz GraphicsFuzz is a set of tools for testing shader compilers GraphicsFuzz provides tools for automatically finding and simplifying bugs in

Dec 15, 2022
Emergency alert and tracer for realtime high-performance computing app (work in progress, currently supported env is only Linux x86-64).

HPC Emerg Emergency alert and tracer for realtime high-performance computing app (work in progress, currently supported env is only Linux x86-64). Exa

Jan 19, 2022
Open Redragon drivers for Linux. Currently only supporting some mice.

OpenDragon Open Redragon drivers for Linux. Currently only supporting some mice. Table of contents Support Installation Building from source Usage Sou

Nov 7, 2022
CSC404: Computer Graphics [CG] & CSL402: Computer Graphics Lab [CG Lab]

COMPUTER-GRAPHICS-AND-COMPUTER-GRAPHICS-LAB CSC404: CG & CSL402: CG LAB [SEMESTER IV] Syllabus CG - Reference Books THE WALL MEGA SATISH - AUTHOR CG C

Apr 28, 2022
Rewritten version of the MiniLibX graphics API used by 42, using glfw & glad. Running on OpenGL.
Rewritten version of the MiniLibX graphics API used by 42, using glfw & glad. Running on OpenGL.

Written by W2.Wizard for the 42 Network A recreation of the MiniLibX library used by 42, using GLFW & glad, running on OpenGL. The goal of MLX42 is to

Dec 29, 2022
Several GX2 test programs to compare it with OpenGL. (With additional GLFW+OpenGL implementation provided)

GX2-Tests Provided are GX2 test programs and samples for comparison with OpenGL and with additional GLFW+OpenGL implementation for test on PC. These s

Nov 15, 2021
CMake modules for common applications related to computer graphics

cgcmake CMake modules for common applications related to computer graphics Sample Usage Maya Project |-- CMakeLists.txt |-- cgcmake |-- modules

Dec 5, 2022
Fluid simulation engine for computer graphics applications
Fluid simulation engine for computer graphics applications

Fluid Engine Dev - Jet Jet framework is a fluid simulation engine SDK for computer graphics applications that was created by Doyub Kim as part of the

Dec 31, 2022