Skip to content

live editor of GLSL fragment shaders based on Qt / QML

License

Notifications You must be signed in to change notification settings

neolit123/qml-glsl-coder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

QML GLSL Coder
v1.2.0

project URL:
https://github.com/neolit123/qml-glsl-coder

--------------------------------------------------------------------------------
INFORMATION

"QML GLSL Coder" is a live editor of GLSL fragment shaders based on Qt / QML.

the project is inspired by the following tools:
- ShaderToy (by IQ)
- Quint (by Andrew Baldwin)
- GLSL-Sandbox (by various contributors)

a couple of years ago i saw that easy, on-the-spot GLSL shader compilation was
possible with Qt / QML in the Quint project, but it had some issues and was
not very usable. in the meantime, i was playing with writing some effects in
the other listed tools which are WebGL based.

this project is not a port of Quint but rather a written from scratch, fully
functional editor that i started writing a while back.

public domain license - see the file LICENSE!

--------------------------------------------------------------------------------
SCREENSHOTS

https://tinyurl.com/ycl39h8p
https://tinyurl.com/y8d7rf6j
https://tinyurl.com/y9j9hlc8
https://tinyurl.com/y6vfpc42

--------------------------------------------------------------------------------
WHAT WORKS

only tested on Win32 desktop!
press F1 for the help screen and a list of keyboard shortcuts.

*) has a pretty usable text editor
- the editor is defined in qml/Editor.qml
- the editor can be toggled with F4
- everything that QML's TextEdit has, this editor has as well
- mouse wheel and page up/down support
- shows the current line and compilation errors
- has a syntax highlighter defined in cpp/highlighter.cpp/.h

*) loading/saving .glsl files
- F7/F8 open the file load/save dialogs

*) loading of a single image that can be used as a texture
- controlled with F6
- see shaders/greyscaleTexture.glsl for an example

*) dynamic quality and interpolation
- controlled with F9, F10, F11

*) toggleable FPS counter and mouse cursor
- controlled with F2, F3

*) fullscreen support
- controlled with F12

--------------------------------------------------------------------------------
WHAT DOESN'T WORK (THAT WELL)

here are some issues which are caused by Qt / QML bugs or missing features:

*) Qt 5.5 has some sort of a bug in QQuickShaderEffect that prevents on-the-spot
changes of the .fragmentShader property. this forced me to write a custom
QQuickItem named ShaderItem which is a stripped down QQuickShaderEffect
replacement.

*) auto-compile-on-edit actually works quite well on the ShaderItem side,
but the onTextChanged() signal from TextEdit is a bit sporadic.
therefore, i have disabled auto-compile-on-edit and you have to press F5 to
recompile. at some point this could become an option.

*) on Win32 the file open/save dialogs don't show in fullscreen unless the UI
is clicked. to solve the issue the file dialogs are opened in window-mode
and when closed, the original mode (e.g. fullscreen) is restored.

*) for some reason, when the application window is open it makes certain
tools on Win32 sluggish, while the CPU remains almost IDLE.

*) lines with bold text have more height than lines without bold text, which
breaks the estimation to fit exactly N lines of text in the editor visible
area and the last line may be cut. QML's TextEdit has no easy means to set
a fixed line height which is not very convenient.

--------------------------------------------------------------------------------
QMAKE VS CMAKE

cmake is more potent, while qmake is easier for a fast project setup. period.
this project is qmake based.

hopefully qmake will not be deprecated soon.

--------------------------------------------------------------------------------
DEPLOYMENT SIZE

40MB on Win32 is a bit too much but that's how Qt works.
if i wrote the same in SDL and some sort of a simplified widgets toolkit
it could have been in the lines of 10MB but it might have taken more time.

--------------------------------------------------------------------------------
BUILDING

install the latest Qt version
cd <path-where-the-coder-source-is>
qmake
make

--------------------------------------------------------------------------------
PRE-BUILD BINARIES

qml-glsl-coder-1.0.0-win32-qt5.5.0.zip:
https://tinyurl.com/y8h5c22h
qml-glsl-coder-1.2.0-win32-qt5.5.1.zip:
https://tinyurl.com/y9om8f6b

--------------------------------------------------------------------------------
EOF