Visualization Library v2.0-b1 Release Notes
Release Date: 2017-01-18 // over 7 years ago-
⚡️ This includes many updates, fixes and experimental architectural improvements.
Note that there are some API breaking changes highlighted below, however porting should be easy.
✅ It's mostly an incremental improvement over VL v1.0 at this stage, plus better Qt4/Qt5 support, better OpenGL Core support, more powerful GLSL management in general, more coherent API and various fixes. It has also been battle-tested in a couple of big projects, so as far as I know it's quite stable.
I haven't been able to accept pull requests and patches so far because I had this major new version in the works for months - hopefully now I'll be able to go through the various feedback I've received and start incorporating the good stuff :)
⚡️ OpenGLContext::dispatchRunEvent() renamed dispatchUpdateEvent()
➕ Added standard GLSL includes
uniforms.glsl
andvertex_attribs.glsl
Using new GLSL#pragma VL include
capability
#version 150 compatibility
is current preferred safe version for many GLSL scripts
mGLSLProgram->useProgram();
becomes
openglContext()->useGLSLProgram( mGLSLProgram.get() );
🚚 Legacy GLSL removed (these are taken care of from inside the GLSL script)
glsl->setGeometryInputType(GIT_TRIANGLES);
glsl->setGeometryOutputType(GOT_TRIANGLE_STRIP);
glsl->setGeometryVerticesOut( 3*6 );
Vertex Attrib Arrays now can be used in 3 ways:
// bind the tangent vertex attribute - can be done in 3 ways #if 1 // user defines his custom vertex attribute mGLSL->linkProgram(); int tangent_idx = mGLSL->getAttribLocation("VertexTangent"); VL_CHECK( tangent_idx != -1 ); model->setVertexAttribArray(tangent_idx, tangent.get() ); // GLSL: in vec3 VertexTangent (user declared) #elif 0 // user uses pre-defined aliased utility vertex attribute model->setVertexAttribArray( vl::VA_Tangent, tangent.get() ); // GLSL: vl_VertexTangent (decl. /glsl/std/vertex_attribs.glsl) #else // user uses pre-defined basic vertex attribute model->setVertexAttribArray( vl::VA_TexCoord1, tangent.get() ); // GLSL: vl_VertexTexCoord1 (decl. /glsl/std/vertex_attribs.glsl) #endif
sceneManager()->extractActors( *intersector.actors() );
becomes
sceneManager()->extractVisibleActors( *intersector.actors(), NULL );
✂ Removed because not needed anymore: (see tessellation shader example, see morphing callback example)
geom_patch->convertToVertexAttribs();
mGLSL->addAutoAttribLocation( 0, "vl_Position" );
➕ Added Qt4 & Qt5 GUI and filesystem support
Now QFile and QDirectories can be used as part of VL virtual file system - including Qt compiled resurces.
➕ Added CalibratedCamera class for augmented reality applications
➕ Added AdjacencyExtractor class
Used to generate PT_LINES_ADJACENCY, PT_LINE_STRIP_ADJACENCY,
PT_TRIANGLES_ADJACENCY, PT_TRIANGLE_STRIP_ADJACENCY primitive type for
silhouette extraction, geometry slicing and topology manipulation in geometry shaders.
⚡️ Updated vlVolume
- 👌 Improved raycast volume rendering quality & fixed bugs.
- 🛠 Automatic slice count computation for sliced volume rendering & fixed bugs.
- 🛠 vl::genGradientNormals() utility function fixed.
➕ added vl::Object::setObjectName()
➕ added vl::String constructor for
std::string
&std::wstring
Vector2, Vector3 and Vector4 can be constructed from single scalar.
👍 Better automatic texture unit management.
User configurable VL_MAX_TEXTURE_UNITS now removed by internal VL_MAX_TEXTURE_IMAGE_UNITS
and VL_MAX_LEGACY_TEXTURE_UNITS constants.
🛠 Fixed warnings in glsl_math.hpp
👌 Improved Buffer Object documentation in Array.hpp
🛠 Fixed various render states getter/setter constness in Shader.hpp
TriangleIterator supports PT_TRIANGLES_ADJACENCY primitive type.
✂ removed Viewport::enableScissorSetup()
➕ added Viewport::setScissorEnabled(bool)
➕ added bool Viewport::isScissorEnabled()
Viewport::mSetupScissor -> mScissorEnabled
👌 Improved Uniform getters/setters
Image:
- ➕ added support to IF_RG and
- new constructor Image(void* buffer_ptr, int buffer_bytes) allowing initializing an Image against a user/externally allocated buffer
0️⃣ TextureSampler::reset(int index, OpenGLContext* ctx) utility function to set a texture sampler to it's default disabled state.
Textures: Managed Textures and Destroy on Create.
Managed Textures: allow user to assign and manage the low level OpenGL handle with vl::Texture
👉 Useful when you want to use a single vl::Texture object but change/recreate the underlying OpenGL texture handle at will.Destroy on create: calling Texture::createTexture() (or any function that calls this) will automatically destroy any existing texture (not if it's managed).
🚚 GLSL: removed UniformInfo, AttribInfo and AutoAttribLocations
Because not useful and superseded by new auto vertex attrib system
GLSL: new
#pragma VL include /path/to/file.glsl
directiveYou can now include a GLSL file from another GLSL file!
🚚 GLSL: removed deprecated GeometryVerticesOut, GeometryInputType, GeometryOutputType logic
OpenGL 3+ uses the
layout
keyword for these.
GLSL: added GLSLShader and GLSLProgram reload() functions
🚚 GLSLProgram::useProgram() removed, use OpenGLContext::useGLSLProgram()
GLSL: Automatic vertex attrib location binding:
vl_VertexPosition
vl_VertexNormal
vl_VertexColor
vl_VertexSecondaryColor
vl_VertexFogCoord
vl_VertexTexCoord0
vl_VertexTexCoord1
vl_VertexTexCoord2
vl_VertexTexCoord3
vl_VertexTexCoord4
vl_VertexTexCoord5
vl_VertexTexCoord6
vl_VertexTexCoord7
vl_VertexTexCoord8
vl_VertexTexCoord9
vl_VertexTexCoord10
GLSL: Automatic standard uniform detection:
vl_WorldMatrix
vl_ModelViewMatrix
vl_ProjectionMatrix
vl_ModelViewProjectionMatrix
vl_NormalMatrix
🛠 GLSL: various improvements and fixes.
➕ Added Renderer::rederRaw() function.
👉 Makes it easy to create custom Renderer classes.
➕ Added
Enabled
attribute to Actor and ActorTree.⚡️ See also the new/updated functions:
- bool Renderer::isEnabled(const Actor* actor)
- bool Rendering::isEnabled(const Actor* actor)
- bool SceneManager::isEnabled(const Actor* actor)
- SceneManager::extractActors() vs extractVisibleActors()
- Actor::setEnabled()/isEnabled()
- ActorTreeAbstract::setEnabled()/isEnabled()
- ActorTreeAbstract::extractActors() vs extractVisibleActors()
ActorTree API changes:
mChildren
is now protected and can be accessed in read-only mode using thechildren()
method.🆕 New/updated methods to manipulate the tree nodes:
- void addChild(ActorTreeAbstract* node);
- void addChildOnce(ActorTreeAbstract* node);
- void setChild(int i, ActorTreeAbstract* node);
- void eraseChild(int i, int count=1);
- int findChild(ActorTreeAbstract* node);
- bool eraseChild(ActorTreeAbstract* node);
- void eraseChild(int i, int count = 1);
- void eraseAllChildren();
Automatic Generalized Vertex Attribute Arrays
- Unified API to access all vertex attibutes, position, normal, color but also
texture coords and the generic vertex attibutes (glVertexAttribPointer). - 👀 Standard vertex attributes like position, normal and color can be seen both
from the legacy API (ex.Geometry::normalArray()
) and the generic api
(ex.Geometry::vertexAttribArray( vl::VA_Normal )
). - 🚚 Geometry::convertToVertexAttribs() removed as it's not needed anymore.
- Great simplification of lot's of code that can now be agnostic of legacy vs
generic vertex attributes usage.
Geometry::setColorArray() tries to not reallocate the color array.
It also sets the buffer object dirty.
🛠 Rendering: fixed bug creating a continuous stream of Textures
Always setup legacy GLSL matrices as well as vl standard matrix uniforms.
👍 OpenGLContext: much better Core profile support and closer OpenGL state tracking.