lowgl alternatives and similar packages
Based on the "Graphics" category.
Alternatively, view lowgl alternatives based on common mentions on social networks and blogs.
-
reanimate
Haskell library for building declarative animations based on SVG graphics -
implicit
A math-inspired CAD program in haskell. CSG, bevels, and shells; 2D & 3D geometry; 2D gcode generation... -
threepenny-gui
GUI framework that uses the web browser as a display. -
diagrams
Embedded domain-specific language for declarative vector graphics (wrapper package) -
GPipe
Core library of new GPipe, encapsulating OpenGl and providing a type safe minimal library -
log-warper
Logging library to provide more convenient, extremely configurable but simple monadic interface with pretty output -
timeplot
Analyst's swiss army knife for visualizing data from ad-hoc log files -
processing-for-haskell
Graphics for kids and artists. Processing implemented in Haskell -
GLUtil
Utility functions for working with OpenGL BufferObjects, GLSL shaders, and textures. -
graphics-drawingcombinators
Combinators for drawing 2D shapes and images in Haskell (using OpenGL)
TestGPT | Generating meaningful tests for busy devs
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of lowgl or a related project?
Popular Comparisons
README
lowgl
- Use GL with basic type safety.
- Use GL without bit fiddling and pointer wrangling.
- Documents the core (and only the core) workings of the hidden GL machine.
- Provides Haskell-language code examples of basic techniques.
Install
cabal install lowgl
Uses the amazing gl package which brings the entirety of OpenGL to haskell.
Hello World
The hello world program shows a white triangle on a black background. It uses the packages GLFW-b and monad-loops. Note that it forces a 3.2 core profile when setting up the context through GLFW.
module Main where
import Control.Monad.Loops (whileM_)
import Data.Functor ((<$>))
import qualified Data.Vector.Storable as V
import qualified Graphics.UI.GLFW as GLFW
import Graphics.GL.Low
-- GLFW will be the shell of the demo
main = do
GLFW.init
GLFW.windowHint (GLFW.WindowHint'ContextVersionMajor 3)
GLFW.windowHint (GLFW.WindowHint'ContextVersionMinor 2)
GLFW.windowHint (GLFW.WindowHint'OpenGLForwardCompat True)
GLFW.windowHint (GLFW.WindowHint'OpenGLProfile GLFW.OpenGLProfile'Core)
mwin <- GLFW.createWindow 640 480 "Hello World" Nothing Nothing
case mwin of
Nothing -> putStrLn "createWindow failed"
Just win -> do
GLFW.makeContextCurrent (Just win)
GLFW.swapInterval 1
(vao, prog) <- setup -- load and configure objects
whileM_ (not <$> GLFW.windowShouldClose win) $ do
GLFW.pollEvents
draw vao prog -- render
GLFW.swapBuffers win
setup = do
-- establish a VAO
vao <- newVAO
bindVAO vao
-- load shader program
vsource <- readFile "hello.vert"
fsource <- readFile "hello.frag"
prog <- newProgram vsource fsource
useProgram prog
-- load vertex data: three 2D vertex positions
let blob = V.fromList
[ -0.5, -0.5
, 0, 0.5
, 0.5, -0.5 ] :: V.Vector Float
vbo <- newVBO blob StaticDraw
bindVBO vbo
-- connect program to vertex data via the VAO
setVertexLayout [Attrib "position" 2 GLFloat]
return (vao, prog)
draw vao prog = do
clearColorBuffer (0,0,0)
bindVAO vao
useProgram prog
drawTriangles 3
The vertex shader file looks like
#version 150
in vec2 position;
void main()
{
gl_Position = vec4(position, 0.0, 1.0);
}
And the corresponding fragment shader file
#version 150
out vec4 outColor;
void main()
{
outColor = vec4(1.0, 1.0, 1.0, 1.0);
}
And the output should look like