Support Forum       G3D Web Page     
Change Log



Changes in 10.01:

  • Increased minimum spec to OpenGL 4.1 core, GLSL 410
  • Replaced GApp::FilmSettings::enabled with FilmSettings::effectsEnabled() and FilmSettings::setEffectsEnabled() [Mike]
  • Shader calls using Args::setRect now use implicit indices. [Mike]
  • Shader calls using Args::setRect now use a triangle strip if unable to use single large triangle. [Mike]
  • Fixed Projection::reconstructFromDepthProjInfo for non-symmetric matrices [Mike]
  • Added an optional Texture::Specification::name [Mike]
  • Add collapseEmptyTags argument to XML::unparse and XML::save [Mike]
  • Renamed RefractionQuality to RefractionHint [Mike]
  • Added FilmSettings::extendGBufferSpecification [Mike]
  • Added DepthOfFieldSettings::extendGBufferSpecification [Mike]
  • Added MotionBlurSettings::extendGBufferSpecification [Mike]
  • Added AmbientOcclusionSettings::extendGBufferSpecification [Mike]
  • Added GApp::extendGBufferSpecification [Mike]
  • G3D::Vector4uint16 [Mike]
  • Added G3D::BindlessTextureHandle to support bindless textures. [Mike]
  • Added GuiPane::addDropDownList variants that accept std::function<void(void)> for their callback. [Mike]
  • Added Framebuffer::blitTo [Mike]
  • Added Texture::singleChannelDifference [Mike]
  • Added Texture::Visualization::setShaderArgs [Mike]
  • Added Texture::Visualization::colorShiftMatrix [Mike]
  • Added ImageFormat::floatFormat [Mike]
  • Added OSWindow::Settings::alwaysOnTop [Mike]
  • Fixed Scroll Pane Rendering [Sam]
  • Changed FileDilaog to use Native File Dialogs (NFD) [Sam]
  • Added std::function (and thus capturing lambda) support to GuiButtons [Mike]
  • Added G3D::SmallTable [Mike]
  • GuiTheme::WindowStyle::FULL_DISAPPEARING_STYLE and GuiTheme::WindowStyle::PARTIAL_DISAPPEARING_STYLE added [Sam]
  • VideoOutput/VideoInput APIs stripped down, and functionality restored [Sam]
  • FFmpeg updated to newest version (v2.5.4) [Sam]
  • G3DSpecification::deployMode allows forcing a developer machine into end-user mode for testing
  • GApp's Files Used section now uses canonical absolute paths and sorts by filename
  • Added CPU procedural geometry sample program
  • Fix: ArticulatedModel::Geometry::cleanGeometry now correctly propagates vertex normals back to the source vertex array even when not simultaneously merging colocated vertices.
  • Moved Beta Squadron scene to data-files
  • Changed G3D::Projection to have a 50 degree field of view and infinite projection plane by default
  • Added G3D::Surface::lastChangeTime and G3D::ShadowMap::lastUpdateTime
  • G3D::ShadowMaps now only update when the light or a shadow caster has changed since the last update
  • Added G3D::Renderer and G3D::DefaultRenderer implementation
  • Added GApp::m_renderer field
  • Switched Starter sample project to use DeferredRenderer
  • G3D::AlphaFilter
  • Replaced Surface::canRenderIntoGBuffer with Surface::canBeFullyRepresentedInGBuffer
  • Removed Surface::renderTranslucent (Surfaces should now check G3D::RenderDevice::depthWrite to detect opaque passes)
  • Removed UniversalSurface::extract (use G3D::dispatchOnType)
  • Removed Surface::render overload that handles shadow maps (use G3D::Renderer)
  • Texture::white(), opaqueBlack(), etc. now return const references
  • Unified most <white> textures
  • Assigned color Textures names based on their color
  • Removed all instances of radianceScale throughout the system
  • Removed Surface::depthWriteHint; there are now strict semantics for which surfaces may write to the depth buffer
  • Fix: Added min/max/mean texture support for sRGB formats, which fixed some alpha blending and sorting bugs
  • Modified viewer to speed re-loading of models
  • Built glew as a standalone static library (used to be part of GLG3D)
  • Added G3D::DepthFirstTreeBuilder template class, supporting methods DepthFirstTreeBuilder::goToParent() and DepthFirstTreeBuilder::enterChild(Node& node)
  • Added G3D::buildPrefixTree(Array<String>& list, DepthFirstTreeBuilder<String>& tree) to build prefix hierarchy trees according to G3D::greatestCommonPrefix
  • Added G3D::greatestCommonPrefix(consst String a, const String b), returns greatest common :, ;, /, , or \ separated prefix
  • Added implementation of weighted, blended order-independent transparency to G3D::DefaultRenderer
  • Added "call " prefix to pre-Build Event scripts to ensure that Visual Studio runs all lines
  • Refactored GuiMenu constructor to eliminate duplicate code
  • Added optional destination pixel offset to G3D::Film::exposeAndRender
  • Fix for determinism in Surfel::scatter [Axel Lewenhaupt]
  • Fix for PrecomputedRandom::reset override [Axel Lewenhaupt]
  • Textures created from OpenGL handles can now avoid deallocating the underlying GL resource on deallocation
  • Added projectToPixelMatrix to the values automatically set on a shader by Camera
  • Separated data-files out into separate asset packs in the data10 directory
  • Removed G3D::Surface::hasPartialCoverage to simplify the API
  • Added Vector2uint32 and Point2uint32
  • Removed GApp::renderDebugInfo and replaced it with the DebugTextWidget
  • Added Image::saveGIF(const String& filename, const Array<shared_ptr<Image>>& sequence, const double& fps) for GIF image output
  • Added GuiButton::isdown(), GuiButton::setDown(), GuiButton::setUp()
  • ArticulatedModel now allocates all indices in the same large index buffer
  • Added Oculus SDK to G3D
  • Added GLG3DVR.lib library for VR
  • Removed fixed-function ShadowMap::setMode
  • ShadowMap now minimizes the update when objects move
  • ShadowMap now notices when a Surface disappears
  • Added float16
  • Simplified ArticulatedModel::Pose conversion from Any for instancing
  • Added new G3D Transparency Test scene
  • Added new G3D Holodeck scene
  • Framebuffer now guarantees that attachment points match shader output layout qualifiers
  • Renamed "computeF" to "schlickFresnel" in shaders and C++
  • Added ExpressiveLightScatteringProperties::receivesShadows
  • Removed GameTime (use G3D::SimTime)
  • Added G3D::roundStochastically()
  • Changed SimTime to float (from double)
  • Added Camera, Texture*, and UniversalMaterial* structs in GLSL
  • Added stochastic shadow mapping support via Light::stochastic and the HIGH_QUALITY_SHADOW_MAP_FILTERING shader macro
  • Added default ArticulatedModel::Specification::refractionQuality hint
  • G3D::Args::setNumIndices can now override the length of the attribute arrays or index arrays
  • Added G3D::Array randomize for parallel arrays
  • Renamed G3D::Proxy to G3D::lazy_ptr
  • Added OpenVR API to the distribution
  • G3D::FilePath::mangle
  • Threadsafed EXR image loading
  • Added support for loading 1-bit PNG
  • G3D::Framebuffer::invertY
  • G3D::Framebuffer::isHardwareFramebuffer
  • Allowed G3D::Framebuffer to model the hardware framebuffer
  • Added optional invertY parameter to G3D::Draw::rect2D
  • GApp::Settings::FilmSettings -> GApp::Settings::HDRFramebufferSettings
  • Moved guard band from GApp::Settings to G3D::GApp::HDRFramebufferSettings
  • Removed (unused) offset and downsample arguments from Film::exposeAndRender
  • Switched to standard engine smoothness for encoding glossy lobes
  • Re-tuned OBJ material import for glossy terms
  • Added GLCaps::smallHDRFormat
  • G3D::Texture::cosHemiRandom(), G3D::Texture::sphereRandom(), G3D::Texture::uniformRandom()
  • Fixed SNORM ImageFormats when invoking Texture::fromPixelTransferBuffer
  • isWhiteSpace &rarr isWhitespace
  • Pointer can now return a Pointer::IndirectValue for a const Pointer (to a non-const value)
  • Cleaned up GuiPane::addRadioButton template type safety
  • G3D::Thread::runConcurrently
  • Added G3D::TriTreeBase with an API designed for performance
  • Added minDistance and maxDistance to G3D::Ray
  • Added default G3D::HashTrait for std::thread::id
  • Added Intel Thread Building Blocks (tbb)
  • Added G3D::Random::threadCommon
  • G3D::Surface::setStorage
  • G3D::Tri::setStorage
  • G3D::Light::spotHardness
  • G3D::ReferenceCountedObject::createShared
  • G3D::GuiButton callback now fires on delivery of the G3D::GEventType::GUI_ACTION event insead of during the mouse down handler
  • G3D::UniversalSurface now binds the current depth buffer during forward render passes
  • Moved renderShadowMaps from G3D::Surface to G3D::Light
  • G3D::Light::possiblyIlluminates
  • Improved light culling for forward rendering
  • AlphaHint → G3D::AlphaFilter
  • G3D::PrecomputedRay
  • Minimized memory footprint of G3D::Ray
  • G3D::Vector3::cosPowHemiHemiRandom
  • G3D::Array::Array constructor that accepts initializer lists
  • G3D::Vector2uint16, G3D::Point2uint16
  • G3D::Image::increment, G3D::Image::bilinearIncrement
  • G3D::CubeMap
  • G3D::Scene::skyboxAsCubeMap
  • G3D::Color3::sRGBToRGB, G3D::Color3::RGBToSRGB
  • Added g3d_RunTime to shaders
  • Added G3D::CFrame::fromXAxis, G3D::CFrame::fromYAxis, G3D::CFrame::fromZAxis
  • Added material test object to data10/common [Kenny Jones]
  • ffmpeg build warnings now suppressed on OS X
  • Fixed stuck menus [Kenny Jones]
  • Added support to ArticulatedModel for VOX files
  • Added G3D::ArticulatedModel::sourceSpecification
  • Removed dead Texture::DDSTexture class
  • Refactored UniversalSurface shaders to abstract UniversalMaterial helpers
  • Added option to turn GuiMenus into prefix menus [Kenny Jones]
  • G3D::Scene::registerModelSubclass
  • G3D::PointModel and G3D::PointSurface [Zander]
  • Initialization fix for System::time by Pavel Pavlov
  • G3D::PathTracer
  • Replaced G3D::GApp::Settings::HDRFramebufferSettings::dimensions with G3D::GApp::Settings::HDRFramebufferSettings::sampleRateOneDimension
  • Fixed Inf/Nan propagating between color channels in the texture visualizer
  • Removed G3D_64BIT and G3D_32BIT macros as only 64-bit builds are supported
  • Removed G3D_DEPRECATED in favor of c++14 [[deprecated]] attribute
  • Removed Texture::Preprocess::computeNormalMap. Use G3D::BumpMapPreprocess::Mode instead
  • G3D::BumpMapPreprocess::Mode
  • Added autodetect support for bump, normal, and normal-bump maps
  • Added G3D::ScreenCapture for capturing screenshots and videos from code as well as G3D::VideoCaptureDialog.
  • Added putting svn revision in filename and svn file add to G3D::ScreenCapture
  • Added highlighting to GuiTextBox and GuiMultilineTextBox
  • OSWindow::show and OSWindow::hide
  • Removed SS_EXPRESSIVE_MOTION, MotionBlurSettings::cameraMotionInfluence
  • Added temporal antialiasing
  • Removed Surface::anyUnblended and Surface::requiresBlending (use G3D::Surface::transparencyType now)
  • Renamed/refactored
    • G3D.lib to G3D-base.lib
    • GLG3D.lib to G3D-gfx.lib and G3D-app.lib
    • G3D/G3DAll.h to G3D/G3D.h
  • Moved all external dependency libraries into the external/ subdirectory
  • Switched G3D::VisibleEntity to rely on G3D::Model::pose instead of per-subclass custom code
  • Made the active camera not appear during SceneEditorWindow camera visualization (because it just blocks the view)
  • Added G3D::VoxelModel and G3D::VoxelSurface [Zander]
  • Added G3D::FontModel and G3D::TextSurface [Zander]
  • Removed G3D::Mutex and G3D::MutexLock in favor of standard library mutex
  • Removed G3D::AtomicInt32 in favor of standard library atomics
  • Xbox360Controller renamed to GameController
  • GameController::StickIndex to G3D::JoystickIndex
  • G3D::XR and G3d::XRWidget
  • Exposed Entity::Track subclasses
  • Removed G3D::Thread and G3D::ThreadSet in favor of std::thread
  • Removed G3D::System::numCores() in favor of std::thread::hardware_concurrency
  • G3D::Light::spotSquare replaced with G3D::Light::rectangular, works for both area and spot lights
  • Added G3D::VideoPlayer to wrap G3D::VideoInput which was updated to only return next frame
  • G3D::Matrix2x3
  • Added area lights to G3D::PathTracer
  • G3D::TextureBrowserWindow can now be constructed from an explicit texture.
  • G3D::Image::metaDataFromBinaryInput
  • G3D::Image can now export to any kind of G3D::PixelTransferBuffer
  • G3D::PixelTransferBuffer::rowOffset
  • Removed Texture::fromNothing
  • Retired Win32Window and X11Window to the graveyard
  • Added G3D::Color3::fromWavelengthNanometers
  • G3D::FileSystem::tempFilename
  • G3D::GuiTextureBox can now export raw images to disk
  • G3D::GuiTextureBox can now capture video
  • Added GLSL RGBtoLuminance
  • GLSL routines now appear in the public documentation
  • Removed G3D::UniversalMaterial customMap/customTex/customConstant
  • Removed shader support for light maps on OS X due to being limited by the number of fragment samplers
  • Added G3D::Light::areaLightPullback for better approximating real-time area lights with point lights.
  • Added scenes using area lights
  • Added more cube maps
  • Rewrote entity sample program for more animation
  • Added G3D::Entity::onSimulation support for teleportation
  • Exposed G3D::Entity::EntityTrack publicly, allowed optional child frame
  • G3D::Scene and all other places loading ArticulatedModel::Specifications can now coerce them from a file string that ends in ArticulatedModel.Any
  • G3D::Entity::lastBoxBoundArraysOverlap
  • G3D::VideoOutput can now work with non-aligned buffer row sizes
  • G3D::WebServer
  • G3D::ArticulatedModel::Pose::scale
  • G3D::GLCaps::INTEL
  • G3D::Matrix3::is3DRotationDilation
  • Added 3D positional audio to G3D::AudioDevice, G3D::AudioChannel, and G3D::Sound
  • G3D::SoundEntity
  • G3D::Entity::playSound
  • Fixed G3D::ArticulatedModel merger to use the original OBJ group name instead of doubling it (this may break some data files)
  • G3D::ParseMTL::Options::defaultBumpMapIterations
  • G3D::G3DSpecification::defaultGuiWindowPixelScale
  • G3D::ScreenCapture::saveImageGridToJournal
  • G3D::Vector2int32::parseResolution
  • G3D::runConcurrently that takes size_t arguments
  • G3D::OSWindow::primaryDisplayRefreshRate
  • G3D::TimeQueue
  • G3D::Entity::canCauseCollisions, physicalSimulation, mass
  • G3D::MeshAlg::identifyFeatureEdges
  • G3D::Texture::copyAndConvertFormat
  • G3D::ArticulatedModel::HeightfieldOptions::elevationScale
  • Scaled emission by 1/sqrt(coverage) for nonzero coverage to split the difference between pre- and un-multiplied alpha. This makes it easier to have nearly-additive surfaces.
  • Added G3D::Shader preprocessor commands for #include MACRO and #eval(MACRO)
  • Shader compilation is moved to the first call site from load time in order to support new preprocessor features that interact with macro arguments. This means that when pressing F5 to reload shaders, syntax errors will be caught when the shaders execute instead of in the keyboard event handler.
  • Added G3D::RenderPass::TRANSPARENT_AS_OPAQUE.
  • G3D::Shader now binds g3d_ClipInfo by default.
  • G3D::GApp::textureByName().
  • G3D::GApp::showInTextureBrowser().
  • Project files now build and run even if g3d is not in the PATH on Windows
  • Removed G3D::GKey implicit char constructor to prevent signed/overflow bugs
  • G3D::Image::forEachPixel
  • G3D::TriTree helper for constructing directly from a G3D::Scene
  • G3D::Surfel::scatter now returns true if the ray scattered
  • Defined G3D_X86 and G3D_ARM macros on the appropriate processors
  • Added G3D::GApp::typedScene
  • G3D::GApp::realTimeTargetDurationG3D::GApp::frameDuration
  • Converted TBB from .so to .dylib on MacOS. You may need to run /usr/libexec/locate.updatedb when updating on that platform.
  • Added error message String as optional last argument for AnyTableReader::get() methods. This string gets appended to any ParseError it catches.
  • G3D::FilmSettings::upscaleFilter(), G3D::FilmSettings::downscaleFilter()
  • G3D::ResampleFilter
  • Changed the biasing of 8-bit motion vectors to make zero exactly representable [Ben Boudaoud]
  • Added new G3D::Image::forEachPixel overloads for non-mutating callbacks and for passing the color by value instead of const reference (which is more convenient for the caller and probably the same performance on a 64-bit machine).
  • Exposed FMOD's setDSPBufferSize parameters in G3DSpecification with FMOD defaults as G3D defaults. [Josef Spjut]
  • Excluded Python and Embree from linking on ARM, since they use precompiled x64 binaries in the current build
  • Made G3D::String a typedef for std::string on legacy 32-bit platforms, since that class depends on a 8-byte aligned allocator that 32-bit runtimes do not necessarily provide.
  • Added support for OpenGL ES OSWindows.
  • Added G3D::nextMod3().
  • Added G3D::Edge::twinIndex().
  • Added G3D::Edge::nextEdgeIndexInFace().
  • Added G3D::ArticulatedModel::Specification::convertMTLToUniversalMaterialSpecification.
  • Added G3D::Matrix2x3 * Vector3 operator

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:

Changes in 9.01:

  • Added CMakeLists.txt files to optionally support building with CMake
  • Fix: Corrected a glfwSwapInterval call in GLFWWindow that requires a current context
  • Fix: Changed how shared_ptr and weak_ptr are included in G3D::platform.h to enable linking against libc++
  • Fix: Added ifdef to prevent redefinition error with int64 and long constructors on 64-bit linux in G3D:Any
  • Fix: GLFWWindow now obeys stereo setting request

