G3D Changelog

What's new in G3D 10.00

Jan 5, 2017
  • Highlights of 10.00:
  • Significantly improved AmbientOcclusion
  • Significantly improved DepthOfField
  • Significantly improved MotionBlur
  • Fast G3D::String
  • Fast Shader compilation
  • GLSL library routines
  • Minimum specification is now OpenGL 3.30 core, support through OpenGL 4.x
  • Removed all fixed-function code
  • Auto-journaling through F4/F6
  • Changes in 10.00:
  • Draw::histogram [Sam]
  • G3D::guiLogSliders now deals properly with ranges that span 0 [Dan]
  • Replaced g3d_ModelViewProjectionMatrix with g3d_ObjectToScreenMatrix [Sam]
  • Removed support for g3d_sz2D uniforms [Sam]
  • G3D::guiLogSliders can now be set to clamp the bounds to infinity[Dan]
  • Added ArticulatedModelSpecificationEditorDialog [Sam]
  • Added PowerOfTwoAdapter and SquareAdapter [Sam]
  • Python 3.4 support for shell scripts on Windows [Sam]
  • Added Matrix3x4 [Sam]
  • Removed G3D::RenderBuffer. Use G3D::Texture instead. [Mike]
  • O(n) improved to O(log n) run time for MeshShape::getRandomSurfacePoint [Sam]
  • Removed GApp::m_depthBuffer. Use m_framebuffer->texture(Framebuffer::DEPTH)
  • G3D::Shader now defines a G3D_SHADER_STAGE macro in shaders
  • G3D::Random is now more uniform [Sam]
  • G3D::GBuffer::Field::SS_EXPRESSIVE_MOTION
  • G3D::GBuffer::Field::SS_POSITION_CHANGE now is actually position change–no non-physical elements
  • Fix: G3D::UniversalSurface now checks for points behind the camera when writing SS_POSITION_CHANGE
  • G3D::G3DAllocator
  • TriTree::Poly::computeArea() computes area accurately [Sam]
  • All G3D string routines now take and return G3D::String
  • G3D::String
  • G3D::NotAdapter
  • G3D::GuiPane::removeAllChildren
  • Articulated Models dragged into a GApp and added to Scene are now guaranteed to have unique, valid names and to be properly saved by the scene. [Sam]
  • G3D::GBuffer::setShaderArgsWrite
  • G3D::GBuffer::setShaderArgsRead
  • G3D::GApp::m_depthPeelFramebuffer
  • G3D::alphabeticalIgnoringCaseG3DLastLessThan
  • G3D::Framebuffer::resize
  • Moved tone mapping before bloom in G3D::Film
  • Removed automipmapping from G3D::Texture. [Mike]
  • G3D::Texture now supports 2D texture arrays [Mike]
  • G3D::Noise API changed
  • G3D::DoNotInitialize
  • G3D::MirrorQuality and G3D::Refraction quality changed from continuums to specific sets of values. [Mike]
  • Extended G3D::Noise::sampleFloat to (quickly) produce multiple octaves as a convenience.
  • G3D::Texture now uses non-power-of-two OpenGL textures everywhere
  • G3D::Shader and G3D::Args now support cubemap image shader uniforms [Mike]
  • G3D::Shader and G3D::Args now support integer and unsigned integer image shader uniforms [Mike]
  • G3D::Shader preprocessing now ignores pragmas within comments
  • G3D::Shader preprocessing now caches multiply included files
  • G3D::Camera::maxCoCRadiusPixels
  • G3D::Camera::circleOfConfusionRadius renamed to G3D::Camera::circleOfConfusionRadiusPixels
  • G3D::DepthOfFieldSettings::circleOfConfusionRadius renamed to G3D::DepthOfFieldSettings::circleOfConfusionRadiusPixels
  • Fix: Corrected a serious error in GaussianBlur where the center tap had the wrong weight
  • Fix: removed directional bias and improved smoothness for low blur factors in DepthOfField
  • Fix: Texture preprocessing gammaAdjust and modulate to not affect alpha
  • G3D::Token and G3D::TextInput now distinguish integer and hexadecimal constants
  • G3D::Any now preserves hexadecimal constants when deserializing
  • G3D::GApp screenshots (F4) now prompt for a filename on save
  • Added several materials to the data-files directory
  • Added support for dragging and dropping .ArticulatedModel.Any, .MD3Model.Any, .MD2Model.Any, and .Heightfield.Any files directly onto a G3D::GApp
  • Set G3D::RenderDevice::setSwapBuffersAutomatically(false) in the default G3D::GApp
  • Made G3D::GApp::onGraphics3D into a full-featured forward shading renderer
  • Enhanced motion and camera tracking in the Entity sample
  • Added rock models
  • Added several materials
  • G3D::FilmSettings::antialiasingHighQuality (defaults to true)
  • G3D::Entity::setShouldBeSaved
  • Changed default Light::farPlaneZLimit to -finf()
  • G3D::FrameName
  • G3D::Queue::copyInto
  • template void G3D::Array::append(const Array& array)
  • Made GApp::loadScene trigger onPose/onGraphics to force shader loading
  • Added G3D::ImageFormat::R8_SNORM, ImageFormat::R16_SNORM, ImageFormat::RG8_SNORM, ImageFormat::R16_SNORM
  • G3D::Color4::fromASRGB
  • G3D::UniformTable
  • G3D::InterpolateMode::NEAREST_MIPMAP_LINEAR, G3D::InterpolateMode::LINEAR_MIPMAP_NEAREST, G3D::InterpolateMode::NEARESt_MIPMAP_NEAREST
  • G3D::VisibleEntity Any constructor now allows setting the initial pose for an ArticulatedModel
  • G3D::AnyTableReader::getFilenameIfPresent
  • G3D::squareMagnitude
  • Added many CC-BY and CC0 music files
  • G3D::Color3::neonGradient
  • Removed ArticulatedModel::MeshMergeCriterion. Replace the old OPAQUE value with meshMergeOpaqueClusterRadius = ALL, meshMergeTransmissiveClusterRadius = NONE. Replace the old NEVER with meshMergeOpaqueClusterRadius = NONE, meshMergeTransmissiveClusterRadius = NONE. Replace the old ALL with meshMergeOpaqueClusterRadius = ALL, meshMergeTransmissiveClusterRadius = ALL.
  • Light::findBrightestLightIndex, Light::findBrightestLight
  • FullScreenWidget
  • ArticulatedModel::Specification::OBJOptions::stripRefraction
  • G3D::OrderedTable
  • G3D::Sound, G3D::AudioChannel, G3D::AudioDevice
  • Array::find, Array::findIndex, etc. now allow the type begin sought to differ from the array element type.
  • Fixed AABox::intersect to correctly compute empty intersections (vs. zero volume) in the empty case [David Milaenen]
  • Added support for instanced rendering of ArticulatedModels via ArticulatedModel::Pose::numInstances
  • G3D::SlowMesh
  • Added Triangle::otherSide
  • Added two-sided testing for G3D::CollisionDetection::collisionTimeForMovingSphereFixedTriangle
  • Added g3d_NumInstances to Shader built-ins
  • Removed deprecated methods from G3D::Args
  • Added support for glVertexAttribDivisor to G3D::Args::setAttributeArray
  • Scene::registerEntitySubclass
  • Added .count() method to classes created with G3D_DECLARE_ENUM_CLASS
  • G3D::GuiPane::addEnumClassRadioButtons
  • G3D::FileSystem::rename
  • G3D::lerpAngle
  • G3D::Triangle::barycentric
  • G3D::AABox::minkowskiSum
  • G3D::ControlPointEditor
  • Removed RenderDevice::setLineWidth
  • Added ignoreInt, ignoreFloat, ignoreDouble, ignoreString for use with default output arguments
  • Added Draw::point, Draw::points with various overloads
  • Added AnyTableReader::get(name, value, factory) and getIfPresent equivalent
  • Extended the build system to support MSBuild and multiple versions of Visual Studio 12+ [Brett Lajzer, Chad Layton, Kevin Todisco, Morgan McGuire]
  • Added G3D::Grid
  • Added a Sampler to UniversalMaterial
  • Added G3D::Pathfinder
  • Added G3D::BumpMap::computeBumpMap
  • Added support for 16- and 32-bit per channel ImageFormats for G3D::Image