Changes in 9.00:

  • Added depth peel functionality to Surface::renderDepthOnly and its subclasses
  • Object velocities are kept when time does not advance, allowing for freeze-frame motion blur [Sam]
  • Updated GuiTextureBox Interface [Sam]
  • RenderDevice::current → RenderDevice::current
  • Removed RenderDevice::applyRect and replaced it with RenderDevice::apply [Sam] [James]
  • Shader::ShaderProgram::addVertexAttributesFromSource & addUniformsFromSource support full modern GLSL parsing rules [Sam]
  • Added Interpolation Mode and Extrapolation Mode Radio Buttons to PhysicsFramSplineEditor Window [Sam]
  • Added DrawTitle [Sam]
  • RenderDevice::intersectClip2D
  • LAUNCH_SHADER API [James]
  • G3D::LightingEnvironment now save when saving a G3D::Scene [Mike]
  • G3D::ProfileWindow now reports results to 3 decimal places [Mike]
  • OSWindow::setIcon now works on OS X [Mike]
  • Added MD2Model::intersect [Mike]
  • Removed MIN_BYTES template parameter from G3D::Array [Mike]
  • Added accurateBounds to MD3Model::posePart [Dan]
  • Added MD3Model::intersect [Dan]
  • Added HeightFieldModel::Intersect [Dan]
  • Added Framebuffer::texture methods [Dan]
  • Viewer now works for md3 models [Dan]
  • Clicking in a GuiTextBox now moves the cursor [Sam]
  • COLLADA now loads materials from assimp properly. [Dan]
  • UniversalMaterials can now be loaded from textures instead of just from files. [Dan]
  • all member variables of model::HitInfo are now const so as to require the users to use the set method instead of setting the fields directly. [Dan]
  • PhysicsFrameSplines control points can now be selected and edited with the mouse. [Dan]
  • In the starter, pressing 'g' now moves the camera to the surface at the center of the screen [Sam]
  • Frustum::boundingBox
  • Added simpleGame sample [Mike]
  • Added a Seymour.ArticulatedModel.Any [Mike]
  • Added SceneEditorWindow::preventEntitySelect and SceneEditorWindow::setPreventEntitySelect [Mike]
  • Changed the cursor to be shown by default when full screen [Sam]
  • Added ArticulatedModel HeightfieldModel to MaterialTest [Sam]
  • Added ArticulatedModel::Specification HashTrait and operator==
  • Moved Viewer and PixelShader from using Lighting to LocalLightingEnvironmnet, and removed now-deprecated Lighting [Sam]
  • Implemented a global texture cache
  • Fixed .am.any drop to support dropping of multiple models and placing dragged entities onto surfaces. Also made FILE_DROP events return nontrivial x and y coordinates. [Sam]
  • Fixed mouse clicks for ThirdPersonManipulator and Entity Selection to recognize guard band [Sam]
  • Support for both linear and cubic splines
  • Casting a ray into the scene now returns information about the entity it hit. [Dan]
  • Added virtual name method to model and added class hitInfo to model (for future use) [Dan]
  • Fixed video recording bug so now recording can properly not show the GUI [Sam]
  • Added debugDrawLabel [Sam]
  • Added OS X ASSIMP support, enabled .dae loading in OS X. [Mike]
  • Added _NO_DEBUG_HEAP=1 to all scratch projects [Mike]
  • G3D::HaltonSequence [Mike]
  • G3D::Shader respects single-line comments in preprocessor pragmas for shaders [Mike]
  • G3D::Shader now supports \#expect pragmas [Mike]
  • G3D::OSWindow::Settings::debugContext [Mike]
  • G3D::Shader now supports \#foreach pragmas [Mike]
  • G3D::BufferTexture::name() [Mike]
  • Unframed windows now supported. [Mike]
  • Added free list for G3D::GLPixelTransferBuffer opengl buffer objects, and GLPixelTransferBuffer::deleteAllBuffers() which is called on shutdown. [Mike]
  • G3D::BufferTexture [Mike]
  • GLCaps::maxTextureBufferSize() [Mike]
  • GLCaps::PixelTransferBuffer::pixelCount() [Mike]
  • Added minGlutGLSL sample [Mike]
  • Added support for compute shaders in G3D::Shader [Mike]
  • F9 now starts/stops time [Mike]
  • Color3::operator/() [Mike]
  • G3D::MarkerEntity
  • G3D_DECLARE_ENUM_CLASS
  • Added classname() static method to G3D_DECLARE_ENUM_CLASS_METHODS
  • Added Overloaded forms of DebugDraw to avoid boilerplate typing. [Sam]
  • When loading a UniversalMaterial from a ParseMTL, the case of map_d (alpha) and map_Kd (lambertian) as separate files is now supported; also fixes a bug with Shininess and Glossiness read from separate files. [Sam]
  • Added support for JSON special numbers to G3D::TextInput
  • G3D::ThreadsafeQueue
  • Added TextInput constructor from raw char array
  • Upgraded mongoose.lib to version 3.8 beta, added patches for websocket support (from git)
  • Added libqrencode to the G3D distribution (it is not part of G3D itself)
  • G3D::GuiMenu uses a scroll pane when its contents get too big for the window [Mike]
  • GuiTheme::ScrollPaneStyle [Mike]
  • Added a global texture cache [Mike]
  • WeakCache::getValues [Mike]
  • ArticulatedModel::geometryArray() [Mike]
  • PhysicsFrameSpline::scaleControlPoints() [Mike]
  • ArticulatedModel completely rewritten, now supports skeletal animation [Mike]
  • Added support for integer and double G3D::AttributeArray in G3D::Shader [Mike]
  • Added Vector4int32 [Mike]
  • Changed Spline::cyclic to Spline::extrapolationMode [Mike]
  • SceneEditorWindow::setShowLightSources [Mike]
  • NetMessageIterator::headerBinaryInput [Mike]
  • AmbientOcclusionSettings now available for tweaking in SceneEditorWindow [Mike]
  • Array::setAll() [Mike]
  • Integrated ASSIMP (the Open Asset Import Library) into G3D, now used for loading ".dae" files in ArticulatedModel in Windows
  • Removed G3D::CarbonWindow
  • Lighting and Surface::Environment were merged into LightingEnvironment
  • G3D::Any now fully supports parsing of Python and JSON data types - Any accepts Python-like tables using ":" and accepts "None" (case sensitive) for Nil [Sam]
  • Changed Any::NONE to Any::NIL (and Any::isNone() to Any::isNil()) [Sam]
  • Added ArticulatedModel::saveOBJ [Sam]
  • Added G3D::GuiScrollPane [Dan]
  • Added G3D::GuiScrollBar [Dan]
  • G3D::Array::removeNulls
  • Any parser treats proper unquoted strings as strings, instead of as symbols [Sam]
  • G3D::setNetworkConnectionInterval and G3D::networkConnectionInterval [Mike]
  • New network API. See G3D::NetConnection, G3D::NetServer, G3D::NetSendConnection, G3D::NetAddress
  • G3D::Draw::rect2D uses the programmable pipeline (can now produce results outside of [0, 1])
  • G3D::Shader::unlit
  • G3D::Table::getValues
  • G3D::BufferUnmapper
  • Added a texture browser to the developer panel [Mike]
  • Any parser accepts any type of bracket, brace, or paren for any type of data (table or array), and supports the ambiguous case with EMPTY_CONTAINER Type [Sam]
  • G3D::smoothstep and G3D::smootherstep
  • G3D::ArticulatedModel reverseWinding preprocess instruction
  • G3D::Vector2::maxAbs, G3D::Vector2::minAbs, G3D::Vector2::abs
  • G3D::GLFWWindow now used on Windows. [Mike]
  • G3D::replace [Sam]
  • G3D::Light::randomEmissionDirection() now works for square spot lights. [Dan]
  • In debug mode on Windows, G3D now creates a debug GL context. [Mike]
  • Texture::copy() [Mike]
  • RadiosityNormalMap support to G3D::UniversalSurface [Mike]
  • BinaryInput::readFixedLengthString
  • Added STL support for ArticulatedModel
  • G3D::Args now supports Immediate-Mode rendering through Args::setAttributePointer, Args::setIndexPointer, and Args::sendImmediateModePrimitives [Mike]
  • G3D::Draw::light, G3D::Draw::camera, G3D::Draw::visualizeCameraGeometry, G3D::Draw::visualizeLightGeometry [Mike]
  • G3D::Args::preamble, G3D::Args::appendToPreamble [Mike]
  • G3D::Line2D [Mike]
  • Changed all Visual Studio projects to use for relative directories
  • G3D::FastPointHashGrid
  • G3D::FastPODTable
  • G3D::OSWindow::getFullScreenResolutions
  • G3D::Any::save now preserves include expressions
  • G3D::MotionBlur
  • Made OSWindow::getJoystickState const
  • Switched to std::shared_ptr from ReferenceCountedPointer
  • Converted UniversalSurface gbuffer rendering to use Shader
  • G3D::Surface::renderDepthOnly new renderTransmissiveSurface parameter [Mike]
  • Cone::solidAngleFromHalfAngle and Cone::halfAngleFromSolidAngle (both float and double versions) [Mike]
  • G3D::Surface::renderDepthOnly now has a flag for rendering transmissives that defaults to true. In the early Z passes for starter and ArticulatedViewer, this is set to false.
  • G3D::isNaN now correctly checks the full range of bit patterns NaN is allowed to be in IEEE.
  • G3D::PhysicsFrameSplineEditor::renderManipulator [Mike]
  • G3D::AmbientOcclusion::Settings::sampleNum, G3D::AmbientOcclusion::setSampleNum(), G3D::AmbientOcclusion::setSampleNum() [Mike]
  • G3D::Scene
  • G3D::Projection
  • G3D::Frustum
  • G3D::DepthOfField
  • CoordinateFrame::toWorldSpace now works with planes at infinity
  • G3D::Box no longer stores explicit corners, and now stores edgeVectors in place of axes and extents. [Mike]
  • Optimized G3D::Surface rendering and G3D::Entity pose
  • Added number of G3D::Surfaces and onPose time to G3D::GApp HUD
  • G3D::PathDirection
  • G3D::TextInput::readUntilDelimiterAsString()
  • G3D::SkyboxSurface
  • Switched all of G3D to use G3D::Shader, removed OldShader and SuperShader [Mike]
  • Added allStagesShader sample to showcase new Shader. [Mike]
  • Added the G3D::PrimitiveType::PATCHES to constants.h. [Mike]
  • Updated glew.h, glew.c, glxew.h and wglew.h to their latest version (1.7). [Mike]
  • Added #for prgama support to G3D::Shader. [Mike]
  • G3D::Shader, intended to eventually replace G3D::OldShader. [Mike]
  • G3D::Args, a separate class used extensively by Shader. [Mike]
  • G3D::RenderDevice::apply and G3D::RenderDevice::applyRect, both of which take a Shader and Args. [Mike]
  • Added the allStagesShader project to showcase Shader using all 5 stages of the OpenGL 4 programmable shader pipeline. [Mike]
  • Added icosahedron.obj, an icosahedron with all vertices on the unit sphere., used in allStagesShader. [Mike]
  • Added optional vignetting to G3D::Film
  • Extended G3D::Camera with two depth-of-field models
  • G3D::AmbientOcclusion screen-space ambient obscurance [Morgan + Mike]
  • G3D::ImageFormat::BGRA8 [Mike]
  • Added convertRGBA8toBGRA8 functionality to PixelTransferBuffer::convertBuffer() [Mike]
  • Modified Win32Window::setIcon to properly convert the icon to BRGA. (Our G3D icon now displays properly). [Mike]
  • Added enum ImageFormat::NumberFormat which is {FLOATING_POINT_FORMAT, INTEGER_FORMAT, NORMALIZED_FIXED_POINT_FORMAT, OTHER}. To eventually replace the floatingPoint boolean. Modified the constructor to match, and set its value for all image formats specified in the .cpp. [Mike]
  • ImageFormat::isIntegerFormat [Mike]
  • ImageFormat::channelMask, which returns a Color4 that masks off unused components in the format, given in RGBA. For example, the mask for R32F is (1,0,0,0), for A32F is (0,0,0,1), for RGB32F is (1,1,1,0). (Note that luminance is interpreted as using only the R channel). Used by GLCaps::supportsTextureDrawBuffer(). [Mike]
  • GLCaps::supportsTextureDrawBuffer(const ImageFormat* fmt). Extended RenderDevice::init to write out the result of this function for each format alongside the supportsTexture and supportsRenderBuffer functions. [Mike] <
    • >
    • Modified MD3Model::findFrameNum() to make the animations smoother until we get to implementing blending between animations [Mike]
    • Added an optional mipLevel parameter to getTexImage, which defaults to 0. [Mike]
    • Implemented G3D::Texture::generateMipMaps() (It was defined in the header but not implemented before). [Mike]
    • Modified G3D::Tri::Intersector to store a backside boolean if we hit the backside of the Tri. getResult will flip normals/tangents if this is true. [Mike]
    • Added a new twoSided parameter to the Tri constructor, if set to true, Tri::Intersector will do double-sided intersections. (used sign bit of area, no change to Tri size) [Mike]
    • Removed G3D::Tri::otherSide() (it does not work with the new CPUVertexArrayFormat). [Mike]
    • Removed the CPUVertexArray* from Tri. Updated all methods that access information about Tri to take a const Ref to a CPUVertexArray, and added G3D::TriTree::getCPUVertexArray() (Tri is now 24 bytes in a 64 bit build) [Mike]
    • Removed v0, e1, e2, from G3D::Tri. Added the methods e1 and e2. Changed Tri::m_doubleArea to Tri::m_area for intuition's sake (Tri is now 32 bytes in a 64 bit build)[Mike]
    • Completely redesigned G3D::Tri. It now stores only v0, e1, e2, three indices into a G3D::CPUVertexArray, a pointer to G3D::CPUVertexArray, a lazy_ptr<UniversalMaterial>, and doubleArea (72 bytes in a 64 bit build). [Mike]
    • Now Passing a pointer to the G3D::TriTree throughout all intersectRay functions, and uses it to set G3D::Tri::Intersector's primitive index [Mike]
    • Added G3D::Surface::getTris(), a static method which takes an array of surfaces and returns a G3D::CPUVertexArray and an Array<Tri> from the surfaces, by separating the surfaces by subclass and calling getTrisHomogenous() on them. [Mike]
    • Added G3D::Surface::getTrisHomogenous(), a virtual function that, when implemented in subclasses, will take an array of surfaces and append to the G3D::CPUVertexArray and the Array<Tri> appropriately. [Mike]
    • Added G3D::UniversalSurface::getTrisHomogenous(), which is a UniversalSurface-specific implementation of G3D::Surface::getTrisHomogenous() [Mike]
    • Added G3D::CPUVertexArray::Vertex::transformBy() that takes a G3D::CoordinateFrame and transforms its position, tangent, and normals by the CFrame (object to world). [Mike]
    • Added G3D::CPUVertexArray::transformAndAppend() which takes a G3D::CPUVertexArray and a G3D::CoordinateFrame and appends the parameter array, transforming tangents, normals and positions from object to world space. [Mike]
    • Removed G3D::Tri::getTris(). Use G3D::Surface::getTris() instead. (updated everything internal to G3D to reflect this change) [Mike]
    • Renamed G3D::Tri::vertex() to G3D::Tri::position(), and added a new G3D::Tri::vertex() that returns the G3D::CPUVertexArray::Vertex for the specified vertex. [Mike]
    • Added G3D::Array::copyPOD() and G3D::Array::appendPOD() for fast array copy and append for "Plain Old Data" [Mike]
    • Added G3D::Array::copyFrom() to wrap up the idiom of resize(0) append(array) [Mike]
    • Disabled operator=() for G3D::CPUVertexArray [Mike]
    • Added a copy constructor for G3D::CPUVertexArray, and added G3D::CPUVertexArray::copyFrom() [Mike]
    • Added a primitive index variable to intersector, and use it to set G3D::SurfaceElement::SourcePrimitive index [Mike]
    • Modified G3D::SurfaceElement to contain a SourcePrimitive struct containing u, v, and, if set explicitly, the primitive's index [Mike]
    • G3D::Tri::Intersector::operator() now correctly uses the twoSided boolean. We had to rewrite the code and we took a 3% performance hit for ease of maintenance. [Mike]
    • Changed the NO_FFMPEG macro to G3D_NO_FFMPEG and changed it to be defined in platform.h instead of in VideoOutput.h [Mike]
    • G3D::Tri and G3D::Tri::Intersector no longer virtual, this decreases Tri size by 8 bytes in 64-bit builds [Mike]
    • Removed n the facenormal from G3D::Tri and replaced with doubleArea (e1.cross(e2).length()) [Mike]
    • G3D::RenderDevice::applyRect
    • G3D::lazy_ptr
    • VertexRange renamed to AttributeArray
    • G3D::GuiTextureBox now saves out cubemaps at 4x the width and 2x the height of one of its faces, in the panoramic view [Mike]
    • Renamed VertexAndPixelShader to ShaderProgram, matching OpenGL terminology (this was deprecated anyway)
    • canBeIndexType renamed to glCanBeIndexType
    • glIsNormalizedFixedPoint
    • G3D::Vector2unorm16
    • Added Show Cube Edges option to G3D::GuiTextureBoxInspector [Mike]
    • Reduced RenderDevice::MAX_TRACKED_TEXTURE_IMAGE_UNITS, RenderDevice::MAX_TRACKED_TEXTURE_UNITS, and RenderDevice::MAX_LIGHTS to 2 as we remove fixed-function to speed up programmable shading.
    • Added focus controls to G3D::CameraControlWindow
    • G3D::ArticulatedModel::CleanGeometrySettings::allowVertexMerging
    • G3D::Matrix4::upper2x2
    • G3D::Texture::isCubeMap
    • G3D::GuiTextureBoxInspector displays the x,y,z vector used to access the texel the mouse hovers over, instead of u,v coordinates. The texel value display is broken for cubemaps, however. [Mike]
    • G3D::GuiTextureBox supports rendering cubemaps as a panoramic texture (of double a single face's width), using u,v coordinates as scaled spherical coordinates. [Mike]
    • G3D::Texture now checks for if it is a cubemap on construction and sets visualization.isCubemap appropriately. [Mike]
    • G3D::Texture::Visualization: Added isCubemap boolean. Modified the constructors, ==, needsShader() and toAny to reflect this change. [Mike]
    • G3D::Rect2D::operator*(const Vector2& s) [Mike]
    • G3D::Texture::update(), G3D::Texture::getTexImage(), and G3DTexture::getImage() all have a new parameter that specifies the face of the cubemap to use. [Mike]
    • G3D::VideoRecordDialog::setScreenShotFormat
    • New "updateShadowMaps" argument to Surface::sortAndRender
    • G3D::WeakCache::clear
    • G3D::Matrix4float64
    • G3D::unorm16, G3D::snorm8, G3D::snorm16 [Zina]
    • Added two more default parameters to G3D::UniversalBSDF::create(), glossy = Color4::zero(), transmissive = Color4::zero() [Mike]
    • G3D::UniversalMaterial::createDiffuse(shared_ptr<Texture> texture) [Mike]
    • G3D::GBuffer now allows scale and bias on every field (except depth)
    • Removed shift + left button = right on OS X (ctrl+left still works) in FirstPersonManipulator
    • G3D::FirstPersonManipulator now uses Z and C for vertical up and down translation (configurable)
    • GuiContainer is now notified through G3D::GuiContainer::onChildControlEvent() when one of its children fires a GUI event.
    • GuiWindow now delivers events up the GUI hierarchy until they are consumed
    • G3D::ArticulatedModel::intersect
    • G3D::Color3 and G3D::Color4 now initialize to zero
    • G3D::Color2uint8
    • G3D::UniversalMaterial defaults to assuming input should be in sRGB space for lambertian, emissive, transmissive, and glossy maps (shininess and bump are assumed linear)
    • Added 64-bit targets and patched many warnings and errors for sizeof(size_t) == 64 (however, G3D is not fully 64-bit compatible yet)
    • G3D::unorm8
    • Changed default BumpMap::Specification::Settings::iterations to 1 (parallax mapping) from normal mapping
    • G3D::Surface::castsShadows
    • G3D::maxNotNPOS
    • G3D::Quat::moveTowards
    • G3D::Vector3::moveTowards
    • G3D::CFrame::moveTowards
    • GuiTheme::NO_BACKGROUND_UNLESS_FOCUSED_TEXT_BOX_STYLE
    • G3D::GuiControl::findControlUnderMouse
    • G3D::Array::trimToSize
    • G3D::OldShader now assumes GLSL 1.20 for files without a version specification
    • G3D::CFrame when passed to GLSL and the built-in G3D uniforms in shaders now use mat4x3 instead of mat4
    • G3D::ParseOBJ, ParseMTL, ParsePLY
    • G3D::TextInput::readInteger
    • G3D::CPUVertexArray; UniversalSurface::CPUGeom now uses CPUVertexArray*
    • G3D::TextInput::pushSettings, popSettings
    • G3D::Icon, G3D::IconSet can now be used to put arbitrary images on GuiControls
    • G3D::Array::swap
    • G3D::ImageFormat::R16F
    • G3D::GApp::setLowerFrameRateInBackground
    • Updated to libzip 0.10
    • G3D::AttributeArray::operator==
    • GApp::m_useFilm may now be changed after construction to disable Film per-frame
    • G3D::Matrix3::fromUnitAxisAngle
    • G3D::HashTrait<std::type_info* const> specialization
    • G3D::categorizeByDerivedType
    • G3D::Vector4int16
    • Made alpha-testing optional in G3D::TriTree
    • Extended G3D::Camera to have lens parameters
    • Lighting::Specification::Any toAny()
    • G3D::PhysicsFrameSplineEditor
    • G3D::Vector2int32
    • G3D::Texture::Visualization, G3D::Texture::visualization
    • Added ImageFormat::RGBA8I() format
    • G3D::RayGridIterator
    • Added FXAA post-process antialiasing to G3D::Film
    • Array::deleteAll -> Array::invokeDeleteOnAllElements
    • Improved error reporting from Any and ParseError
    • PhysicsFrame::operator==, Quat::operator==, PhysicsFrameSpline::operator==
    • G3D::Entity::toAny, G3D::PhysicsFrameSpline::toAny, G3D::PhysicsFrame::toAny, G3D::Quat::toAny
    • Updated G3D::CarbonWindow to follow latest Apple OS X 10.5 OpenGL recommendations; eliminated AGLDrawable
    • G3D::Camera::exposureTime
    • G3D::Surface::getBoxBounds and getSphereBounds now ignore infinite child bounding boxes (makes for tighter shadow frustum bounds in scenes with unbounded 3D widgets)
    • G3D::ArrowShape
    • All-new streamlined interface for G3D::GBuffer, now no longer in "beta"
    • G3D::GBuffer now supports face normals
    • G3D::Any::operator=(Array<T>)
    • G3D::debugDraw now allows specification of the display time
    • G3D::GImage::copySubImage &#8594; G3D::GImage::copyRect
    • G3D::GImage::pasteSubImage &#8594; G3D::GImage::copyRect (overload)
    • G3D::VideoOutput::append(VideoInput)
    • G3D::GApp::removeDebugShape, G3D::GApp::removeAllDebugShapes
    • G3D::GApp::addWidget now sets the focus on the new widget by default
    • G3D::GApp::show
    • Added G3D::ImageFormat::R32F
    • G3D::ShadowMap::updateDepth now allows small negative values
    • G3D::MD2Model::Specification::negateNormals
    • G3D::SurfaceElement
    • G3D::Any::serialize, G3D::Any::deserialize
    • G3D::GFont::draw2DWordWrap
    • G3D::GEventType::KEY_REPEAT
    • G3D::RenderDevice::setReadFramebuffer, setDrawFramebuffer
    • G3D::PointHashGrid::Iterator::hasMore
    • G3D::Light::shadowsEnabled
    • G3D::Light::power
    • G3D::FileSystem::markFileUsed, G3D::FileSystem::usedFiles
    • G3D::Point2 typedef
    • G3D::Noise
    • G3D::TriTree::intersectRay can now be invoked to early exit on any hit for shadow rays
    • Replaced all instances of .hasMore() with .isValid(), deprecated hasMore, and added isValid to all iterators.
    • Flipped the Camera::project Y-axis to match RenderDevice's Y-axis
    • Extended G3D::UniversalSurface to work with inverted cameras for planar mirror rendering
    • BIN8, BIN11, BIN16, BIN32
    • GApp will now create a G3D::RenderBuffer if the preferred depth format cannot be satisfied by a texture, e.g., because it contains stencil bits
    • G3D::GuiPane::setNewChildSize(), GuiPane::beginRow()...GuiPane::endRow()
    • G3D::PointHashGrid::getIntersectingMembers()
    • G3D::Surface::sendGeometry
    • Substantially sharpened GFont text rendering
    • G3D::UniversalMaterial::Specification(Color3)
    • G3D::Matrix3::diagonal, G3D::Matrix4::diagonal
    • G3D::Vector2::directionOrZero
    • G3D::Crypto::md5 is now static
    • G3D::Rect2D::serialize and deserialize
    • Upgraded to libpng 1.4.4
    • Added compatibility profile clipping support to SuperShader [Hai Zhou]
    • Made documentation page titles not begin with "G3D..." for ease of use in tabbed browsing
    • Tuned Vector4, Vector3, uint64, uint128 hash codes for performance instead of quality
    • iCompile can now use ICE_EXTRA_SOURCE environment variable to find G3D sources if you move them after compilation
    • Build system output directory no longer includes platform name (affects icompile as well)
    • Added new icompile working directory ([Global] workdir), defaults to data-files for new projects
    • GImage::encodePNG16, GImage::decodePNG16; Image1::load and Image1::save now support PNG16
    • Improved OFF file parsing compatibility
    • Significantly increased the performance of BinaryOutput::compress
    • G3D::GuiWindow subclasses can now initialize without OpenGL, for compute servers
    • G3D::Discovery now can operate without a GUI.
    • G3D::System::findDataFile now takes an optional caseSensitive argument
    • G3D::FileSystem::exists now takes an optional caseSensitive argument
    • G3D::GFont::makeFontFile now requires .tga input
    • G3D::GImage::RGBAtoBGRA
    • G3D::Surface::getObjectSpaceGeometry
    • G3D::BinaryOutput::writeString32 no longer writes a NULL. This behavior is backwards compatible to G3D 8.xx
    • Added support for obsolete GL_EXT_framebuffer_object so that Film and ShadowMap will work on MacBooks with Intel GPUs
    • Sample programs, viewer, and test now statically link FFMPEG on Win32 to avoid DLL/PATH problems when distributing the binaries.
    • In the G3D source tree, renamed doc-files/ to manual/ and doc-files/data-files to doc-files/ to match icompile conventions
    • Upgraded to icompile 0.5.16
    • Added TangentSpace Normal to GBuffer. It uses Encoding(2.0f, -1.0f), like the other normals in GBuffer [Mike]
    • Added Tri::setData() [Mike]
    • Added Tri::getIndex [Mike]
    • Fix: Updated TextInput and TextOutput to C11 standard
    • Fix: Updated VC10 project files to support paths with spaces in the names [Edward Powell]
    • Fix: G3D::ImageFormat now correctly prints RGB9E5F as "RGB9E5F", instead of "RGB9E10F". [Mike] <
    • >
    • Fix: Removed TriTree::m_size, which wan't storing the right value. [Mike]
    • Fix: RenderDevice::setInverseY now calls RenderDevice::forceSetCullFace after making the changes [Mike]
    • Fix: CFrame::toXYZYPRDegreesString and fromXYZYPRDegreesString are now correctly inverses (modulo 360 degrees) and have higher precision than in 8.xx
    • Fix: GApp no longer passes consumed events to UserInput unless they are button up or key up
    • Fix: BinaryInput and FilePath now convert Windows slashes to Unix ones on Unix
    • Fix: GLCaps::glslVersion now returns the correct value
    • Fix: G3D::Widget now uses G3D::Surface2D::depth for event delivery as well as rendering
    • Fix: G3D::ThirdPersonManipulator renders "in front" of objects by artificially flagging itself as transparent
    • Fix: G3D::Table::debugGetLoad now returns the correct load factor
    • Fix: G3D::GApp ensures that UserInput always receives events, even if they are consumed by Widgets
    • Fix: ShadowMap now enforces minimum bounds for empty scenes and a maximum bound for infinite scenes
    • Fix: G3D::CarbonWindow now returns proper mouse click events
    • Fix: G3D::UniversalBSDF::evaluate documentation now correctly explains that it does not contain projected area
    • Fix: G3D::PointHashGrid no longer requires a HashTrait overload
    • Fix: UniversalBSDF::evaluate now computes the same result as SuperShader for glossy terms
    • Fix: Diffuse colors for 3DS files loaded by ArticulatedModel
    • Fix: Correct loading of texture maps for 3DS files with incorrect case in them on OS X, support for 3DS reflection
    • Fix: VideoRecordDialog correctly inverts the Y axis on half-size video recording
    • Fix: G3D::Tri::area is now correct (was too large by a factor of 2x before)
    • Fix: CarbonWindow icons now load correctly
    • Fix: BinaryOutput to memory now never creates a file on disk
    • Fix: GuiWindow now consumes mouse motion events while being dragged.
    • Fix: G3D::TriTree now finds ray intersections even when the ray lies entirely within a splitting plane
    • Fix: G3D::Intersect::rayAABox had some bad logic for a few cases due to falling through a SWITCH-CASE. These are now fixed.
    • Fix: CarbonWindow now returns correct key codes when Ctrl+letter are held down
    • Fix: G3D_BEGIN_PACKED_CLASS now uses correct syntax on Unix (the macro is not backwards compatible to 8.xx, however)
    • Fix: Color4::fromARGB now works correctly inside Any deserialization
    • Fix: increased the precision of Vector3::isZero, Vector2::isZero
    • Fix: Windows shares are now properly detected as file system roots
    • Fix: Fixed memory leak in GImage::decodePNG when a PNG was loaded over an existing GImage
    • Fix: Texture min now computed correctly (was always NaN for RGB8 and multiplied by 255 for RGBA8 before)
    • Fix: Win32Window now distinguishes KEY_DOWN and KEY_REPEAT events
    • Fix: GEventType::MOUSE_MOTION events are now only delivered once to each GuiControl, and are in the correct coordinate system
    • Fix: FileSystem::exists now is insensitive to the direction of slashes inside zipfiles
    • Fix: FileSystem::_drives() now accurately gets the string representation of present drives.
    • Fix: Depth write state now works correctly in push2D mode
    • Fix: BinaryOutput::writeString(str, len) for the truncating case
    • Fix: TextOutput::writeString will now never word-wrap inside the string
    • Fix: On Windows, Thread now sets the thread name so that it is visible in the debugger

Backwards Incompatible Changes:

  • Removed GImage and replaced with Image and PixelTransferBuffer classes
  • Moved clipboard functions to OSWindow
  • GEntity was renamed to Entity
  • Completely reworked Camera and Light
  • Renamed data/SuperShader to data/shader
  • Removed zipRead and zipClose (use G3D::readWholeFile or G3D::BinaryInput)
  • All-new interface for ArticulatedModel and completely rewritten interface for performance and convenience
  • All-new streamlined interface for G3D::Surface
  • G3D::Ray::bump -> G3D::Ray::bumpedRay
  • G3D::GApp subclasses must now invoke the super version of any method that they override to ensure that Widgets work correctly.
  • Removed beginMarkShadows, endMarkShadows, markShadows, drawFeatureEdges
  • Removed Surface::edges, Surface::faces, Surface::numBoundaryEdges, Surface::numWeldedBoundaryEdges, Surface::weldedEdges, Surface::weldedFaces, Surface::weldedVertices, Surface::getObjectSpaceFaceNormals, Surface::getWorldSpaceFaceNormals, Surface::getWorldSpaceGeometry, Surface::hasTexCoords, Surface::objectSpaceFaceNormals, Surface::objectSpaceGeometry, Surface::objectSpacePackedTangents
  • G3D::AABox default constructor returns the empty box, which is now distinct from the box at the origin
  • Removed G3D::SkyParameters and G3D::Sky
  • Removed G3D::AnyVal (use G3D::Any now)
  • G3D::SurfaceElement::Impulse::coefficient &#8594; G3D::SurfaceElement::Impulse::magnitude
  • Removed AUX RenderDevice::ReadBuffer options (deprecated from OpenGL)
  • G3D::GuiTextureBox::Settings &#8594; G3D::Texture::Visualization
  • Removed incident power arguments from UniversalBSDF::evaluate
  • G3D::Film::exposure &#8594; G3D::Film::sensitivity
  • Light::attenuation now defaults to (0.0001,0,1); SuperShader ignores attenuation on directional lights
  • SuperShader scales the quadratic attenuation term by 4pi to produce a physically-meaningful radiance value for point lights
  • G3D::Draw::skyBox now uses programmable pipeline and requires a cube map
  • Replaced Lighting::ambientTop and ambientBottom and SuperShader pixel shader with pure environment map-based ambient.
  • G3D::ArticulatedModel::createHeightfield arguments now more closely follow MeshAlg::generateGrid
  • Changed G3D::ArticulatedModel::Preprocess::materialOverride to a UniversalMaterial::Specification; likewise for the materialSubstitution table.
  • Removed OFF file loading from G3D::IFSModel
  • G3D::UniversalMaterial::Settings &#8594; G3D::UniversalMaterial::Specification
  • Separated G3D::GuiControl::captionWidth and G3D::GuiControl::captionHeight from G3D::GuiControl::captionSize
  • Replaced G3D::Light::spotCutoff (in degrees) with G3D::Light::spotHalfAngle (radians)
  • Removed G3D::Light::specular and diffuse; changed point light attenuation to default to quadratic
  • Removed Camera::imagePlaneDepth (use Camera::nearPlaneZ)
  • Removed G3D::BackgroundWidget
  • Removed ToneMap (use Film)
  • G3D::Camera::viewportWidth &#8594; G3D::Camera::nearPlaneViewportWidth
  • G3D::Camera::viewportHeight &#8594; G3D::Camera::nearPlaneViewportHeight
  • Removed G3D::Vector2::unitize, G3D::Vector2::unitize and G3D::Vector3::generateOrthonormalBasis

Changes in 8.01:


8.00


Primary development team: Morgan McGuire, Corey Taylor, Shawn Yarbrough, Trevor O'Brien

Changes in 8.00:

8.00 changes incompatible with G3D 7.xx and earlier:

  • Linux/FreeBSD build now depends on libzip and is not built internally. OSX/Windows version of zip.lib was replaced with libzip. The original implementation was based on minizip.
  • G3D::GuiTheme changed to use .gtm theme files. Specification updated to version 1.0
  • G3D::OSWindow::Settings::fsaaSamples -> G3D::OSWindow::Settings::msaaSamples
  • G3D::Texture::Preprocess::brighten -> G3D::Texture::Preprocess::modulate
  • Surface::renderTransmissives -> G3D::Surface::renderTransmissives
  • G3D::UserInput has joysticks disabled internally to avoid confusion for new users
  • Surface::hasTransparency -> Surface::hasTransmission + Surface::hasPartialCoverage, to support varying partial coverage modes
  • UniversalBSDF::packSpecularExponent now uses a nonlinear scale between 0 and 1025
  • G3D::MD2Model::create scale is now 1/2 the quake scale, so that a typical character is 2 meters tall
  • Removed G3D::Texture::invertY (See G3D::RenderDevice::invertY)
  • G3D::Matrix4::perspectiveProjection flips the y-axis by default (see upDirection argument to get the old behavior)
  • Removed G3D::ToneMap (use G3D::Film instead)
  • G3D::Vector3, G3D::Vector3 and G3D::Vector4 operator float* are gone
  • G3D::Array(int size) constructor is gone
  • Redesigned G3D::MD2Model API to match MD3Model API
  • G3D::Surface::objectSpaceTangents -> G3D::Surface::objectSpacePackedTangents
  • G3D::Ray::origin and G3D::Ray::direction are now methods instead of members
  • G3D::VARArea -> G3D::VertexBuffer, G3D::VAR -> G3D::AttributeArray
  • G3D::Texture::getCameraRotation -> G3D::Texture::getCubeMapRotation
  • G3D::PosedModel -> G3D::Surface, G3D::PosedModel2D -> G3D::Surface2D
  • G3D::RenderDevice::Primitive -> G3D::PrimitiveType (e.g., RenderDevice::TRIANLGES -> PrimitiveType::TRIANGLES)
  • G3D::AssertionHook no longer accepts the ignoreAlways parameter
  • G3D::GImage::width, height, channels are now accessor methods instead of public fields
  • RenderDevice::Buffer -> RenderDevice::DrawBuffer
  • RenderDevice::screenShotPic and Texture::copyFromScreen now always read from the current RenderDevice::readBuffer
  • OSWindow::Settings::sharedContext must now be set to true in order to support sharing of data between multiple OpenGL contexts. Since sharing can seriously degrade performance on multi-GPU machines and few developers need this feature, it defaults to false.
  • Complete rewrite of SuperShader, ArticulatedModel, and UniversalMaterial. New G3D::UniversalBSDF uses Fresnel term, more efficient memory layout, Blinn half-vector, is energy conserving, and supports GPU rasterization, ray tracing, photon mapping
  • Removed ShadowMap::updateDepth that takes directional light projection matrix parameters; use new ShadowMap::computeMatrices to apply those values now.
  • G3D::GuiPane::addDropDownList now takes the list and index arguments in reverse order and they are optional
  • G3D::OSWindow::notifyResize() and G3D::RenderDevice::notifyResize() removed in favor of OS-specific implementation handling size events directly.
  • Changed G3D::RenderDevice::enableClip2D to G3D::RenderDevice::setClip2D. Use G3D::RenderDevice::setClip2D with G3D::Rect2D::inf to disable.
  • G3D::TextInput now treats \r, \n and \r\n as newlines with or without newline tokens. Each increment line number once and reset character number
  • G3D::TextInput now generates tokens for both line and block comments when enabled. This changes the G3D::TextInput::Settings flags.
  • Changed G3D::OSWindow::pollOSEvent to G3D::OSWindow::getOSEvents allowing G3D::OSWindow implementations to return multiple events
  • G3D::RenderDevice::getObjectToWorldMatrix -> G3D::RenderDevice::objectToWorldMatrix
  • G3D::RenderDevice::getCameraToWorldMatrix -> G3D::RenderDevice::cameraToWorldMatrix
  • Removed 6.xx Discovery API, replaced with 7.01 Discovery API
  • G3D::GApp::onLogic -> G3D::GApp::onAI, G3D::Widget::onLogic -> G3D::Widget::onAI
  • Removed unused G3D::BSPMap::getTriangles texCoordIndex argument
  • G3D::Thread::threadMain is now protected; see the new argument to G3D::Thread::start()
  • G3D::ArticulatedModel::Part::TriList::material is now a pointer
  • G3D::Surface bounding boxes are now G3D::AABox instead of G3D::Box
  • Moved G3D::ArticulatedModel::setProfile to G3D::UniversalSurface::setProfile
  • G3D::ArticulatedModel::Part::TriList is now a reference counted object; Part::triListArray -> Part::triList
  • G3D::MeshAlg::computeBounds now takes an AABox instead of a Box
  • G3D::GuiDropDownList now stores its list internally, rather than taking a pointer to a list
  • The applyInvertY argument on G3D::Texture::toImageX now defaults to true because this is less confusing
  • G3D::GApp::onWait only takes one argument now
  • Removed G3D::VertexProgram and G3D::PixelProgram (use G3D::OldShader instead)

Changes in 7.01:

  • 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 UniversalMaterial::parallaxSteps > 1)
  • Added normal mapping to G3D::SuperShader (specify UniversalMaterial::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
  • shared_ptr 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
  • UniversalMaterial::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::Thread::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::Surface::getBoxBounds on an array
  • G3D::Surface::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::UniversalMaterial promoted to its own class (was G3D::SuperShader::UniversalMaterial)
  • G3D::Matrix2
  • G3D::ShaderObject::ArgList::size
  • G3D::pathConcat
  • G3D::WidgetManager::moveWidgetToBack
  • SuperShader / NonShadowed.pix now uses arrays of lights instead of separate variables
  • Reduced cost of release-mode OldShader argument validation
  • G3D::Surface::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::ShaderObject::ArgList::remove
  • Optimized G3D::Matrix::pseudoInverse; now about 2x faster
  • G3D::Light::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::OldShader arguments (in G3D::ShaderObject::ArgList) may now be "optional"
  • G3D::Light::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::Surface::objectSpacePackedTangents
  • 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(shared_ptr<Texture>) 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::Surface::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::OldShader 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: Camera::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

Changes in 7.00:

  • Upgraded to iCompile 0.5.3. Requires users to delete their old ice.txt and ~/.icompile files
  • Key to toggle the user camera is now F2 (was Tab)
  • Support for g++ 4.1 [Corey]
  • Patches for 64-bit compilation [Corey]
  • WinMain is now compiled as C++ code (fixed some "manifest" errors on certain VC8 installations)
  • G3D::ShadowMap
  • Cleaned up and documented G3D::Camera project/unproject API [Jeff Marsceill]
  • Made G3D::MD2Model::Pose easier to use
  • G3D::Matrix
  • Added G3D::Texture methods for reading back color and depth textures
  • G3D::RenderDevice::getFixedFunctionLighting
  • G3D::debugPrintf -> G3D::consolePrintf
  • G3D::GApp::debugPrintf -> G3D::screenPrintf
  • Reduced ArticulatedModel and MD2Model push/popState calls
  • G3D::OldShader now defines platform and graphics vendor macros
  • User camera control requires right mouse click to move
  • G3D::AnyVal::fromFile, G3D::AnyVal::load, G3D::AnyVal::save
  • G3D::AnyVal now uses copy-on-mutate for fast Array/Table copies
  • G3D::AnyVal no longer separates table entries with ";"
  • G3D::AnyVal now provides casts to basic data types
  • G3D::AnyVal G3D::Rect2D and G3D::AABox types
  • G3D::NetListener, G3D::ReliableConduit, and G3D::LightweightConduit can now be created without an explicit NetworkDevice pointer
  • GApp::onGraphics now takes posed model arguments
  • G3D::RenderDevice::beginFrame no longer executes a pushState– state will carry over between frames
  • G3D::GUniqueID
  • GApp::onPose
  • All classes that read from files can now read data inside zipfiles.
  • Changed G3D::hashCode(T) to ::GHashCode<T>(T) [Corey]
  • Removed "G3D::" from the printed portion of the documentation index to make it easier to read.
  • OSWindow::fireEvent for inserting user events into the queue
  • G3D::logPrintf
  • System::findDataFile
  • On OS X, G3D::FirstPersonManipulator now treats ctrl-click as right click
  • Increased mouse sensitivity of G3D::FirstPersonManipulator on OS X
  • System::getClipboardText, System::setClipboardText
  • Widget::window() accessor
  • Replaced SDLEvent with G3D::GEvent
  • Increased GFont rendering performance, added GFont::send2DQuads for fast rendering of large amounts of text
  • G3D::GFont now supports fonts with 256 characters (.fnt file format version 2)
  • Upgraded to the OpenGL 2.0 glext/glxext/wglext headers
  • G3D::GuiTheme, G3D::GuiText
  • G3D::UprightFrame, G3D::UprightSpline
  • G3D::Spline
  • G3D::RenderDevice::clip2D
  • G3D::Win32Window now returns events for up to 5 mouse buttons
  • Significantly changed GEvent delivery and Widget mechanisms to incorporate notions of focus–see upgrade.html
  • Motion events (joystick/mouse) can no longer be cancelled by Widget::onEvent
  • Mouse motion events for all platforms
  • G3D::shared_ptr<Surface>::sendGeometry
  • G3D::RenderDevice::pushState(shared_ptr<Framebuffer>)
  • G3D::Texture::Preprocess::computeNormalMap
  • direct.h is now included by fileutils.h on Win32 to ensure that chdir, mkdir, etc. are available
  • Changed distribution directories to place include, lib, and bin under a directory named after the platform and all other files one directory up.
  • G3D::Camera::unproject
  • Made G3D::Ray non-virtual for efficiency
  • RenderDevice::alphaWrite now defaults to true
  • Changed G3D install directory from g3d-7_00 to g3d-7.00
  • On a GL 2.0 or greater driver, G3D::GLCaps now assumes the presence of all GL2 extensions even if they are not explicitly listed by the card [Corey Taylor]
  • debugPrintf now flushes stderr on Unix systems
  • G3D::Lighting::fromSky
  • G3D::Texture::newGLTexture2D [Corey Taylor]
  • Added 10-bit cinema texture formats [Corey Taylor]
  • Added G3D::ArticulatedModel to the core (includes 3DS loading)
  • Added G3D::SuperShader to the core
  • Merged GApp and GApplet into GApp to make the common case easier to implement
  • Removed GApp::debugMode options, removed "debug" prefix from most fields.
  • G3D::zipfileExists for testing if a filename path contains a .zip to be opened [Eric]
  • G3D::isZipfile tests the header of a file to see if it is a .zip [Eric]
  • G3D::zipRead and G3D::zipClose to open and close .zip files [Eric]
  • G3D::fileExists supports filename paths that contain .zip [Eric]
  • G3D::fileLength supports filename paths that contain .zip [Eric]
  • G3D::getFiles and G3D::getDirs support filename paths that contain .zip [Eric]
  • Texture::isSupportedImage - static method, returns true if a filename exists and is compatible with Texture [Eric]
  • Viewer (tool) - Allows drag and drop viewing of many supported file formats [Eric]
  • GFXMeter (tool) - Updated for 7.00 compatibility: GApplet structure removed [Eric]
  • OSWindow::Settings has an allowMaximize field. Win32Window will have an activated 'Maximize' button if true [Eric]
  • GApp2::debugCamera -> GApp2::m_debugCamera
  • GApp2::debugController -> GApp2::m_debugController
  • Made GApp2::debugText private
  • Added g3d_WorldLight0 to the G3D shader extensions
  • Added OldShader support for GL_FLOAT_MAT3_ARB uniforms
  • Tab (command completion) no longer auto-repeats in GConsole
  • GConsole now limits the key repeat rate to the framerate
  • Removed GApp::Settings::useNetwork because it was no longer needed–Win32 does not trigger firewall checks anymore
  • Optimized AABSPTree balance and queries; now about 20% faster than 6.10, but requires 30 bytes more memory per member
  • G3D::Array::pop now shrinks the underlying array by default (Array::popRemove does not shrink the array and is faster)
  • Fast O(n), non-destructive G3D::Array::partition and G3D::Array::medianPartition
  • Increased ReliableConduit read attempts before timeout from 10 to 100
  • G3D::GImage::pixel1 now returns G3D::Color1uint8*
  • G3D::Color1, G3D::Color1uint8
  • G3D::Image1, G3D::Image1uint8
  • G3D::Image3, G3D::Image3uint8
  • G3D::Image4, G3D::Image4uint8
  • BinaryInput::flipEndian32, BinaryInput::flipEndian16
  • Texture::createEmpty now intializes invertY = true, which is usually desirable for Framebuffer rendering.
  • G3D::Map2D
  • G3D::Vector4int8
  • G3D::PointShape
  • G3D::GImage::RGBAtoRGB
  • Added GLEW compatibility [nico]
  • Added data-files directory to the locations searched for G3D demo data
  • On Win32, assertions now print ot the Output window as well as the dialog box.
  • On Win32, $TEMP is now used for the logfile location instead of c:\tmp
  • G3D::GKey replaces old SDL key enumeration
  • Decreased memory requirements and increased balance speed of G3D::AABSPTree by adding a level of indirection between tree nodes and the data stored in them.
  • Added OSWindow::Settings::caption
  • Win32 programs must call the macro G3D_START_AT_MAIN(); at top-level if they do not define WinMain themselves.
  • Win32 switched from MBCS to UNICODE for the binaries (G3D sources compile under either, but UNICODE is the VC8 default)
  • Replaced SDL event types with G3D event types
  • Added support for GL_ARB_point_sprite
  • Win32 programs must call the macro G3D_START_AT_MAIN(); at top-level if they do not define WinMain themselves.
  • Win32 switched from MBCS to UNICODE for the binaries (G3D sources compile under either)
  • Changed G3D::GApp::main to return an int
  • Added header support for GL_EXT_geometry_shader4 ("Geometry shaders")
  • Changed IFSModel::create to IFSModel::fromFile
  • G3D::BSPMap for loading Quake3 .bsp files
  • G3D::TextInput::Settings::caseSensitive
  • G3D::TextInput::readBoolean, G3D::TextInput::Settings::trueSymbols, G3D::TextInput::Settings::falseSymbols, G3D::TextOutput::Settings::trueSymbol, G3D::TextOutput::Settings::falseSymbol, G3D::TextOutput::writeBoolean, G3D::Token::BOOLEAN_TYPE
  • G3D::TextInput::Settings::msvcFloatSpecials now defaults to true
  • Made the input to G3D::tessellateComplexPolygon a constant array reference
  • Removed SDL from Win32 build
  • Increased maximum ReliableConduit message size to 60 MB
  • Removed error macro
  • G3D::GConsole
  • Rect2D::lerp
  • Added GL_EXT_packed_depth_stencil
  • Added G3D::ImageFormat::DEPTH24_STENCIL8 packed stencil mode
  • getOpenGLState now includes GL_LIGHT_MODEL_TWO_SIDE value
  • Made ThirdPersonManipulator constructor protected (use ThirdPersonManipulator::create now)
  • G3D::ToneMap
  • Changed Renderbuffer::createEmpty argument order to match Texture::createEmpty
  • G3D::IFSModel can now remove degenerate faces on load
  • G3D::MD2Model::textureFromFile
  • Replaced AABSPTree::beginRayIntersection with simpler AABSPTree::intersectRay interface.
  • G3D::MD2Model now uses floating point texture coordinates, which makes it easier to write pixel shaders for MD2Models
  • G3D::GImage::computeNormalMap now accepts a scale factor indicating how steep the input bump map is
  • Added G3D::OldShader support for the GLSL #version directive
  • Optimized G3D::GImage::computeNormalMap to use primarily integer math
  • G3D::AABox::contains(AABox)
  • Added large file (>2GB) support to BinaryInput [Peter]
  • Renamed graphics3d.h to G3D-base/G3D.h
  • Renamed GLG3D.h to G3D-app/GLG3D.h
  • Renamed G3DAll.h to G3D/G3D.h
  • G3D::Quat::unitize now normalizes in place
  • Added G3D::Quat::operator*=
  • Removed G3D::FirstPersonManipulator's constructor–use the static G3D::FirstPersonManipulator::create method now.
  • Changed BSPMap leaf bounds from Box to AABox–50% improvement in frustum culling speed
  • Optimized BSPMap rendering performance
  • Removed all deprecated APIs
  • All accessors of the form "getXXX" that take no arguments are now named just "xxx"
  • G3D::Sky::create is now named G3D::Sky::fromFile and no longer accepts a G3D::RenderDevice. G3D::Sky::render now requires a RenderDevice.
  • G3D::GFont::fromFile no longer accepts a G3D::RenderDevice and G3D::GFont::draw2D now requires a RenderDevice.
  • Removed an assertion in BinaryInput requiring that compressed buffers be copied on construction [Nick Bray]
  • Removed CoordinateFrame::zLookDirection (use -1)
  • Removed Capsule::endPoint (use point)
  • Removed CoordinateFrame::getStrafeVector (use rightVector)
  • Removed static constants (use equivalent lower-case methods)
  • Removed Cylinder::getPoint1 (use point)
  • Fix: BSPMap::getStartingPosition now works correctly on all maps [Jeff]
  • Fix: Workaround for ATI drivers that do not support zero-area scissor region
  • Fix: GL_EXT_texture_3D -> GL_EXT_texture3D
  • Fix: ARB_texture_cube_map and EXT_texture_cube_map are now aliases on all cards
  • Fix: EXT_texture_edge_clamp and SGIS_texture_edge_clamp are now aliases on all cards
  • Fix: G3D::Sky now turns off lighting
  • Fix: Win32Window now returns mousebutton and motion events according to the GEvent spec
  • Fix: Win32Window now operates correctly in fullscreen mode
  • Fix: Fixed TGA decode to load from the middle of a binaryinput
  • Fix: Added texture coordinates to posed MD2Models
  • Fix: prompt/debugAssert now correctly responds to button presses on OS X
  • Fix: GConsole now filename completes after the first word
  • Fix: RenderDevice::getDepthBufferValue now checks for the presence of a depth buffer.
  • Fix: G3D::AABSPTree now correctly handles members with infinite bounds on ray intersection tests
  • Fix: Removed use of tmpfile on Unix
  • Fix: Java ReliableConduit now properly waits if the buffer is full when sending
  • Fix: [ 1607693 ] Triangles/Second display is now correct (rates were too low in 6.10)
  • Fix: NetworkDevice now does not perform a test broadcast during initialization
  • Fix: G3D::LightweightConduit::ok is now false if any error occurs during initialization
  • Fix: BSPMAP for cards without glMultiDrawElementsEXT
  • Fix: [ 1584335 ] ReliableConduit incorrectly assumes it's ok
  • Fix: RenderDevide::push2D no longer resets the framebuffer.
  • Fix: Framebuffer logic for counting number of attachments was broken
  • Fix: [ 1581986 ] Matrix3::fromAxisAngle now normalizes the input vector
  • Fix: [1490643] Linux/FreeBSD/OS X binaries are now compiled with -fno-strict-aliasing, which fixes some memory corruption problems that occurred with full optimizations.
  • Fix: Fixed all warnings on gcc-4.1 and VC8.
  • Fix: Matrix and CoordinateFrame serializers inside G3D::AnyVal dropped data
  • Fix: [ 1535759 ] valgrind finds initialization/deletion errors in TextOutput, Matrix [Chris Demetriou]
  • Fix: Patched MD2Model to automatically reduce animation times to less than 100000; large time were overflowing double->int conversion and causing animations to appear scrambled.
  • Fix: [ 1535292 ] global Table hashCode overloads broken [Chris Demetriou]
  • Fix: [ 1535736 ] Fixed System.cpp memory allocator to compile on 64-bit machines correctly [Chris Demetriou]

Changes in 6.10:


Changes in 6.09:

  • glDepthBoundsEXT
  • G3D::Quat::sameRotation
  • Full loading of the GL_ATI_separate_stencil extension, support within RenderDevice
  • platform.h undefines WIN32_LEAN_AND_MEAN, NOMINMAX after it has defined them
  • G3D::Texture::Settings::maxMipMap
  • Renamed Texture::Parameters to Texture::Settings (backwards compatible typedef added)
  • Optimized IFSModel rendering by increasing internal VAR cache size and reducing the number of state changes. Can now render more than 1000 IFSModels at 30 fps on GeForce 7800.
  • G3D::System::mallocStatus
  • Range checking on Vector2int16::operator[]
  • GImage::BAYER_G8R8_B8G8_to_R8G8B8_MHC, GImage::BAYER_B8G8_G8R8_to_R8G8B8_MHC
  • IFSModel and MD2Model now allocated their posed models using System::malloc
  • Increased the memory maintained by G3D::System for buffer pools up to a total of 13 MB: 8 MB tiny (preallocated), 1 MB small (on demand), 4 MB medium (on demand). This was observed to dramatically increase performance (15x) in real programs that were performance limited by memory allocation time.
  • NetworkDevice now uses Winsock2.0 on Windows (controlled by the G3D_WINSOCK_MAJOR_VERSION/G3D_WINSOCK_MINOR_VERSION settings in NetAddress.h)
  • G3D::Manipulator
  • G3D::GApplet now runs installed G3D::GModules (except for graphics, which is left to the progrmamer)
  • G3D::GApp::addWidget, G3D::GApplet::addWidget, G3D::GApp::removeWidget, G3D::GApplet::removeWidget
  • G3D::Widget, G3D::WidgetManager
  • G3D::System::getEnv()
  • G3D::Surface2D
  • G3D::DXCaps
  • Increased precision of several Quat operations
  • G3D::Quat::fuzzyEq
  • G3D::Quat::operator-
  • G3D::LineSegment::length, G3D::LineSegment::point
  • Increased fuzzyEpsilon by a factor of 10 to take into account the new float32 focus of the APIs
  • G3D::RegistryUtil
  • G3D::LineSegment2D
  • G3D::ConvexPolygon2D
  • G3D::AxesShape
  • contrib/shaders/showDepth
  • G3D::Crypto with MD5 and CRC32 hashes
  • TextureManager::findTexture, TextureManager::cacheTexture [Erik]
  • Win32Window::_directInput created on-demand [Erik]
  • weak_ptr has more comparison operators [Erik]
  • GImage::resolveFormat utility function [Erik]
  • GLCaps supports MESA
  • G3D::Win32Window and G3D::SDLWindow now release input capture and make the mouse visible on destruction
  • G3D::OSWindow::setInputCaptureCount, G3D::OSWindow::inputCaptureCount, G3D::OSWindow::incInputCaptureCount, G3D::OSWindow::decInputCaptureCount
  • GImage::makeCheckerboard
  • G3D::Vector3::one()
  • G3D::OldShader now supports g3d_size(sampler2D) and g3d_invSize(sampler2D) extensions in GLSL shaders.
  • Renamed GAppSettings to G3D::GApp::Settings (old name is supported but deprecated)
  • Renamed GWindowSettings to G3D::OSWindow::Settings (old name is supported but deprecated)
  • Renamed TextInput::Options to G3D::TextInput::Options (old name is supported but deprecated)
  • G3D::FPManualController::setAutoActive for World of Warcraft style controller
  • G3D::isSlash, G3D::isQuote
  • G3D::GApplet::onEvent can now consume (i.e., prevent G3D::GApp from seeing) the event
  • G3D::CoordinateFrame::fuzzyIsIdentity, G3D::CoordinateFrame::isIdentity, G3D::CoordinateFrame::fuzzyEq
  • Matrix3::isOrthonormal
  • [1421201] Removed excess gl (NVIDIA) headers
  • Win32Window destructor now releases the mouse if it was captured and the current GL context is that window and the window was not created from an existing HDC/HWND
  • Fix: com.graphics3d.g3d.ReliableConduit now correctly selects on the waiting socket
  • Fix: [ 1166057 ] AABSPTree::beginBoxIntersection
  • Fix: GLCaps::supports(ImageFormat) now returns correct results on all cards
  • Fix: Shadow map rendering of default Surfaces now enables lighting
  • Fix: G3D::UserInput now restores the mouse position after pureDeltaMouse is turned off
  • Fix: G3D::Win32Window now clips precisely to the client area during an input grab.
  • Fix: [ 1383042 ] free static variables on shutdown
  • Fix: [1449115 ] Texture loading for odd-byte rows
  • Fix: G3D::Win32Window now produces correct character and scan codes for key events
  • Fix: G3D::GApplet::onEvent calls GApplet::processEvent by default
  • Fix: [ 1444320 ] TextInput parsed ".1" as "1" instead of "0.1"
  • Fix: G3D::Shape::type is now const
  • Fix: 0 –> 0.0f FrameBuffer.h [Erik]
  • Fix: Fixed Texture read-back dimensions for cube-map
  • Fix: Missing #include in SkyParameters.h [Erik]
  • Fix: Quad triangle counts are now accurate (were off by factor of 4 in 6.08)
  • Fix: contrib/ArticulatedModel now correctly masks all components using the diffuse alpha in fixed function mode
  • Fix: G3D::CoordinateFrame::getHeading was flipped front-to-back
  • Fix: [ 1404487 ] Missing Alt key up/down events on Win32
  • Fix: [ 1484924 ] collisionTimeForMovingPointFixedBox normals

Changes in 6.08:

  • Moved Win32 linker statements out of platform.h for IncrediBuild compatibility.
  • G3D::Texture and G3D::Sky now accept a rescaling factor
  • Added GFont::fromMemory() [Corey]
  • Added optional argument to Quat::slerp() for slerp/lerp angle threshold. [Corey]
  • Across-the-board performance optimizations. Most apps should render 10% faster. Includes removal of Milestones when using VBO VAR [Nick Bray], GFont::draw2D and Draw::rect2D stripped down to raw OpenGL, consistent internal use of float, increased RenderDevice state change optimization.
  • Minimized header interdependencies (GLG3D headers no longer include all of G3D)
  • Added Thread and GMutex classes. [Corey]
  • Added ImageFormat::fromCode(). [Corey]
  • Added Plane::distance() and Plane::closestPoint() helper methods. [Corey]
  • G3D::ImageFormat::code, G3D::ImageFormat::colorSpace
  • incompatible change G3D::MeshAlg::computeTangentSpace basis now computes a right-handed coordinate frame, where the binormal direction is the negative of the direction it faced in G3D 6.07.
  • Exposed G3D::RenderDevice::beforePrimitive and G3D::RenderDevice::afterPrimitive to end-user code for integrating raw OpenGL calls.
  • G3D::Framebuffer and G3D::Renderbuffer to implement the Framebuffer_object extension [Dan Hilferty]
  • G3D::OldShader::hasArgument
  • G3D::Texture::getImage
  • Changed SECOND, MINUTE, DAY, HOUR, SUNRISE, SUNSET, MIDNIGHT, METER, KILOMETER to enum values instead of #defines
  • G3D::Texture::Parameters; deprecated most Texture constructors in favor of ones that use this class
  • Moved most image manipulation routines into GImage.
  • G3D::GImage now allocates the underlying buffer in multiples of bytes to allow slight overflor for MMX algorithms
  • G3D::GImage::BAYER_R8G8_G8R8_to_R8G8B8_MHC
  • G3D::GImage::R8G8B8_to_Y8U8V8
  • G3D::GImage::Y8U8V8_to_R8G8B8
  • G3D::GImage now supports PPM binary
  • Various Rect2D helpers [Nick Bray]
  • ConvexPolyhedron improved clipping [Nick Bray]
  • G3D::System::build
  • G3D::System::calloc
  • G3D::GImage::convertToRGBA
  • contrib/AVI can read most AVI files on Windows.
  • contrib/wxGWindow now uses wxWidgets 2.6.2
  • G3D_DEBUG now controls whether debug code is enabled; it defaults to the value of _DEBUG
  • zlib upgraded to 1.2.3 [Corey]
  • zlib now statically linked on Win32 (no longer requires zlib1.dll at runtime) [Corey]
  • G3D::MeshShape
  • Changed std::string hashCode to use CRC32 to reduce collisions
  • G3D::crc32
  • Added occlusion query #defines [Nick Bray]
  • G3D::Win32Window now shares textures and vertex buffers across all GL contexts
  • G3D::Win32Window now enforces single-threading among GL contexts
  • G3D::GLCaps::slowVBO
  • G3D::VARArea now uses main memory vertex buffers on cards with slow VBO implementations.
  • G3D::Matrix3::toString [Peter]
  • G3D::Matrix4::toString [Peter]
  • G3D::Color3::fromHSV [Peter]
  • G3D::Color3::toHSV [Peter]
  • G3D::Color3::jetColorMap [Peter]
  • Optimized G3D::iRound (now faster than casting!)
  • G3D::MD2Model::create now accepts a scale factor
  • G3D_DEPRECATED macro
  • G3D_CHECK_PRINTF_ARGS, G3D_CHECK_VPRINTF_ARGS macros to allow checking of printf argument strings under gcc at compile time with -Wformat.
  • G3D::TextInput::filename
  • G3D::TextInput::Options::msvcFloatSpecials
  • G3D::TextInput::Options::startingLineNumberOffset
  • G3D::TextInput::readSymbolToken [cgd]
  • G3D::TextInput::readStringToken [cgd]
  • Threadsafe G3D::shared_ptr
  • G3D::AtomicInt32
  • G3D::Thread [Corey]
  • G3D::Array::popDiscard
  • Optimized multi-argument Array::append
  • G3D::GFont 2x faster than in G3D 6.07
  • G3D::RenderDevice::pushState 2x faster than in G3D 6.07
  • G3D::RenderDevice::pushState no longer stores GL texgen and fog information
  • G3D::Draw::fastRect2D
  • G3D::System::outOfMemoryCallback
  • G3D::Queue::fastClear [Chris Demetriou]
  • G3D::Rect2D::x0y1 and x1y0
  • G3D::GLCaps bug tests now run in a separate GL context [Erik Cassel]
  • G3D::GApplet tracks real and simulation time.
  • contrib/Q3Map updated to correctly render instanced objects [Alex Rice]
  • G3D::OSWindow subclasses now required to invoke OSWindow::loadExtensions
  • G3D::Quat::log for non-unit quats and for real-only quats.
  • G3D::GApplet::doUserInput
  • G3D::GApp prints time for each component
  • G3D::Stopwatch
  • G3D::OSWindow::renderDevice()
  • G3D::OSWindow::current()
  • G3D::GLCaps::hasBug_redBlueMipmapSwap and workaround for G3D::Texture on Radeon 7500
  • Fix: CollisionDetection::penetrationDepthForFixedSphereFixedPlane() contact point and normal values. [Corey]
  • Fix: Quat::slerp has invalid shortest path [Corey]
  • Fix: G3D::drawFeatureEdges now uses correctly normalized face edges (and offers a crease angle)
  • Fix: G3D::SDLWindow now releases the mouse on Linux during an assertion.
  • Fix: All keys are reset to up when Win32Window loses focus. [Corey]
  • Fix: gaussRandom is unit gaussian [Corey]
  • Fix: [ 1418276 ] 6.08: Unsupported format for depth texture
  • Fix: Ignoring extra/unused set OldShader arguments. [Corey]
  • Fix: [ 1229205 ] uniform texture array (Could not set indexed array uniforms). [Corey]
  • Fix: incompatible change BinaryInput/BinaryOutput copy constructors and assignments were accessible. [Corey]
  • Fix: RenderDevice::screenshotPic would corrupt GImage's heap. [Corey]
  • Fix: Alt-Tab window switching caused an invalid Alt key state. [Corey]
  • Fix: Incorrect window size event in Win32Window sent to OpenGL. [Corey]
  • Fix: [ 1227915 ] Textures don't bind on ATI under GLSL.
  • Fix: [ 1358477 ] ray-plane intersection bug [Dan Keefe]
  • Fix: [ 1370665 ] hash_map moved to stdext in VC8 (2005)
  • Fix: ToneMap extended to use DIM_2D instead of DIM_2D_RECT
  • Fix: Texture::copyFromScreen now works with DIM_2D textures
  • Fix: Wrapped debugAssertM in do {} while (0) to ensure correct compilation in single-line statements [ERik Cassel]
  • Fix: G3D::Draw::cylinder now renders the bottom correctly
  • Fix: Array::front now compiles under gcc
  • Fix: G3D::Ray::distance used to measure against the origin [David]
  • Fix: [ 1293151 ] ArticulatedModel clipping on Radeon – disabled auto-mipmap generation on mobile radeon 9xxx
  • Fix: G3D::TextInput now parses ^=, character 255 correctly [cgd]
  • Fix: G3D::TextInput now reports line numbers correctly with raw newlines [cgd]
  • Fix: .ICO files with transparency loaded incorrectly [Corey]
  • Fix: G3D::Draw::rect2DBorder inner border was 1 pixel too thick.
  • Fix: [ 1326173 ] Win32Window::init should call makeCurrent.[Erik Cassel]
  • Fix: [ 1326423 ] G3D::Queue::_copy broken [Chris Demetriou]
  • Fix: [ 1313293 ] 6.08: TextInput gets symbol extendedType() wrong [Chris Demetriou]
  • Fix: IFSModel::save, for PLY2 forgot newlines [Peter]
  • Fix: Quat(Matrix3) now computes trace correctly (gave negative quats in some cases)
  • Fix: Setting RenderDevice::polygonOffset now always produces a depth shift, even for faces perpendicular to the view axis.
  • Fix: GImage now auto-resolves formats for files with 1 character base names
  • Fix: weak_ptr cycle bug
  • Fix: Corrected lag encountered when using some ReliableConduit constructors [Dan Keefe]

Changes in 6.07:


Changes in 6.06:

  • G3D::Lighting::emissiveScale
  • G3D::RenderDevice::drawBuffer
  • G3D::RenderDevice::debugNumMinorStateChanges, debugNumMinorOpenGLStateChanges, debugNumMajorStateChanges, debugNumMajorOpenGLStateChanges.
  • In stereo mode, Texture::copyFromScreen automatically chooses the left/right buffer to read based on the current glDrawBuffer
  • contrib/ArticulatedModel/ToneMap
  • Lazy state changes for shaders
  • 50% performance improvement for G3D::BinaryInput, G3D::BinaryOutput when machine endian matches file endian
  • Textures load with default of maxAnisotroy = 2.0
  • maxAnisotropy argument to G3D::Texture constructors.
  • GLCaps now loads GL_ATI_fragment_shader extension
  • contrib/ArticulatedModel now supports rigid body hierarchies
  • Added TEX_SUBTRACT, TEX_ADD_SIGNED, TEX_DOT3, TEX_DOT3_RGBA modes for G3D::RenderDevice::setTextureCombineMode
  • G3D::RenderDevice now cleans up all static G3D::VARArea s when it shuts down
  • FIX: [ 1208157 ] GLSL slow on ATI
  • FIX: Off-by-one on viewport scale for 2D rendering
  • FIX: MeshAlg::computeTangentSpaceBasis now works correctly
  • FIX: 6.05 enabled all fixed function lights by default. This caused major performance problems on some cards.
  • FIX: Extended cube map workaround to all Radeon Mobility cards
  • FIX: Added check for glBlendEq before calling in RenderDevice
  • FIX: Added a test for GL_EXT_texture_env_add in RenderDevice
  • FIX: [ 1191817 ] unsigned warnings in BinaryInput

Changes in 6.05:

  • G3D::BAYER_G8B8_R8G8_to_R8G8B8_MHC
  • G3D::Quarter_R8G8B8_to_BAYER_G8B8_R8G8
  • G3D::BAYER_G8B8_R8G8_to_Quarter_R8G8B8
  • contrib/Matrix
  • contrib/Java
  • Texture::alphaOnlyVersion
  • Draw::sphere speed improved over 25% with single quad strip (improves Draw::capsule) [Corey]
  • Allow 1-channel GImage saving - BMP (expanded to RGB), PNG [Corey]
  • Allow 1-channel GImage loading - PNG [Corey]
  • Added shader and framebuffer extensions to glext.h
  • All files used during current execution are available via G3D::getFiles() [Corey]
  • Implemented OSX version of glGetCurrentContext with CGL. [Corey + Derek]
  • ReferenceCountedObject is-in-heap checks were removed to allow better multiple and virtual inheritance for reference counted objects. shared_ptr still appropriately checks does an is-in-heap check on assignment. [Corey]
  • Added Dev C++ compatibility
  • glGetAttribLocationARB
  • Changed Light == operator to not use memcpy (was causing issues due to byte padding on some compilers)
  • Made CoordinateFrame destructor non-virtual (eliminates vtable)
  • Added new FAQ documentation
  • Added support to G3D::BinaryInput and G3D::BinaryOutput reading and writing huge (larger than available memory) files. Files are still restricted to about 2 GB total, and compressed files must fit entirely in memory.
  • Tweaked allocation strategy for small G3D::Array
  • G3D::Texture::rect2DBounds, G3D::Texture::vector2Bounds
  • G3D::Vector4 * G3D::Vector4, Vector4 / Vector4
  • G3D::Array::operator=(std::vector)
  • G3D::Sky::getEnvironmentMap now returns the top texture on machines that don't support cube maps.
  • glDisableAllTextures()
  • G3D::setFailureHook
  • G3D::OldShader::fromStrings now accepts optional names for the vertex and pixel shader
  • G3D::OldShader no longer requires values for declared but unused uniform variables
  • G3D::RenderDevice now stores texture matrix at 32-bit precision (for faster push/popState)
  • G3D::RenderDevice::setTextureLODBias
  • G3D::OldShader now supports shadow map arguments
  • G3D::OldShader::ArgList checks to see if Texture arguments are null
  • G3D::RenderDevice::setAlphaWrite now defaults to true if the OSWindow has an alpha channel.
  • G3D::RenderDevice::screenshotPic now supports alpha
  • contrib/VideoSerializer
  • G3D::BinaryOutput::writeBits, G3d::BinaryInput::readBits
  • G3D::Sky can now be initialized with a NULL renderDevice, provided a non-null one is used with the G3D::Sky::render method.
  • G3D::pi(), G3D::halfPi(), G3D::twoPi() added to replace defines [Corey]
  • contrib/Q3Map
  • Increased G3D::Draw::sphere performance using vertex arrays.
  • G3D::Array::fastClear
  • G3D::AABSPTree::insert(Array<T>)
  • G3D::Texture::sizeOfAllTexturesInMemory
  • G3D::VARArea::sizeOfAllVertexBuffersInMemory
  • G3D::RenderDevice stores cameraToWorldMatrixInverse for faster coordinate system changes.
  • inlined G3D::Matrix3::operator= for performance
  • Created installer for Windows install [Corey]
  • Reorganized the documentation topic index based on abstraction level, added hyperlinks to demo/contrib code
  • G3D::ReliableConduit and G3D::LightweightConduit now send and receive objects directly; no need to make a G3D::NetMessage. G3D::NetMessage and associated methods are now deprecated.
  • Win32 GUI G3D::prompt now auto-expands \n to \r\n in prompt string [Corey]
  • G3D::Draw::frustum
  • Increased timeout and attempts for G3D::ReliableConduit to handle huge (1 MB) packets
  • G3D::BinaryOutput::reset (memory writing only; not supported for disk)
  • Reduced overhead for G3D::ReliableConduit and G3D::LightWeightConduit send routines
  • Added PPM/PGM/PBM ASCII encode/decode support to G3D::GImage [Corey]
  • New G3D::Surface rendering methods appropriate for shadow casting (with efficient default implementations).
  • G3D::Lighting
  • Changed RenderDevice::TEX_INTERPOLATE to mean GL_DECAL and added TEX_BLEND for GL_BLEND
  • G3D::CoordinateFrame::upVector
  • G3D::Light::diffuse
  • G3D::Rect2D::contains is now const
  • Rewrote G3D::BinaryOutput to not use G3D::Array
  • G3D::MD2Model::textureMatrix
  • G3D::MeshAlg::computeBounds(vertex, index, ...)
  • G3D::RenderDevice::colorWriteEnabled(), depthWriteEnabled, alphaWriteEnabled
  • G3D::RenderDevice::setGlossyCoefficient(Color3)
  • G3D::VAR::maxSize
  • G3D::RenderDevice::enableTwoSidedLighting
  • G3D::Surface::hasTransparency
  • G3D::Surface::sort
  • G3D::RenderDevice::renderMode
  • G3D::MeshAlg::computeNormals(geometry, indexArray);
  • contrib/ArticulatedModel (beta 3DS support)
  • G3D::RenderDevice::swapBuffersAutomatically allows caller to suppress page flip.
  • Added coordinate system documentation.
  • RenderDevice::enableClip2D, RenderDevice::disableClip2D (scissor region)
  • contrib/wxGWindow is stable and full featured– use wxWidgets 2.5.3 with G3D!
  • G3D::fileIsNewer
  • G3D::isDirectory
  • G3D::filenameContainsWildcards
  • G3D::filenamePath
  • G3D::Draw::lineSegment now accepts a scale (allowing arrows and axes to thicken appropriately)
  • G3D::Rect2D::largestCenteredSubRect
  • G3D::Matrix4::serialize, G3D::Matrix4::deserialize
  • glTexImage3DEXT
  • Removed glut.lib and glut.dll from the win32-lib directory.
  • G3D::writeStringToFile, G3D::TextOutput, and G3D::BinaryOutput now flush by default (safe, not fast).
  • Shifted push2D by 0.375 pixels as recommended in the OpenGL guide to bias integer coords towards pixel centers
  • G3D::Draw::rect2DBorder
  • G3D::Rect2D::border
  • G3D::RenderDevice now creates a G3D::Win32Window on Windows instead of a G3D::SDLWindow. SDLWindow is now deprecated on Windows.
  • G3D::VARArea now updates allocation sizes instead of G3D::VAR internally. Added more accessor methods to VARArea to futher remove VAR from VARArea internals. [Corey]
  • VARSystem.cpp moved to VARArea.cpp - filename change only! [Corey]
  • Linux build system updated: Builds only static libraries, Does not require libtool/libtoolize anymore, Does not check for or require libraries that normally linked with the .so files, Automatically builds Test project with iCompile during install. [Corey]
  • G3D::Quat::deserialize, G3D::Quat::serialize
  • G3D::PhysicsFrame::deserialize, G3D::PhysicsFrame::serialize
  • G3D::TextInput::Options::singleQuotedStrings (defaults to true, changing the behavior from previous versions).
  • G3D::Token::extendedType returns information disambiguating characters and strings and floats and ints.
  • Added data/ah64-body and ah64-rotor
  • samples/Network_Demo now uses a helicopter model instead of a plane
  • G3D::VARArea::openGLVertexBufferObject and G3D::VARArea::openGLBasePointer for breaking the VARArea abstraction.
  • GLG3D.h no longer links against SDLMain.lib on Windows if CONSOLE is defined (since console programs have no WinMain).
  • SDL's redefinition of main is cleared when not linking sdlmain.lib [Corey]
  • Moved contrib/Win32Window to G3D::Win32Window
  • G3D::TextInput::readSymbols
  • contrib/Image [Morgan]
  • contrib/wxGWindow [Morgan]
  • Added support for full-screen antialiasing to contrib/Win32Window
  • Added joystick support to contrib/Win32Window [Corey]
  • Win32Window fully-implements OSWindow [Corey]
  • Texture now supports DDS(2D/CubeMap) and PNG files [Corey]
  • Added Win32 pbuffer routines (no G3D wrapper, though– we're waiting for the new ARB API).
  • G3D::Surface::texCoords
  • G3D::IFSModel now loads IFS 1.1 [Peter]
  • G3D::IFSModel now loads and saves PLY2 files (plain text IFS format) [Peter]
  • Automatically switch to glCompressedTexImage2D in G3D::Texture::fromMemory [Corey]
  • Added G3D::Sky::fromCubeMap for preloaded CubeMap shared_ptr<Texture>'s [Corey]
  • Added G3D::Sky::fromFile and deprecated Sky::create [Corey]
  • Demo and Test projects now build with iCompile, which is included [Corey]
  • Fix: TextOutput::writeString now escapes special characters
  • Fix: AABSPTree::serializeStructure
  • Fix: Properly handle gl uniforms on Radeon for OldShader
  • Fix: [ 875467 ] OS X debugBreak (requires default XCode debug menu item 'Break on DebugStr()') [Corey + Derek]
  • Fix: Can make a G3D::Texture::fromGImage with one channel (defaults to L8 format)
  • Fix: [ 1149972 ] 6.05: Make Sky render correctly on low-end cards (no Cube mapping) [Corey]
  • Fix: [ 1032742 ] OS X _DEBUG not defined [Derek]
  • Fix: 16-bit integer reads in BinaryInput that always reversed endianness. (OSX file reading) [Corey + Derek]
  • Fix: Matrix4 operator[] was returning a matrix value cast to a pointer [Corey]
  • Fix: Matrix3 and Matrix4 had missing float* / const float* operators [Corey]
  • Fix: Rect2D::clip broken for types other than Vector2
  • Fix: RenderDevice::configureShadowMap result depends on objectToWorldMatrix
  • Fix: [ 1150650 ] DebugBreak() undefined
  • Fix: [ 1111534 ] Network Demo crashes starting 2nd server on same machine
  • Fix: [ 1102091 ] ReliableConduit::receive times out
  • Fix: Implemented MD2Model::objectSpaceBoundingX methods.
  • Fix: G3D::Triangle::area is now zero for zero-area triangles (was inf)
  • Fix: AABSPTree with extent on MSVC 6 no longer enters infinite loop in std::sort
  • Fix: [ 1105641 ] Does not build with g++ 3.4.x [Corey]
  • Fix: [ 1103619 ] RenderDevice::countPrimitive is wrong (changed to RenderDevice::countTriangles) [Corey]
  • Fix: AABSPTree::BoxIntersectionIterator doesn't compile
  • Fix: [ 1101680 ] copyfile won't overwrite (on Windows now overwrites) [Corey]
  • Fix: [ 1101646 ] Camera::frustum incorrect for non-square viewport
  • Fix: Ultra bright lens flare at sunset [Nicholas Bray]
  • Fix: IP address strings were reversed by NetAddress(std::string)
  • Fix: TextInput now returns end of file token for files without trailing whitespace
  • Fix: [ 1094166 ] 6.05: Release mouse stuck on x-axis [Corey + Morgan]
  • Fix: Recognize buggy ATI Radeon Mobility cube maps and work around
  • Fix: Textures now initialize without setting error bit on cards without GL_ARB_shadow
  • Fix: filenameBaseExt now operates correctly on strings with both \ and / slashes.
  • Fix: [ 1062659 ] BinaryInput::BinaryInput() memory leak
  • Fix: Removed RenderDevice::polygonCount, which was never used.
  • Fix: TextInput::readNumber no longer accepts double preceeding +/- on numbers when Options::signedNumbers is true
  • Fix: [ 1038733 ] OSWindow cannot set icon properly [Corey]
  • Fix: [ 939400 ] Linux mouse set position (Wild camera swinging on startup) [Corey]
  • Fix: [ 1042591 ] Software GL Causes Assertion [Corey]
  • Fix: [ 1036634 ] debugAssert doesn't work on MSVC 7 [Corey]
  • Fix: [ 1049024 ] Fix compile warnings from gcc/Linux build [Corey]
  • Fix: [ 1051272 ] Win32Window doesn't use GWindowSettings properly. [Corey]
  • Fix: Win32Window clips the proper cursor region during input capture. [Corey]
  • Fix: GWindows now center and maximize on the primary monitor for Windows.
  • Fix: [ 1052945 ] TextOutput wordWrap starts on newlines
  • Fix: [ 1050957 ] TextInput readNumber support for capital 'E' numbers.
  • Fix: [ 1049674 ] TextInput failes on X. numbers.
  • Fix: [ 1044028 ] Linux TextOutput Warning
  • Fix: [ 1032750 ] Grayscale JPG errors [Corey]
  • Fix: [ 1036225 ] Encode TGA support strips alpha channel [Corey]
  • Fix: [ 1038631 ] CoordinateFrame::slerp (Quat::slerp has fix) [Corey]
  • Fix: [ 1033686 ] GImage::GImage(filename) dies on certain (BMP) images [Corey]
  • Fix: Texture mapping modes for pre-OpenGL 1.3 cards [Dan & Morgan]

Changes in 6.04:

  • G3D Manual! [ Morgan and Sascha ]
  • Initial MSVC7 build script. MSVC7 is not an officially supported platform however the release contains MSVC7 precompiled binaries and the build script will automatically build on both 6 and 7.
  • Improved performance of G3D::writeStringToFile
  • G3D::shared_ptr assignment now allows compile time subtyping
  • G3D::shared_ptr != operator
  • G3D::shared_ptr::notNull
  • G3D::Light::directional now normalizes the light vector
  • G3D::setAssertionHook
  • [ 1029256 ] G3D::OldShader / G3D::ShaderObject define g3d_ uniforms inside shaders
  • static G3D::IFSModel::save/load for writing/reading IFS files
  • G3D::TextInput allows ' inside quoted strings
  • G3D::TextInput allows \ as a symbol token
  • G3D::TextInput supports an arbitrary comment character (e.g. '#')
  • Precompiled binaries for VisualC++ 7 (.NET 2002/2003)
  • VisualC++ 7 (.NET 2002/2003) supported by build script
  • Build now MOVEs binaries instead of COPYing them on Windows (allows two compilers to output to the same location)
  • G3D Guide overview documentation
  • Changelog and Error FAQ moved under Doxygen
  • Build scripts and documentation now under the 'doc' .dsp on Windows
  • Textures now support a DepthReadMode that can be used to perform hardware shadow map comparisions. RenderDevice::configureShadowMap now requires an appropriately configured texture– in previous releases it would reconfigure the texture for you.
  • G3D::UserInput::keyReleased, G3D::UserInput::ReleasedKeys
  • G3D::Array::randomElement
  • G3D::Array::insert
  • G3D::RenderDevice::getObjectToWorldMatrix and getCameraToWorldMatrix now return const CoordinateFrame&
  • Optimized G3D::Array::randomize
  • G3D::cyclicCatmullRomSpline
  • G3D::wrap
  • contrib/AudioDevice
  • G3D::System::time();
  • More precise System::sleep
  • G3D::IFSModel::pose with no arguments
  • G3D::AABSPTree::serializeStructure, deserializeStructure,
  • serialize(Vector3::Axis, BinaryOutput), deserialize(Vector3::Axis, BinaryInput),
  • "glslc" GLSL compiler in the tools directory for getting compile-time errors from shaders
  • GLCaps::init now takes optional debug log
  • G3D::ShaderObject static constructors take optional 'debug' argument
  • GWindowSettings::visible; Win32Window can now start invisible
  • [ 991147 ] glBlendEquationEXT, RenderDevice::BlendEq, min, max, subtract, reverse subtract alpha blending
  • [ 989785 ] Draw::rect2D
  • GLCaps::numTextureCoords, GLCaps::numTextureUnits, GLCaps::numTextures
  • GLCaps::G3D_MAX_TEXTURE_UNITS
  • Rect2D::corner
  • Camera::getFrustum, Camera::frustum, Camera::Frustum, Camera::Frustum::Face
  • Plane constructor that accepts Vector4s (possibly at infinity)
  • AABox::inf, AABox::zero, AABox::maxFinite
  • AABox::intersects(Sphere)
  • Vector3::minFinite, Vector3::maxFinite
  • Plane::halfSpaceContainsFinite
  • Plane::halfSpaceContains(Vector4)
  • AABSPTree::getIntersectingMembers(Array<Plane>)
  • AABSPTree::getIntersectingMembers(Camera::Frustum) for view-frustum culling
  • AABSPTree::getIntersectingMembers(Sphere)
  • AABox::split
  • Extended AABox::culledBy, Box::culledBy, and Sphere::culledBy with extra information for bounding volume hierarchies
  • G3D::computeNormalMap
  • Matrix3::fuzzyEq(Matrix3)
  • Removed System::sleep(0.02) from GLG3D demo to give more accurate performance measure
  • [ 965824 ] changed link library defaults
  • serialize/deserialize for int, bool, double, float, std::string
  • G3D::TextOutput
  • [ 976924 ] Texture::texelWidth
  • [ 973413 ] ShaderObject::ArgList::set can be called more than once per variable
  • OSWindow::setIcon(std::string filename)
  • Texture::fromMemory that takes a single image (instead of an array of images)
  • [972604] RenderDevice::setTextureMatrix(uint, Matrix4)
  • [972747] Rect2D::center
  • GImage and Texture now load ICO files
  • GL_SAMPLER_1D_ARB, 2D, 3D, CUBE
  • Win32Window mouse events
  • Added normals to AABox collision results
  • Fix: [ 1026534 ]various cast bugs using Ref types. Removed G3D::shared_ptr implicit cast to underlying pointer type This is technically an incompatible change, however we found no occurance in the library or demos using this that was not a bug!
  • Fix: VAR constructor takes VARAreaRef instead of VARArea* Incompatible change
  • Fix: ManualCameraController is prevented from looking precisely along the Y-axis, which would cause a singularity.
  • Fix: Added '?' as a valid symbol Token
  • Fix: [ 946235 ] GFont::align right w/ fixed_spacing
  • Fix: [ 1001033 ] RenderDevice with 0 texture units
  • Fix: GLCaps:: ARB stencil two side -> EXT stencil two side (stencilled shadows were broken)
  • Fix: [ 993449 ] vsnprintf crashes MSVC 7
  • Fix: [ 991320 ] Pointer truncation Warnings
  • Fix: [ 981440 ] AUTO with Texture::fromMemory
  • Fix: Plane::halfSpaceContains now works for infinite and semi-infinite points
  • Fix: [ 979032 ] Quat <-> Matrix3 roundtrip inverts
  • Fix: [ 976743 ] document GLCaps functions
  • Fix: [ 976746 ] #include GLCaps in g3dall
  • Fix: [ 973550 ] sampler2DRect now supported in GLSL shaders (NVIDIA only; ATI drivers are broken)
  • Fix: [ 973490 ] Win32Window width/height off by non-client amount
  • Fix: [ 961827 ] In debug mode, RenderDevice tries to access GL_MAX_TEXTURE_IMAGE_UNITS_ARB and an assertion fails on cards that don't support it.
  • Fix: Texture binding for ShaderObject

Changes in 6.03:

  • Matrix4::approxCoordinateFrame
  • Vector2(const Vector2int16&) [Giulio]
  • RenderDevice::setObjectShader
  • RenderDevice::setShaderObject
  • G3D::RenderDevice supports "..._CURRENT" as an option for most settings
  • inf -> inf(), nan -> nan(), NAN -> NAN() This is an incompatible change– it was needed to fix a bug with the order of initialization of globals
  • GImage::sizeInMemory
  • Defined std::ostream << NetAddress, std::ostream << Vector3
  • 'build doc' copies the contrib directory to the install directory
  • LightweightConduit::PacketSizeException
  • Quat::unitRandom() [Giulio]
  • Color3::wheelRandom
  • GImage::save and encode now const [Thanks Arni Mar Jonsson]
  • LightweightConduit::send that accepts multiple destinations
  • ReliableConduit::multisend
  • Moved IFSBuilder from demos to contrib
  • LightweightConduit and ReliableConduit send/receive can now take references as well as pointers
  • RenderDevice::clear() that takes no arguments
  • RenderDevice::setShader
  • G3D::GApp now catches ShaderGroup::ArgumentError exceptions
  • System::operatingSystem() now includes a version number on Linux
  • SDLWindow no longer initializes the audio system; use SDL_InitSubsytem if you need audio.
  • Extended GLenumToString with GL_SHADER_OBJECTS_ARB types.
  • NVIDIA p-buffer: GLX_SAMPLE_BUFFERS_ARB, GLX_SAMPLES_ARB, GLX_FLOAT_COMPONENTS_NV, glXDestroyGLXPbufferSGIX, glXChooseFBConfigSGIX, glXCreateGLXPbufferSGIX, glXCreateContextWithConfigSGIX, glXQueryGLXPbufferSGIX
  • NVIDIA swap lock: glXJoinSwapGroupNV, glXBindSwapBarrierNV, glXQuerySwapGroupNV, glXQueryMaxSwapGroupsNV, glXQueryFrameCountNV, glXResetFrameCountNV
  • OSWindow::requiresMainLoop, OSWindow::runMainLoop (Beta)
  • OSWindow::pollEvent, SDLWindow::pollEvent
  • G3D::GApp accepts an optional OSWindow on construction
  • G3D::ShaderObject, G3D::ObjectShader (Beta)
  • Deprecated GPUProgram, VertexProgram, and PixelProgram (the OpenGL 1.5 shaders follow a different paradigm than the OpenGL 1.3 ones, so the G3D API must change to match it).
  • Support for GL_ARB_vertex_shader, GL_ARB_fragment_shader, and GL_ARB_shader_objects
  • G3D::drawFeatureEdges
  • const Array<Vector3>& G3D::MD2Model::Surface::objectSpaceFaceNormals();
  • G3D::RenderDevice::sendSequentialIndices
  • Network_Demo
  • contrib/Win32Window
  • contrib/pingtest
  • contrib/GlutWindow [Morgan and Dan Keefe]
  • contrib/ObjModel [Corey Taylor]
  • G3D::GLCaps
  • GAppSettings::logFilename
  • Deprecated RenderDevice::suportsOpenGLExtension, RenderDevice::supportsImageFormat, other supports shortcuts (use GLCaps instead).
  • DiscoveryClient::cleanup
  • Optimized BinaryInput::readUInt32, readUInt16
  • Extended network documentation
  • 'fastlib' build target for G3D library developers
  • glGetVector2, glGetVector3, glGetVector4
  • float * Quat (double * Quat already existed)
  • GApp automatically generates g3d-license.txt at runtime ([RFE#856338] CREDIT.TXT)
  • G3D::license
  • Removed several large files (tag, ppt, exe) from the source zipfile, bringing it down to 3 MB
  • Improved CoordinateFrame:pointToObjectSpace() (RFE#715996) [Giulio]
  • [RFE#945935] Make static constants into functions [Giulio]
  • Fix: LightweightConduit::send verifies that the packet size is smaller than the UDP limit
  • Fix: Multitexture on ATI and Wildcat cards
  • Fix: Incorrect occlusion in G3D_app_Demo (was caused by global constant problem)
  • Fix: [BUG#949377] Checks for stencil extensions [Giulio]
  • Fix: [BUG#922725] Non-multitexture implementation for getTextureState() [Giulio]
  • Fix: Restore ambient light color after RenderDevice::popState
  • Fix: RenderDevice now initializes OpenGL extensions before testing for multitexture [Erik Cassel, Dan Keefe]
  • Fix: Bottom clipping plane of Camera frustum now correct (was slanted incorrectly, making frustum too big)
  • Fix: GFont::draw2D now returns correct y value (used to be too small)
  • Fix: NetworkDevice now returns useful hostname on Linux (used to be "localhost")
  • Fix: The conduit returned from NetworkDevice::createReliableConduit now has ok() == false when connect fails
  • Fix: Tangent space computation of constant u, v now correct (was missing a factor of 2, leading to slight errors) [Max McGuire]
  • Fix: [ 925456 ] select broken on Linux (Networking was broken on Linux)
  • Fix: getDepthBufferValue off by 1 [Andi Fein]

Changes in 6.02:

  • Default constructor for Line.
  • Various patches to make G3D work with the CAVE [Dan Keefe]
  • AABox::set
  • Made OSWindow::setPosition non-const
  • VARArea now tests for the presence of all VBO extensions, on the freak chance that a driver has only partial support (due to a bug)
  • Linux build statically links OpenGL 1.2.1 and loads extensions through OpenGL 1.5 to work around Wildcat Linux driver bug (Windows and Mac statically link OpenGL 1.1 and load extensions through OpenGL 1.5)
  • Triangle stores precomputed edge lengths
  • Ray-triangle with vertex weights
  • Highly optimized ray-triangle intersection test [Tomas Moller & Ben Trumbore]
  • Create a texture from 6 different cube-map filenames
  • Added contrib directory built as part of the 'doc' target
  • contrib/CoreyGWindow: OSWindow implementations for various platforms
  • AABSPSet::beginRayIntersection [Pete Hopkins]
  • AABSPTree::beginBoxIntersection
  • CollisionDetection::intersectionTimeForMovingPointFixedAABox, Ray::intersectionTime(AABox) [Pierre Terdiman and Andrew Woo]
  • Triangle::center
  • Renamed KDTreeSet to AABSPTree, old name is #defined
  • RenderDevice now works on cards without multitexture
  • void glTexCoord(const G3D::Vector4& t); [Dan Keefe]
  • Overloaded float, double, and int * Matrix3
  • Fix: [ 923944 ] Matrix/Quat ambiguity
  • Fix: fuzzyEq(inf, inf) is true
  • Fix: Triangle::randomPoint returns values outside the triangle
  • Fix: [ 913763 ] tokenTypeToString(Token::END)
  • Fix: Compute number of texture coordinates before RenderDevice::setVideoMode [Dan Keefe]
  • Changed the default depth bits to '0' for wider compatibility (Fix: Unable to create OpenGL screen: Couldn't find matching GLX visual)
  • Fix: [912305] Table, Queue, and Set assignment operators do not free old values
  • Fix: Separate specular and Multisample on Tablet PC w/ Trident [Dan Keefe]
  • Fix: Linux debug build now has line numbers
  • Upgraded to SDL 1.2.7 Fix: [ 838030 ] SDL 1.2.6 blocks prompt Fix: FSAA does not work under SDL Fix: Default Win32 refresh rate
  • Draw::vertexVectors
  • New meshes from Brown University: hemisphere.ifs, curvy.ifs, head.ifs, closed-low-poly-teapot.ifs, bump.ifs
  • Light::specular
  • SDLWindow::setWindowDimensions and setWindowPosition now work on Win32
  • GWindowSettings::x, GWindowSettings::y, GWindowSettings::center
  • System::setEnv
  • [ 909999 ] OSWindow Joystick interface
  • double * Quat ([ 909305 ] scalar * {quat, vector, matrix})
  • Increased the precision of several Vector2 and Vector3 methods
  • MeshAlg::computeNormals now returns 0 instead of NaN for degenerate normals
  • Updated main-no-GApp.cpp for 6.02
  • RenderDevice::screenshotPic can copy from the back buffer
  • Improved VAR documentation.
  • If NO_SDL_MAIN is defined, G3D does not attempt to link against sdlmain.lib
  • UserInput::setPureDeltaMouse
  • UserInput::mouseXY, mouseX, mouseY
  • UserInput::mouseDXY
  • Deprecated UserInput keyMapping constructor argument
  • RenderDevice::setDrawBuffer [Dan Keefe]
  • GFont::draw3D [Dan Keefe]
  • GImage::pixel3(x, y) and GImage::pixel4(x, y)
  • debugAssert, debugBreak, debugAssertM, etc. all release input grab when an assertion fails (Win32 and Linux) and restore it when the program continues (Win32). This also fixes the DirectInput laggy cursor that occurs after a break.

Changes in 6.01:

  • Default constructor for G3D::LineSegment
  • Rect2D::clipPoly (Pete & Morgan)
  • Draw::poly2D, Draw::poly2DOutline (Pete & Morgan)
  • Added instructions for rotated text to G3D::GFont::draw2D
  • Fix: iRandom now compiles correctly under gcc.
  • Fix: [ 852076 ] Compute better/faster vertex normals in MeshAlg MeshAlg::computeNormals now weighs adjacent faces by their area
  • Fix: [ 896028 ] Textures broken on Trident TabletPC (Dan Keefe)
  • Fix: [ 860800 ] ManualCameraController cursor jumps
  • Fix: G3D::UserInput no longer offsets the mouse position by 1/2 pixel
  • Fix: Alt-Tab no longer toggles the GApp camera before switching windows
  • Fix: [ 901248 ] Font bounds y-value incorrect
  • Fix: G3D::PhysicsFrame::toCoordinateFrame() was rotated by 90 degrees
  • Fix: [ 895493 ] Radeon 7500 Cube Map
  • Fix: G3D::MeshAlg::computeWeld produces linker errors on Linux
  • G3D::TextInput::peekLineNumber(), G3D::TextInput::peekCharacterNumber()
  • G3D::GAppSettings::dataDir
  • html/gettingstarted.html
  • G3D::MeshAlg::debugCheckConsistency
  • G3D::MD2Model and G3D::IFSModel now weld their adjacency information
  • Renamed/retyped G3D::Surface::adjacentFaces to G3D::Surface::vertices (most programs can be fixed by changing the type from Array< Array<int> > to Array<MeshAlg::Vertex> and adjacentVertexArray[v] to vertexArray[v].faceIndex)
  • Shadow volumes now use the welded adjacency information
  • G3D::Surface now offers both welded and non-welded adjacency information
  • G3D::contains for C-Arrays
  • Generate .tag files in the build
  • G3D::MeshAlg::computeAdjacency does not merge colocated vertices
  • G3D::MeshAlg::computeAdjacency does not remove degenerate faces and edges
  • G3D::MeshAlg::Vertex
  • G3D::Vector3::directionOrZero
  • G3D::GMaterial
  • ManualCameraController renamed to G3D::FPCameraController
  • glGetCurrentContext (beta)
  • G3D::RenderDevice::supportsImageFormat
  • G3D::Vector3::magnitude
  • G3D::Vector3::cross() [returns Matrix3]
  • G3D::Quat changes (API is still in beta)
  • G3D::Quat::norm now returns the 2-norm, not the function Dave Eberly uses.
  • Matrix3 default constructor
  • Switched UserInput to use SDLWindow internally
  • Switched RenderDevice to use SDLWindow internally
  • G3D::Window
  • G3D::SDLWindow
  • Renamed G3D::RenderDeviceSettings to G3D::WindowSettings (with a typedef for the old name)
  • IFSModel now loads models with up to 10 million polygons (like the buddha).
  • Internal G3D::KDTreeSet state now private.

Changes in 6.00:

  • FIX: warning: passing ‘double’ for argument 1 of ‘void G3D::Queue<T>::repackAndRealloc(int)’
  • Optimized static Matrix3::transpose (36 cycle) and Matrix3::mul (52 cycle) variations.
  • Changed some lerp arguments from float to double
  • MeshAlg::computeTangentSpaceBasis
  • Draw::axes now uses scale to compute axis length
  • New ParallaxBump demo
  • Changed several Vector3 return values from float to double
  • Real-world stars, sun, and moon path (Nick Musurca)
  • Now compiles under MSVC++ 7.0 (David Baszucki)
  • Now compiles under g++ OS/X (Ben Landon)
  • Changed the default RenderDeviceSettings::alphaBits to 0 in the hope that it will work with more graphics cards.
  • Matrix3::fromX methods became factory methods
  • G3D::sinc
  • Multi-platform lib directories
  • Vector3::average(), Color3::average(), Vector3::sum(), Color3::sum()
  • Ray::reflect, Ray::refract
  • Physically correct sky model
  • FIX: Older graphics cards can now initialize properly
  • Increased fuzzyEpsilon to 0.000001
  • Color3::max, Color3::min, Color4::max, Color4::min
  • Array::sortSubArray
  • Camera::getClipPlanes now takes a G3D::Array
  • G3D::AABox
  • Box::randomInteriorPoint, Box::randomSurfacePoint
  • Vector3::cosRandom, Vector3::hemiRandom, Vector3::reflectAbout, Vector3::reflectionDirection, Vector3::refractionDirection
  • log(Color3)
  • Upgraded to zlib 1.2.1
  • VAR::valid (Peter)
  • System::getLocalTime, System::getTicks
  • High-performance cycle count and time queries on Linux
  • UserInput::anyKeyPressed
  • G3D::Box now provides axes, center, and extent information (serialization is backwards compatible to 5.xx)
  • TextInput's exceptions now provide file, line, and character numbers as well as preformatted error messages in the style of MSVC++.
  • G3D::Texture::fromGImage
  • G3D::TextInput now parses hex numbers of the form 0x#####
  • G3D::CollisionDetection::penetrationDepthForFixedSphereFixedPlane
  • G3D::CollisionDetection::penetrationDepthForFixedSphereFixedBox
  • G3D::beginMarkShadows, G3D::endMarkShadows, G3D::markShadows
  • GFont::draw2D now returns the string bounds
  • Sphere::surfaceArea, Sphere::volume, Box::surfaceArea, Box::volume
  • Two-sided stencil operations
  • Removed G3D::Real
  • FIX: [ 855947 ] Fonts are broken on Radeon
  • Switched vertex arrays to use the new ARB_vertex_buffer_object extension. Compared to 5.xx rendering speed: NVIDIA/Win32 is the same (fast), ATI and Linux rendering are about 10x faster. The API has changed slightly– most significant, the vertex, normal, color, etc. arrays must all come from the same VARArea now.
  • Disabled the "conditional is constant" level 4 warning on Windows that is triggered by the for-loop scoping fix.
  • G3D::SkyParameters::directionalLight
  • G3D::TextureManager (Peter S. & Morgan)
  • Flipped skybox X-axis to match OpenGL cube map coordinates
  • Texture now uses hardware MIP-map generation
  • Texture::copyFromScreen for cube map faces
  • RenderDevice::configureReflectionMap
  • RenderDevice::configureShadowMap
  • Renamed CFont to GFont
  • Renamed CImage to GImage
  • G3D::Matrix3::getRow
  • Added optional argument drawCelestialBodies to Sky::create.
  • RenderDevice::getTextureMatrix
  • Depth Textures
  • Texture::createEmpty
  • RenderDevice::setViewport has flipped the y-axis since version 5.00
  • shared_ptr::unique
  • Support for textures beyond the number of texture units (which occurs on NVIDIA cards)
  • G3D::Surface
  • G3D::IFSModel
  • G3D::CoordinateFrame::normalToObjectSpace, G3D::CoordinateFrame::normalToWorldSpace
  • Simplified arguments on Texture::copyFromScreen
  • Moved Camera in GLG3D to Camera in G3D
  • Moved setProjectionAndCameraMatrix from Camera to RenderDevice
  • Moved G3D::Rect2D to G3D from GLG3D, changed interface
  • G3D::setRenderMode
  • G3D::RenderDevice::setGlossyCoefficient, G3D::RenderDevice::setShininess
  • G3D::Light
  • Renamed G3D::RenderDevice::configureDirectionalLight, configurePointLight to G3D::RenderDevice::setLight
  • Changed G3D::Rect2D to use doubles
  • G3D::Camera::setPosition()
  • G3D::Camera::lookAt()
  • G3D::ManualCameraController::setPosition()
  • G3D::System::getTick, G3D::System::getLocalTime
  • Fixed [ 839618 ] peak var only updated on reset()
  • G3D::Array::findIndex (thanks to David Baszucki for the suggestion)
  • Removed RenderDevice::setProjectionMatrix3D and RenderDevice::setProjectionMatrix2D
  • RenderDevice::project
  • RenderDevice::push2D() now uses the current viewport instead of full screen by default
  • RenderDevice::getViewport
  • G3D::SimTime
  • Sky::render no longer needs a camera matrix (it gets it from the render device)
  • SkyRef, Sky::create()
  • Removed Sky::getName
  • Removed RenderDevice::setAmbientLightLevel (duplicated RenderDevice::setAmbientLightColor)
  • G3D::GApp, G3D::GApplet, G3D::GAppSettings
  • RenderDevice::getCardDescription
  • GPUProgram interface for setting program constants [Peter, Morgan & Dan]
  • RenderDevice::getModelViewMatrix
  • RenderDevice::getModelViewProjectionMatrix
  • RenderDevice::getProjectionMatrix
  • Documented some more common compiler errors.
  • Moved RenderDevice::debugDraw methods to the Draw class, changed rendering from cylinders to lines for wireframe (for performance)
  • Ray::direction no longer has unit length
  • Line::point, Line::direction
  • LineSegment::endPoint
  • IFSBuilder loads Brown University Sketch Model (sm) format
  • New IFS models: angel, distributor-cap, dragon2, duck, elephant, hippo, hub, mech-part, rotor, sandal, trumpet, venus-torso, woman
  • RenderDevices are now optionally resizable
  • MeshAlg::computeWeld
  • Array::randomize
  • Table now refuses to push the load factor above 19/20 and stops rehashing
  • Table always keeps an odd number of buckets
  • Sphere::randomInteriorPoint, Sphere::randomSurfacePoint
  • LineSegment::randomPoint
  • Hardcoded some common paths into demoFindData
  • Deprecated old RenderDevice::init method.
  • Full screen anti-aliasing (FSAA)
  • G3D::RenderDeviceSettings
  • All 2, 3, and 4 character swizzles for Vector2, Vector3, Vector4 are defined.
  • G3D::rsqrt
  • Most vector methods are also defined as functions now
  • sign(Vector2), sign(Vector3), sign(Vector4)
  • G3D::Matrix4
  • Changed G3D_VER from double to integer
  • G3D::lerp
  • Changed G3D::PI, G3D::HALF_PI, and G3D::TWO_PI to #defines
  • Vector2::clamp, Vector3::clamp, Vector4::clamp
  • Changed order of arguments to all lerp methods to match DirectX/Cg
  • Changed order of arguments to G3D::clamp and G3D::iClamp to match DirectX/Cg
  • G3D::ManualCameraController::ManualCameraController now requires a G3D::UserInput
  • G3D::UserInput::appHasFocus
  • G3D::ManualCameraController now stops tracking the mouse when the app loses focus
  • G3D::ManualCameraController::setActive
  • G3D::ManualCameraController now manages the mouse cursor instead of G3D::RenderDevice
  • G3D::UserInput::getMouseXY, G3D::UserInput::getXY
  • RenderDevice::debugDrawVertexNormals
  • GPUProgram, VertexProgram, and PixelProgram now recognize the output of the Cg compiler and automatically bind constants.
  • RenderDevice now loads glActiveStencilFaceEXT
  • RenderDevice::numTextureCoords
  • Moved changelog to a separate page
  • Reformatted overview to be smaller
  • Added model debugging info to the IFSBuilder display
  • Welded some broken vertices in the teapot.ifs file
  • Renamed Font.* to CFont.*
  • CFont::draw2DString renamed to CFont::draw2D (use a #define to port old code)
  • MeshAlg
  • RenderDevice now enables GL_COLOR_MATERIAL by default
  • msgBox
  • MD2 model gallery in documentation (Kevin)
  • MD2Documentor (Kevin)
  • debugAssertGLOk macro
  • VertexProgram now supports NVIDIA Vertex Program 2.0
  • RenderDevice now loads glGenProgramsNV, glDeleteProgramsNV, glBindProgramNV, glLoadProgramNV, glTrackMatrixNV, glProgramParameter4fvNV, glGetProgramParameterfvNV, glGetProgramParameterdvNV extensions
  • VertexProgram and PixelProgram static factory methods now return reference counted values.
  • Split the reference value from RenderDevice::setStencilTest into setStencilConstant
  • RenderDevice::STENCIL_INVERT, RenderDevice::STENCIL_REPLACE, RenderDevice::STENCIL_ZERO
  • Added brighten argument to Texture::fromFile
  • Increased CImage JPEG save quality
  • RenderDevice::screenshot now returns the name of the file that was written
  • nextPowerOf2 renamed to ceilPow2
  • System::alignedMalloc, System::alignedFree
  • Carbon, Crackman, Edenmill, Futurist, Interplanetary, Iomanoid, Starlight, Lesser, and Wild fonts by Ray Larabie. Like all of our fonts, they are free, but please consider a donation to him if you like them. http://www.larabiefonts.com/
  • MD2Model_Demo
  • G3D::MD2Model
  • FIX: Fixed a bug in Array shrinking that could cause memory corruption
  • FIX: RenderDevice windows with an aspect ratio of less than 1 now allowed.
  • FIX: TextInput now parses '#', '~', '~=', '&', '&&', '|', '||' correctly
  • VARArea::reset() now waits for rendering calls using its vertex arrays to complete before wiping the memory.
  • G3D::filenameBaseExt, G3D::filenameExt
  • VARArea::finish()
  • Milestone
  • TextInput::Options::signedNumbers
  • RenderDevice now loads glFlushVertexArrayRangeNV
  • Vector2int16
  • RenderDevice::freeVARSize()
  • Array now allocates 16-byte aligned pointers.
  • Decreased the default camera movement rate by 50% for better resolution.
  • RenderDevice enables GL_NORMALIZE by default
  • Improved the performance of Array::append/Array::push/Array::next
  • Fix: [ 875219 ] Array::sort must use std::sort
  • Array::next
  • Array::reverse
  • PCX file loading
  • Test images
  • Color3uint8 as uint8[] addressing
  • Color4uint8 as uint8[] addressing
  • Removed const from VAR::pointer
  • shared_ptr::isNull
  • alwaysAssertM
  • Log::common, Log::getCommonLogFilename
  • Switched from static to dynamic linking of zlib
  • Upgraded to zlib 1.1.3
  • On Win32 the lib list is automatically updated through pragmas (5.xx programs should revert to linking against default libraries)
  • Increased default sky quality to 1.00
  • G3D::CFontRef
  • RenderDevice now loads all register combiner extensions (NVIDIA only)
  • Sky::getEnvironmentMap
  • Sky implementation now uses a cube map (when one is available)
  • G3D::Sky constructor now takes a render device
  • Rotated Sky box 90 degrees to match environment maps
  • G3D::Sky now takes the environment filenames as "sky_*.jpg" instead of "sky_ft.jpg"
  • Added default filename for Sky constructor
  • Added caustics textures created with Kjell Andersson's generator http://www.lysator.liu.se/~kand/caustics/
  • #defined "for" under MSVC so that it obeys C99 scoping rules
  • System::consoleKeyPressed
  • System::consoleClearScreen
  • System::consoleReadKey
  • NetMessage::type()
  • Changed the Conduit message protocol to include a message type. The API is backwards compatible to 5.01 even though the protocol is not.
  • Removed optional argument maxSize from LightweightConduit::receive.
  • NetAddress::serialize
  • NetAddress::deserialize
  • NetAddress == NetAddress
  • hashCode(NetAddress)
  • RenderDevice::init now prints ATI or NVIDIA driver version to the log under Windows
  • readme.html library build instructions now have downloads for required libraries
  • Library list has changed for Win32 (added version.lib)
  • System::cpuArchitecture
  • System::operatingSystem
  • double-precision Plane::getEquation
  • Vector2::lerp
  • Platform specific #defines G3D_WINDOWS, G3D_LINUX, G3D_OSX
  • G3D::Array::contains
  • G3D::Queue::contains
  • G3D::ImageFormat
  • G3D::Texture::DIM_CUBE_MAP
  • G3D::Texture resizes non-power of two textures
  • G3D::Texture constructors are completely changed from 5.01 (and hopefully easier to use)
  • G3D::CImage now supports images with alpha
  • Removed most of the width/height arguments from G3D::Camera methods
  • BinaryInput::readBytes and BinaryOutput::writeBytes now take void* as an argument to avoid casting
  • Plane::fromEquation
  • Removed Plane::getNormal (use Plane::normal instead)
  • Removed CDTriangle (use G3D::Triangle instead)
  • Removed Font (use G3D::CFont instead)
  • FIX: Camera::getClipPlanes now transforms infinite planes correctly.
  • FIX: The last reference of an RGC pointer assigned to itself no longer tries to collect before re-assigning

Changes in 5.01

  • G3D::tesselateComplexPolygon
  • G3D::ConvexPolygon
  • G3D::ConvexPolyhedron
  • G3D::iClamp, G3D::clamp
  • G3D::iWrap
  • G3D::iRandom, G3D::random
  • G3D::getFiles
  • G3D::getDirs
  • G3D::VAR::pointer
  • G3D::realWorldLocalTime
  • G3D::Texture::TRANSPARENT_BORDER
  • DECLARE_GLFORMATOF
  • G3D::System::machineEndian
  • G3D::VertexProgram, G3D::VertexProgramRef, G3D::RenderDevice::setVertexProgram
  • G3D::PixelProgram, G3D::PixelProgramRef, G3D::RenderDevice::setPixelProgram
  • G3D::GPUProgram, G3D::GPUProgramRef
  • G3D::sizeOfGLFormat
  • G3D::RenderDevice::setVertexAttrib
  • G3D::Vector2*=Vector2, /= Vector2, * Vector2, / Vector2
  • glFormatOf
  • G3D::Color4uint8
  • G3D::Color3uint8
  • G3D::Vector3int16
  • G3D::System::currentProgramFilename
  • CImage::insertRedAsAlpha
  • CImage::stripAlpha
  • Texture::hasAlpha
  • Added support for TGA with alpha channel
  • Re-implemented Texture to support a broader range of formats and cleaner implementation.
  • Fix: Improved Texture::LUMINANCE support
  • Added == and != overloads for shared_ptr<Texture> so that "a != NULL" is now legal and does not require a cast to shared_ptr<Texture>.
  • G3D::CFont is a typedef for G3D::Font to avoid name conflicts with X11 Font under Linux. In future releases, the name Font will be deprecated.
  • RenderDevice::setPointSize
  • Added a new teapot (teapot.ifs) that is closed, with a properly fitting top. The classic teapot is now called "utah-teapot.ifs" (Sebastian Schuberth and Simon Winkelbach)
  • RenderDevice::init now loads glPointParameterfvARB, glPointParameterfARB, glMultiDrawArraysEXT, and glMultiDrawElementsEXT functions.
  • GLenumToString(4) now returns "GL_TRIANGLES" instead of "GL_LINE_BIT" (both are correct)
  • Added TextInput::Options to optionally allow C++ comments to be treated as two slashes instead of a comment
  • Added data/image/meter.jpg, a meter stick texture convenient for testing
  • Added sansserif, news, and terminal fonts based on Bitstream's free fonts
  • RenderDevice::numTextureUnits
  • Added stars to night Sky
  • Added classic GL dinosaur model as data/ifs/dinosaur.ifs
  • Documented G3D::glGetProcAddress
  • Fix: Texture now restored GL_ENABLE bits properly after creation
  • Fix: Texture::sizeInMemory now accounts for MIP-map levels
  • Fix: Fonts and skies now adjust their brightness for the screen gamma level
  • Fix: Strange compilation bug was causing Sky to be black for some programs
  • resolveFilename
  • GLProgram_Demo to show how to use vertex programs in G3D
  • Support for GL_ARB_vertex_program
  • Modified ManualCameraController so that diagonal movement does not exceed maximum rate.
  • Added support for non-GL_FLOAT vertex arrays to RenderDevice
  • Added support for Wavefront OBJ files to IFSBuilder
  • Removed duplicate copies of SDL.dll from the source tree
  • Renamed G3D::CDTriangle to G3D::Triangle
  • Added several G3D::Triangle methods
  • Moved CollisionDetection::primaryAxis to Vector3::primaryAxis
  • Fix: Texture::sizeInMemory now returns correct results for RGB8 textures.
  • Changed texture constructors in ways that slightly break backwards compatibility
  • Deprecated several arguments to the texture constructors.

Changes in 5.00

  • Color3::operator*=(const Color3&)
  • Color3::operator*(const Color3&)
  • Eliminated duplicate GL headers [James O'Sullivan]
  • Linux Makefiles [James O'Sullivan, Jordan Parker]
  • RenderDevice::getProjectionMatrixParams
  • RenderDevice::debugDrawCylinder
  • Added an option to not copy input memory for BinaryInput
  • Added data/ifs/sphere.ifs
  • Added data/ifs/spikeball.ifs
  • Added a new (imperfect) demo/tool that converts 3DS and MD2 to IFS.
  • Added RenderDevice to the Font constructor
  • Removed RenderDevice from Font::drawString
  • Included glut32.lib, .dll, and .h (Version 3.7.6) in the distribution. The windows glut port is by Nate Robbins and is from http://www.xmission.com/~nate/glut.html. glut was originally written by Mark Kilgard.
  • Modified OpenGL headers to work cross platform, with the latest NVIDIA extensions
  • Changed library name from graphics3D.lib to G3D.lib, same for debug version.
  • Changed directory structure and added readme.html to explain the new setup.
  • Changed BinaryInput::readBytes to allow reading onto the stack
  • Added Vector4::isFinite
  • G3D::CDTriangle (for 35% faster collision detection)
  • CollisionDetection::closestPointToRectangle
  • CollisionDetection::movingSpherePassesThroughFixedBox
  • CollisionDetection::movingSpherePassesThroughFixedSphere
  • Changed CollisionDetection::movingXFixedTriangle arguments
  • CollisionDetection::collisionTimeForMovingSphereFixedSphere
  • Changed CollisionDetection::distanceToX methods to closestPointToX
  • Vector3::NAN3
  • Made Vector3::isUnit fuzzy
  • Made Vector3::isZero fuzzy
  • Fix: Texture(std::string, std::string) constructor now works for alpha-only textures.
  • FIX: Array now calls copy constructor when resizing
  • FIX: Triangle-sphere and rectangle-sphere collision detection returned an incorrect collision location; now fixed.
  • FIX: changed VectorX::isFinite to call isFinite (used to give bad result for NaNs)
  • FIX: Used the normalized edge to compute intersection in CollisionDetection::distanceToTrianglePerimeter
  • FIX: Changed the order of corners returned from Box::getFaceCorners so the face is ccw, facing out
  • FIX: ManualCameraController::lookAt now faces along the -z axis.
  • FIX: data/ifs/icosa.ifs model is now an icosahedron
  • Made Set::begin() and Set::end() const
  • Added ifdef _WIN32 all over for typedefing types from Windows to Linux and vice versa.
  • G3D::isNaN, G3D::isFinite
  • Added a single triangle triangle.ifs file
  • G3D::LineSegment
  • RenderDevice::debugDrawRay
  • CoordinateFrame::toObjectSpace(Ray&)
  • CoordinateFrame::toObjectSpace(Box&)
  • CoordinateFrame::toObjectSpace(Sphere&)
  • Changed CollisionDetection routines to return the surface normal of the surface at the collision location.
  • CollisionDetection::collisionTimeForMovingPointFixedCapsule
  • CollisionDetection::collisionTimeForMovingSphereFixedCapsule
  • G3D::Capsule class
  • Removed e-mail addresses from contributor list to protect them from spammers
  • Linux port [Hari Khalsa & Chris Kern]
  • Added serialize and deserialize methods, deserializing constructor to Vector2, Vector3, Vector4, Color3, Color4, Matrix3, CoordinateFrame, Box, Sphere, Plane, Ray, Line, Capsule, LineSegment
  • Moved parts of Plane.h into Plane.cpp
  • BinaryInput::readBool8 and BinaryOutput::writeBool8
  • G3D::System [based on Michael Herf, Rob Wyatt, and Benjamin Jurke's work]
  • Networking infrastructure: G3D::NetworkDevice, G3D::NetAddress, G3D::ReliableConduit, G3D::LightweightConduit, G3D::NetListener
  • G3D::Camera
  • Vector2::toString
  • G3D::createTempFile
  • G3D::fileLength
  • UserInput::setKeyMapping
  • UserInput::keyCodeToString, UserInput::stringToKeyCode
  • JPEG library uses createTempFile
  • JPEG library will allocate up to 6MB before resorting to temp files– faster and more reliable
  • Moved SDL initialization to RenderDevice constructor from the init method so extension can be used earlier
  • Support for up to 8 texture units, no longer crashes on machines that have more than 4 units
  • Made Arrays allocate at least 32 bytes when resized to improve performance of small char stacks
  • Added UserInput key codes for mouse wheel buttons
  • UserInput::keyPressed, UserInput::pressedKeys()
  • UserInput::GKey
  • Renamed UserInput::poll() to UserInput::endEvents(), added UserInput::beginEvents()
  • Moved custom UserInput key codes into an enum so they are compile-time constants
  • Changed all <io.h> to <stdio.h> for cross-platform [Rob & Chris]
  • Moved LITTLE_ENDIAN and BIG_ENDIAN constants to an enum and renamed them to G3D_LITTLE_ENDIAN and G3D_BIG_ENDIAN for cross-platform [Rob & Chris]
  • Permanently fixed the precision of Real to be 32-bit float.
  • RenderDevice now loads the NVIDIA VAR fence extensions.
  • Renamed RenderDevice::begin to RenderDevice::beginPrimitive, same for end.
  • Redesigned the vertex array system; see VAR and VARArea.
  • Changed GLG3D demo to demonstrate the use of the new VAR and VARArea classes
  • CoordinateFrame(Vector3) constructor.
  • Improved the performance of zero-radius sphere [aka point] collision detection

Changes in 4.01

  • trimWhitespace()
  • Pointwise multiplication and division for Vector3
  • Array::sort now uses > operator by default; two alternative sort methods allow qsort style sorting
  • Texture::copyFromScreen
  • Texture::invertY
  • BinaryInput/BinaryOutput compression (via zlib)
  • Alpha-only G3D::Texture mode
  • G3D::Font and fonts in data/font
  • Array::fastRemove
  • TextInput [Morgan & Aaron]
  • Color4::CLEAR
  • Table [] operator now returns a non-const reference
  • RenderDevice::getFrameRate, RenderDevice::getTriangleRate, RenderDevice::getTriangleCount
  • ManualCameraController::setMoveRate, ManualCameraController::setTurnRate
  • SkyParameters default constructor
  • Vector2, Vector3, Vector4::isZero(), Vector4::isUnit(), Vector4::isFinite()
  • Vector4::length(), Vector4::squaredLength()
  • isValidPointer now returns false for 0xFEEEFEEE
  • RenderDevice checks for texture compression extensions
  • Restructured the directories for the CPP sources (only affects people who build G3D)
  • Included NVIDIA and SGI OpenGL headers in the distribution, changed install notes
  • Fixed a bug that previously prevented textures from being garbage collected
  • Fixed Line::distance returning values too small
  • Fixed Plane(normal, point) constructor to compute point from normalized direction [Kevin]
  • LED font by Matthew Welch daffy.nosp@m.-duc.nosp@m.k@wor.nosp@m.ldne.nosp@m.t.att.nosp@m..net
  • VenusRising font by Ray Larabie drowsy@cheerful.com
  • VideoFreak font by Jakob Fischer pizza.nosp@m.dude.nosp@m.@pizz.nosp@m.adud.nosp@m.e.dk

Changes in 4.00

  • Moved texture combine modes from Textures onto RenderDevice texture units
  • Documented RenderDevice::getHDC() (Windows only)
  • Renamed RenderDevice::swapBuffers() to RenderDevice::endFrame(), added corresponding RenderDevice::beginFrame()
  • Moved getNumJoySticks from RenderDevice to UserInput
  • Added TEX_ADD combine mode
  • Table::getKeys and Set::getMembers now have overloads that take an Array as input.
  • BinaryOutput::getCArray
  • RenderDevice::getObjectToWorldMatrix(), RenderDevice::getCameraToWorldMatrix()
  • RenderDevice::debugDrawAxes(), RenderDevice::debugDrawBox(), RenderDevice::debugDrawSphere()
  • Color3::Color3(const Vector3&) and Color4::Color4(const Vector4&)
  • Moved hashCode(const Vector3&) and hashCode(const Vector4&) to the global namespace [Kevin]
  • isValidPointer now returns false for 0xCCCCCCCC and 0xDEADBEEF
  • Fix: RenderDevice::setPolygonOffset now affects polygons rendered in line and point mode
  • Fix: Sun is now invisible after it goes below the horizon
  • Fix: BinaryInput now supports endian-ness correctly in memory read mode
  • Fix: Table.copyFrom and copy constructor now work

Changes in 3.02


Changes in 3.01


Changes in 3.00

  • G3D::NEWLINE
  • writeStringToFile
  • Fixed empty stringJoin bug
  • Fixed parseFilename with no path bug
  • Vector3::INF3, Vector3::ZERO3
  • G3D::PhysicsFrame (beta– this interface is going to change in 4.00)
  • G3D::Vector4
  • G3D::Queue
  • Default constructor for G3D::CImage
  • G3D::isValidHeapPointer, G3D::isValidPointer
  • G3D::Ray
  • CImage copy constructor, CImage::load
  • Removed #pragma once for gcc compatibility
  • Renamed several hashcode methods to hashCode
  • Fixed fuzzy math to work with infinite numbers
  • Fixed Table::remove(), Set::remove() bug [Darius Jazayeri]
  • G3D::CoordinateFrame.toObjectSpace(Vector4), G3D::CoordinateFrame.toWorldSpace(Vector4)
  • Added the data directory
  • G3D::CollisionDetection
  • G3D::Sphere::culledBy()
  • Added the GLG3D library [Morgan McGuire & Seth Block]
  • Changed SDL_GL_Demo to use GLG3D, rotate triangle, and use color blending
  • Fixed debugPrintf to handle long strings on Win32
  • Wrapped the MMX headers with #ifdefs [Nate Miller]
  • Moved OpenGL code out of CoordinateFrame.h/cpp
  • Fixed BinaryInput readVector*, readColor* to read in correct order [Nate Miller]
  • BinaryInput::readVector4, BinaryInput::readColor4, BinaryOutput::writeVector4, BinaryOutput::writeColor4
  • IFS_Demo for loading IFS files, dealing with models in OpenGL [Nate Miller]

Changes in 2.00

  • Vector2 members renamed to x,y from s,t
  • Added SDL_GL_Demo and Win32_Demo
  • Removed Group

Changes in 1.10

  • CImage, color conversion routines [Morgan McGuire, John Chisholm, and Edward Resnick]
  • Array dereference for BinaryInput
  • BinaryInput from memory
  • BinaryOutput to memory
  • toUpper(std::string), toLower(std::string)
  • Group::clear()
  • inf, nan as global constants (double precision)
  • Can iterate over const Tables
  • Table::deleteValues()
  • Fixed an off-by-one bug in BinaryInput::readString()
  • beginsWith() and wordWrap() string utilities
  • prompt dialogs have fixed width font [Kurt Miller]
  • iMax(), iMin()
  • Array::sort()
  • stringCompare(), stringPtrCompare()
  • readFileAsString()
  • Fixed textPrompt() to wait for input
  • BinaryInput.getFilename(), BinaryOutput.getFilename()
  • ReferenceCount [Justin Miller]
  • endsWith()
  • stringSplit(), stringJoin()
  • Renamed format.* to stringutils.*
  • fileExists(), parseFilename(), createDirectory(), copyFile()
  • highestBit() [Jukka Liimatta]
  • flipRGBVertical()
  • Changed all header guards to use G3D_ prefix
  • ConvexPolyhedron
  • Virtual destructors on almost all objects.
  • RGBtoBGR()
  • Color4
  • Array::pop(bool shrinkArray=true)
  • Vector2::isFinite, Vector2::fuzzyEq, Vector::fuzzyNe

Changes in 1.09

  • Removed pointer hash [Aaron Orenstein]
  • Changed some includes from quotes to pointy brackets [Aaron Orenstein]
  • Sphere::toString()
  • Plane::toString()
  • Added a change log

documentation generated on Wed Nov 24 2021 08:01:52 using doxygen 1.8.15