New in G3D 7.01 (Nov 25, 2008)

  • Video file reading and writing via FFmpeg added
  • Added computeBounds method to ArticulatedModel::Part that calls computeBounds on each TriList. Changed updateAll to automatically call computeBounds [Kyle]
  • Added constructor to Matrix4 to construct a matrix from an upper-left 3x3 submatrix and an upper-right 3x1 submatrix [Kyle]
  • Incompatible change: RegistryUtil functions now require an explicit value parameter instead of extracting the value from the key string.
  • Incompatible change:GApp now calls the onLogic handler before the simulation handlers but after the user input and network handlers
  • Incompatible change: Changed GHashCode and other functors to traits. See guidenewuser. Added typedefs and adapters to make this mostly backwards compatible.
  • Added parallax occlusion mapping to G3D::SuperShader (specify Material::parallaxSteps > 1)
  • Added normal mapping to G3D::SuperShader (specify Material::parallaxSteps == 0)
  • G3D::Texture resizes textures that exceed the device maximum size
  • G3D::Array now allows control over MIN_ELEMENTS and MIN_BYTES using template parameters
  • Clarified G3D::Any file format in documentation
  • G3D::Texture::PreProcess::gammaAdjust
  • G3D::ShadowMap::lightProjection(), G3D::ShadowMap::lightFrame()
  • Added Barycentric coordinates to CollisionDetection::isPointInTriangle
  • G3D::RenderDevice::beginOpenGL, G3D::RenderDevice::endOpenGL
  • PointAABSPTree::clearData
  • AABSPTree -> KDTree
  • GApp now allows the MidgetManager to process events in onEvent before the GApp::onEvent executes
  • Added spotlight support to SuperShader
  • Switched SuperShader to use ph
  • Adjusted standard deviation used in G3D::GaussianBlur to provide smoother filtering
  • Put HashTrait and EqualsTrait in their own headers separate from Table.h
  • ArticulatedModel::facet
  • Renamed GWindow to G3D::OSWindow
  • ReferenceCountedPointer now asserts that the pointer is not NULL on method invocation
  • G3D::ShadowMap now computes appropriate matrices for spot lights
  • Added ImageFormat::convert [Danny and Kyle]
  • 3- and 4- argument min and max
  • G3D::GaussianBlur now correctly sets the output viewport
  • G3D::Framebuffer::clear
  • IFSModel and ArticulatedModel now load Princeton Shape Benchmark OFF files.
  • G3D::Any CoordinateFrame now serialized using angles
  • CameraControlWindow now prints angles in degrees
  • ImageXXX classes now have a format() method
  • OSWindow::create
  • MeshAlg::toIndexedTriList now supports TRIANGLE_FAN input.
  • Tuned Table and hash functions for performance [Kyle & Morgan]
  • GEvent::toString
  • G3D::TextInput now treats characters with ASCII code greater than 127 as symbols
  • G3D::ThreadSet
  • G3D::Texture::white
  • G3D::Matrix4::upper3x3
  • G3D::Matrix4::homoMul
  • ArticulateModel::fromFile now takes a Matrix4 instead of a CoordinateFrame to allow arbitrary linear transformations.
  • ArticulatedModel::createCornellBox
  • Material::createDiffuse
  • ImageFormat::convert
  • G3D::filenameBase
  • Removed SDL_SysWMEvent, which was never supported by GEvent anyway
  • Removed TextureFormat::SAME_AS_SCREEN to break dependence on OpenGL
  • TextureFormat has been renamed to G3D::ImageFormat and moved into G3D.lib
  • Added variable time control points to G3D::Spline
  • Gui controls now have configureable GuiControl::setCaptionSize
  • Gui controls now default to no indent if the caption is "" (use " " for indent with no caption)
  • G3D::GuiContainer
  • G3D::GThread::started
  • buildg3d installation arguments changed--see
  • G3D::Vector3int32
  • GuiButton now accepts an optional callback function/method
  • FileDialog now accepts an extra "note" argument
  • FileDialog::getFilename non-static to support subclassing
  • System::currentDateString
  • Expanded G3D::ArticulatedModel documentation
  • Build system now executes on multiple processors (about 1.8x speedup for dual-core)
  • Build system now caches dependencies (about 5x speedup for small incremental builds)
  • Patched LOAD_EXTENSION to work around gcc pointer-to-function cast issues
  • Tool buttons added to a G3D::GuiPane automatically align to the previous one.
  • Added invisible GuiPane style
  • G3D::uint128 [Kyle]
  • Increased BSPMap rendering by 10% by reducing state changes
  • Added prompt argument to FileDialog::getFilename
  • G3D::PosedModel::getBoxBounds on an array
  • G3D::PosedModel::getSphereBounds on an array
  • Changed RenderDevice::screenshot to save .png instead of .jpg files
  • G3D::SuperShader now supports a customMap and customConstant for experimenting with shaders.
  • G3D::SuperShader now does not ever light the "back" of a bump-mapped poly, even if the bumps should create a light-facing surface
  • G3D::Material promoted to its own class (was G3D::SuperShader::Material)
  • G3D::Matrix2
  • G3D::VertexAndPixelShader::ArgList::size
  • G3D::pathConcat
  • G3D::WidgetManager::moveWidgetToBack
  • SuperShader / NonShadowed.pix now uses arrays of lights instead of separate variables
  • Reduced cost of release-mode Shader argument validation
  • G3D::PosedModel::sortAndRender now performs view-frustum culling of objects
  • G3D::Draw::lighting for visualizing light sources
  • G3D::SuperShader::Pass::purgeCache
  • G3D::GuiSlider::setRange
  • G3D::GuiPane::addPane no longer takes a
  • G3D::VertexAndPixelShader::ArgList::remove
  • Optimized G3D::Matrix::pseudoInverse; now about 2x faster
  • G3D::GLight::effectSphere
  • G3D::GuiWindow::moveTo
  • G3D::GuiWindow::setEnabled, enabled
  • G3D::GuiButton now sizes to its caption
  • G3D::GuiSlider now fires events on change and drag
  • G3D::Shader arguments (in G3D::VertexAndPixelShader::ArgList) may now be "optional"
  • G3D::GLight::point now has quadratic attenuation by default.
  • G3D::ImageFormat::name
  • g3dmath.h now includes inttypes.h on gcc and simulates it on visual studio
  • G3D::RenderDevice::cullFace
  • G3D::LineSegment2D::intersection
  • G3D::BinaryInput::setEndian
  • G3D::GEvent::MOUSE_BUTTON_CLICK
  • Generalized ShadowMap to work with spotlights as well as directional lights
  • G3D::GLCaps::supportsTexture, G3D::GLCaps::supportsRenderBuffer
  • Opaque G3D::ArticulatedModels now support more than 2 non-shadow casting light sources
  • Added proof symbol parsing to TextInput [Corey Taylor]
  • Added G3D::AABox::corner() to match G3D::Box::corner() [Corey Taylor]
  • OS X: G3D::CarbonWindow [Casey]
  • OS X: iCompile now generates OS X application bundles and dmg files
  • OS X build no longer depends on X11
  • G3D::FileDialog
  • G3D::Table now allows overriding the default equality operator for keys
  • Incompatible change: GApp::onBeforeSimulation now allows mutation of the timesteps
  • Incompatible change: Merged GApp::simTime and idealSimTime (the sim time is now idealized)
  • cmake now generates project files for Xcode, MinGW, and all Visual Studio versions [Corey Taylor]
  • OS X: icompile and buildg3d now generate universal binaries on Intel machines
  • G3D::PosedModel::objectSpaceTangents
  • G3D::IFSModel::fromData
  • G3D::MeshAlg::generateGrid
  • G3D::BinaryOutput::ok()
  • G3D::generateFilenameBase
  • G3D::IFSModel::fromFile now defaults to not welding for improved performance
  • G3D::IFSModel members are now protected to allow subclassing
  • Removed G3D::uint in favor of G3D::uint32 [Corey Taylor]
  • Added G3D::GMaterial(TextureRef) constructor
  • Made G3D::GMaterial fields floats
  • G3D::GuiControl::setCaption, G3D::GuiWindow::setCaption
  • G3D::GuiControl can now be subclassed for custom user-defined controls
  • G3D::GuiTheme::renderCanvas
  • G3D::GuiTheme::pauseRendering, G3D::GuiTheme::resumeRendering
  • G3D::PosedModel::sortAndRender
  • G3D::Framebuffer can now attach cube map faces
  • System::describeSystem now prints current working directory and application name
  • Added /usr/local/-G3D dir- to system data file path [Kai Schroeder]
  • Various patches for detecting new CPUs in System.cpp [Corey Taylor]
  • g3d_Index macro now available in G3D::Shader GLSL code
  • G3D::BackgroundWidget
  • G3D::TriangleShape
  • Fix: incompatible change OSWindow::Settings::asynchronous is now spelled correclty, with two "n"s
  • Fix: Fixes for point-in-triangle and moving-sphere-fixed-tri; previous code projected onto the wrong axes, so barycentric coords were wrong for nearly vertical triangles.
  • Fix: Changed some doubles to floats in G3D::Triangle
  • Fix: Changed all of the isXXX(char) methods to take unsigned char arguments so that they can parse extended symbols
  • Fix: AABSPTree::deserializeStructure was missing a return statement [Derex]
  • Fix: Draw::plane was drawing the plane reflected through the origin [Macklin Chaffee]
  • Fix: Added template parameters to friends in AABSPTree and PointAABSPTree [expiring_frog]
  • Fix: System::findDataFile uses data directory set by GApp
  • Fix: AtomicInt32 decrement returns int32 instead of uint32
  • Fix: OS X function keys now work correctly under CarbonWindow
  • Fix: OS X modifier keys now work correctly under CarbonWindow
  • Fix: OS X arrow keys now work correctly under CarbonWindow
  • Fix: Rewrote buildg3d to fix many longstanding bugs, including mismatched 'bin' directories and confusion about the 'install' target
  • Fix: gfxmeter reports now format correctly regardless of monitor width
  • Fix: patch to initialize correctly on the Mesa library, which crashes when requesting DEPTH24_STENCIL8
  • Fix: stringSplit now works correctly for adjacent split characters [Akita Noek]
  • Fix: Draw::axes labels now obey current viewport
  • Fix: GuiWindow now loses focus when hidden
  • Fix: GFont::draw2D now computes correct horizontal bounds on text
  • Fix: GuiPane no longer renders when invisible
  • Fix: Clicking off of all GuiWindows makes none of them have focus
  • Fix: Win32Window now allows windows programmatically positioned anywhere on a multiple monitor screen
  • Fix: Win32Window now does not fail when dragging a GL context between multiple monitors
  • Fix: SuperShader now correctly lights bump-mapped surfaces in tangent space [Kyle Whitson]
  • Fix: GuiPane now renders its caption
  • Fix: Rect2D::border now grows the correct way (positive = grow)
  • Fix: Added % operator to TextInput
  • Fix: Added multi-line printing to GConsole
  • Fix: G3D::Texture can now create empty cube maps
  • Fix: G3D::Table iterator now correctly parameterized on hashfunction and equality function as well as key and value
  • Fix: G3D::Table now passes Values by reference when setting them, avoiding one copy
  • Fix: various Framebuffer/empty texture initialization bugs on ATI cards
  • Fix: uniform arrays for GLSL
  • Fix: All aliasing warnings have been fixed no longer needs -fno-strict-aliasing [Corey Taylor]
  • Fix: [ 1829704 ] debugAssert in Array::operator[](unsigned int n) wrong
  • Fix: GuiWindow::pack now recursively packs all child panes
  • Fix: patch to continue build when javac isn't found on both windows and linux [Corey Taylor]
  • Fix: [ 1599139 ] Fixes to make buildg3d work on non C: windows systems [Patrick Burke]
  • Fix: Added faster overloads of GImage::stripAlpha() and GImage::insertRedAsAlpha() [Corey Taylor]
  • Fix: GImage::save() with odd-widths bmp files [Corey Taylor]
  • Fix: Draw::capule renders properly (capule was not visible) [Corey Taylor]
  • Fix: Patched ShadowMap to work around ATI and OS X driver shadow map bugs. Incompatible change:Required changing several interfaces to take ShadowMapRef arguments.
  • Fix: GCamera::Frustum was facing backwards
  • Fix: [ 1774479 ] texture glformats wrong (caused incorrect font rendering on Intel)
  • Fix: ArticulatedModel static methods do not force loading of shaders unless an ArticulatedModel has actually been loaded.
  • Fix: RenderDevice::setAlphaWrite/setColorWrite implemented correctly
  • Fix: Implemented ImageFormat::fromCode
  • Fix: [ 1766509 ] Texture doesn't handle 3D textures correctly
  • Fix: Separate bool, float, and int back ends for GLSL shaders