Git Product home page Git Product logo

horde3d's Introduction

Horde3D

Horde3D is a 3D rendering engine written in C++ with an effort being as lightweight and conceptually clean as possible.

Horde3D requires a fully OpenGL 2.0 compatible graphics card. In terms of DirectX that means a card supporting at least Shader Model 2.0 or higher. For mobile operating systems (Android and IOS) OpenGL ES 3.0 capable device is required.

Features

  • Modern, cross-platform, shader-based architecture (requires OpenGL 2.0+)
    • Lightweight, non-intrusive design with very few dependencies, avoiding complexity where possible
    • C-style API for easy usage from virtually any programming language
  • Resource management
    • Garbage collected resources, loaded from virtually any type of data stream
    • Hot-reloading of resources for more increased productivity during development
    • Access to vertex data for collision detection and interoperability with physics engines
  • Übershader-based, customizable rendering pipeline
    • Hot-reloading of pipelines for rapid testing of different rendering techniques
    • Support for post processing effects like bloom, DOF or motion blur
    • Support for almost all forward, deferred and High Dynamic Range rendering techniques
    • Support for real-time reflections and other techniques that require several cameras
    • Support for geometry, tessellation and compute shaders
    • Real-time shadows using Parallel Split Shadow Maps (PSSM)
    • Particle systems that can cast shadows and have effects like motion blur
  • Unified scene system
    • World, models and skeletons are scene nodes instead of special objects
    • Frustum culling based on spatial graph
    • Hardware occlusion culling
    • Level of detail for model geometry and materials
  • Unified, low-level animation system
    • Key frame animation for joints and meshes
    • Skeletal animation with up to 4 weights per vertex for articulated models
    • Layered animation blending and mixing using masks and additive channels
    • Morph targets for facial animation and lip synchronization
    • Access to joint data for dynamic animations and ragdoll physics
  • Content Pipeline
    • Mixture of binary and XML formats for best tradeoff between performance and productivity
      • Pipeline, material and scene descriptions are XML
      • Model and animation are binary for maximum performance
      • Textures are common image formats (DDS, PNG, JPEG, etc.)
    • COLLADA Converter for importing assets from many common DCC tools
      • Calculation of tangent space basis for normal mapping
      • Optimization of geometry for GPU post-transform vertex cache
    • Editor for composing scenes, developing shaders and rendering techniques

Building

You need to have a C++11 compiler and CMake 3.7+ installed.

Use of CMake for Windows, Linux, macOs

CMake is a meta-build system, e.g. it creates Makefiles or Visual Studio files using Generators. The main ways to use CMake are cmake-gui (Qt Interface), ccmake (Curses Interface) and cmake (Commandline Interface). Instructions for commonly used generators:

  • Qt Creator: open CMakeLists.txt as new project, follow the instructions, hit build and you're done.
  • Visual Studio: start cmake-gui, choose OGDF as source path, build-vs as build path, press generate, open build-vs\Horde3D.sln and start compiling. You could also generate the solution from the command line running mkdir build-vs && cd build-vs && cmake -G "Visual Studio XYZ" .., where XYZ is the correct identifier for the desired version of Visual Studio (i.e. 14 2015 for VS 2015, 15 2015 for VS 2017, etc. Please run cmake --help for more info).
  • Xcode: open up a terminal, navigate to the repository and run mkdir build-xcode && cd build-xcode && cmake -G "Xcode" .., then open the generated project file inside Xcode.
  • Makefiles: open up a terminal, navigate to the repository and run mkdir build-make && cd build-make && cmake -G "Unix Makefiles" .. && make (hint: use export JOBS=MAX to speed things up).
  • Ninja: open up a terminal, navigate to the repository and run mkdir build-ninja && cd build-ninja && cmake -G "Ninja" .. && ninja.

Build samples

In order to build the samples you need GLFW (>3.x) or SDL (>=2.0.9).

By default, if not present on the system, a default version will be automatically downloaded, built and linked for you.

You could force this behavior using HORDE3D_FORCE_DOWNLOAD_GLFW flag with CMake (from your build directory):

 cmake -DHORDE3D_FORCE_DOWNLOAD_GLFW=ON ..

With SDL you can use HORDE3D_FORCE_DOWNLOAD_SDL flag with CMake (from your build directory):

 cmake -DHORDE3D_FORCE_DOWNLOAD_SDL=ON ..

On Debian/Ubuntu platforms, you also need to install the following packages:

 sudo apt-get install xorg-dev

You could also skip sample building using HORDE3D_BUILD_EXAMPLES flag with CMake (from your build directory):

 cmake -DHORDE3D_BUILD_EXAMPLES=OFF ..

Building for Android

Building for Android requires using two build systems: CMake and Gradle. Gradle project is included in Horde3D distribution.

Requirements:

Android Studio is recommended, but not required.

CMake GUI usage is recommended. Following instruction depends on using GUI for building.

  • Select Horde3D source folder and folder where cmake intermediates and binaries would be stored
  • Hit "Add Entry" button and add new cmake variable "ANDROID_ABI". Tested value is arm64-v8a.
  • Hit "Add Entry" button again and add new cmake variable "ANDROID_PLATFORM". Tested value is android-24.
  • Hit "Add Entry" button again and add new cmake variable "ANDROID_DL_LIBRARY". Cmake may incorrectly specify libdl.a instead of libdl.so and that can lead to problems with libSDL so we have to do it manually. Please set the path to: Android NDK/toolchains/llvm/prebuilt//sysroot/usr/lib/aarch64-linux-android//libdl.so -- where platform is: windows-x86_64, linux-x86_64 -- version is android target api version: 24, 25, ..., 29.
  • Hit configure button, create the folder if asked, and select "Unix makefiles" and "Specify toolchain file for cross-compiling".
  • Select the toolchain file that is located in the Android NDK/build/cmake/android.toolchain.cmake
  • On Windows CMake may not be able to find make.exe program that is in the NDK. Please specify the make program in CMAKE_MAKE_PROGRAM field and set it to ANDROID NDK/prebuilt/windows-x86_64/bin/make.exe
  • In Horde3D submenu select OpenGL ES3 rendering backend and deselect GL2 and GL4 backends
  • If you have you own SDL2 build please specify it in SDL2 submenu (path to includes and library libSDL2.so). SDL2 can also be automatically downloaded and built with Horde3D (please select HORDE3D_FORCE_DOWNLOAD_SDL for that in Horde3D submenu)
  • Set CMAKE_BUILD_TYPE to either Debug or Release.
  • If you wish you can specify signer key for release builds of Android APK, otherwise you would be asked for it during build (debug builds do not require your own key as it would be generated by Android Studio). You can specify ANDROID_APK_SIGNER_KEYSTORE path to keystore file, ANDROID_APK_SIGNER_KEYSTORE_PASS for keystore password and ANDROID_APK_SIGNER_KEY_PASS for key password.
  • Specify ANDROID_SDK_ROOT_PATH - path to Android SDK (required on Linux).
  • Specify ANDROID_SDK_BUILD_TOOLS_PATH for correct release builds (path to signature tools). Default path is Android SDK/build-tools/28.0.3
  • Generate the make files
  • On Windows, Open the cmd.exe, go to the created folder and use the full path to make.exe to launch build process. Example: Android NDK/prebuilt/windows-x86_64/bin/make.exe -j4.
  • On Linux, open the terminal, go to the created folder and type make. Please note that using j parameter for multithreaded compilation requires you to input ANDROID_APK_SIGNER_KEYSTORE_PASS and ANDROID_APK_SIGNER_KEY_PASS in CMake, otherwise you will get a compilation error on apk signing process.

Building for iOS

Currently, building is supported only on macOS. Only iPhone target is supported for now, iPad and tvOS are not tested,

A new version of CMAKE is recommended, Cmake 3.16 was tested and was working correctly.

Requirements:

CMake GUI usage is recommended. Following instruction depends on using GUI for building.

SDL is required for samples. Automatic download and build is disabled for iOS as SDL fails to build with CMAKE (HORDE3D_FORCE_DOWNLOAD_SDL will have no effect ). Please download SDL manually and build it with XCode project, located in /XCode-iOS/SDL. In Build Settings set Enable Bitcode option to No,

  • Select Horde3D source folder and folder where cmake intermediates and binaries would be stored
  • Select the toolchain file that is located in the /BuildTools/ios/ios.toolchain.cmake
  • Hit Configure button
  • Check HORDE3D_USE_GLES3 flag and uncheck HORDE3D_USE_GL2 and HORDE3D_USE_GL4 flags.
  • Set SDL2 include path to /include and SDL library to the generated libSDL2.a file (it is usually located in /Users//Library/Developer/Xcode/DerivedData/SDL-/Build/Products/Debug-iphoneos/libSDL2.a)
  • In IOS category set IOS_CODE_SIGN_IDENTITY and IOS_DEVELOPMENT_TEAM properties. Details on checking the values of these parameters are provided below.
  • Hit Generate button.
  • Now XCode project is generated and can be launched.

To get your development team id go to Applications -> Utilities -> Keychain Access. Under the 'login' Keychain, go into the 'Certificates' category.

Scroll to find your development or distribution certificate. It should be something like that: Apple Development: ()

Double click on this certificate. "Organizational Unit" is the Team ID.

Please note that ParticleVortex and Tessellator sample will not run on iOS as OpenGL ES 3.2 is not available.

Build Horde3D scene editor

There is also a scene editor available for Horde3D. To enabling build of the editor, first make sure you have the Qt 4.8 or any newer Qt 5.x SDK installed. To enable creating makefiles for the editor via cmake set the HORDE3D_BUILD_EDITOR flag to ON (default is OFF).

cmake -DHORDE3D_BUILD_EDITOR=ON

As the editor needs Lua as a dependency you can either make sure the Lua development files can be found by cmake, or Lua will be automatically downloaded by CMake.

What's next

Here are some quick links to help you get started:

License

Horde3D is licensed under the Eclipse Public License v1.0 (EPL).

The EPL is a quite liberal license and has fewer restrictions than the popular LGPL. Basically it allows you to use Horde3D in free and commercial projects as long as you contribute improvements like bug fixes, optimizations and code refactorings back to the community. The EPL allows static linking and is not viral; hence it does not affect any other modules of your application.

horde3d's People

Contributors

algts avatar blep avatar bosoni avatar byron-conroy avatar cleversoap avatar cloudwu avatar creutzerb avatar dervus avatar gwald avatar horde3d avatar i80and avatar islc avatar jcmonnin avatar l0stt4rg3t avatar olitheolix avatar psigen avatar pyrym avatar schulzch avatar severtsev avatar superusernameman avatar thelink2012 avatar zuck avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

horde3d's Issues

node and runtime issues

I have Been recently Using horde and with EVERY program I compile run except for the examples gives me this:

invalid ...... handle in .......

with every function that includes nodes
here is one of my report logs:

0.000
Initializing GL2 backend using OpenGL driver '3.3.0' by 'NVIDIA Corporation' on 'GeForce 8400 GS/PCIe/SSE2'
0.039
Invalid resource handle in h3dLoadResource
0.041
Invalid resource handle in h3dLoadResource
0.042
Loading resource '$Tex2D'
0.043
Loading resource '$Tex3D'
0.044
Invalid resource handle in h3dAddNodes
0.046
Invalid node handle in h3dSetupModelAnimStage
0.049
Invalid resource handle in h3dAddCameraNode
0.052
Invalid node handle in h3dSetNodeParamI
0.053
Invalid node handle in h3dSetNodeParamI
0.055
Invalid node handle in h3dSetNodeParamI
0.057
Invalid node handle in h3dSetNodeParamI
0.058
Invalid node handle in h3dSetupCameraView
0.060
Invalid resource handle in h3dResizePipelineBuffers
0.061
Invalid node handle in h3dSetModelAnimParams
0.063
Invalid node handle in h3dSetNodeTransform
0.065
Invalid node handle in h3dRender
0.089
Invalid node handle in h3dSetModelAnimParams
0.091
Invalid node handle in h3dSetNodeTransform
0.093
Invalid node handle in h3dRender
0.094
Invalid node handle in h3dSetModelAnimParams
0.095
Invalid node handle in h3dSetNodeTransform
0.097
Invalid node handle in h3dRender
0.102
Invalid node handle in h3dSetModelAnimParams
0.103
Invalid node handle in h3dSetNodeTransform
0.105
Invalid node handle in h3dRender
0.106
Invalid node handle in h3dSetModelAnimParams
0.107
Invalid node handle in h3dSetNodeTransform
0.110
Invalid node handle in h3dRender
0.111
Invalid node handle in h3dSetModelAnimParams
0.113
Invalid node handle in h3dSetNodeTransform
0.115
Invalid node handle in h3dRender
0.118
Invalid node handle in h3dSetModelAnimParams
0.119
Invalid node handle in h3dSetNodeTransform
0.121
Invalid node handle in h3dRender
0.123
Invalid node handle in h3dSetModelAnimParams
0.174
Invalid node handle in h3dSetNodeTransform
0.176
Invalid node handle in h3dRender
0.177
Invalid node handle in h3dSetModelAnimParams
0.178
Invalid node handle in h3dSetNodeTransform
0.180
Invalid node handle in h3dRender
0.183
Invalid node handle in h3dSetModelAnimParams
0.184
Invalid node handle in h3dSetNodeTransform
0.185
Invalid node handle in h3dRender
0.187
Invalid node handle in h3dSetModelAnimParams

and so on..

any response would be usefull

Delete the root dir CMake

I think a project need that people at less know how to use the same tools you are using (enve if they choose to use other later for their own setup).

So I suggest to delete the root dir CMake for

  • Can be confusing to "new" people not used to cmake, they could think it is a part of cmake and not even look inside. Or because there is already files for VS you would not get why these are there.
  • cmake . -G "Xcode" is the correct one to run on OSX as today.
  • you could include in the readme the reference to cmake . that I think will try to run the default for the system (anyone can say if it is true or not), and perhaps include a CMAKE_USAGE.md or something that list all the possible outputs like:
    • For Linux or default developer tools of system cmake .
    • For XCode cmake . -G "Xcode"
    • For VS 2005 cmake -G "Visual Studio 8 2005"
    • For VS 2008 cmake -G "Visual Studio 9 2008"

And there could be also the indication in how to enable/disable terrain extension. So people get more feedback about cmake build chain and purpose.

`bool TextureResourceEx::importTexGL` does not return anything

I've got a compiler warning in following function. The compiler is complaining that the function is not returning anything. Should the function signature be changed to void?

bool TextureResourceEx::importTexGL(uint32 texGL, int width, int height )
{
    _loaded = true;
    _width = width;
    _height = height;

    if( _texObject == defTex2DObject )
    {
        m_imported = false;
        RenderDeviceInterface *rdi = Modules::renderer().getRenderDevice();
        _texObject = rdi->createTexture( _texType, _width, _height, _depth == 0 ? 1 : _depth, _texFormat,
                                         false, false, false, _sRGB );
    }
    replaceTexObj( texGL );
    m_imported = true;
}

cmake issue while creating the project

I am getting following error when i try to execute:

cmake -DHORDE3D_FORCE_DOWNLOAD_GLFW=ON ../Tools/Horde3DEditor

CMake Warning at ../../CMakeLists.txt:19 (find_package):
  By not providing "FindGLFW.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "GLFW", but
  CMake did not find one.

  Could not find a package configuration file provided by "GLFW" with any of
  the following names:

    GLFWConfig.cmake
    glfw-config.cmake

  Add the installation prefix of "GLFW" to CMAKE_PREFIX_PATH or set
  "GLFW_DIR" to a directory containing one of the above files.  If "GLFW"
  provides a separate development package or SDK, be sure it has been
  installed.


-- Found Qt4: /usr/bin/qmake-qt4 (found version "4.8.6") 
-- Found Qt4: /usr/bin/qmake-qt4 (found version "4.8.6") 
CMake Error at CMakeLists.txt:28 (SET_PROPERTY):
  set_property could not find TARGET Terrain.  Perhaps it has not yet been
  created.


CMake Error at CMakeLists.txt:39 (SET_PROPERTY):
  set_property could not find TARGET Chicago.  Perhaps it has not yet been
  created.

Build of editor fails with clang-40: cannot take the address of an rvalue of type 'float'

Errors:

/usr/ports/devel/horde3d/work/Horde3D-57678aa/Horde3D/Source/ColladaConverter/converter.cpp:915:20: error: cannot take the address of an rvalue of type 'float'
                fwrite_le<float>(&Matrix4f().x[j], 1, f);
                                 ^~~~~~~~~~~~~~~~
1 error generated.

/usr/ports/devel/horde3d/work/Horde3D-57678aa/Horde3D/Source/Horde3DEngine/egRenderer.cpp:2301:78: error: cannot take the address of an rvalue of type 'float'
        _renderDevice->setShaderConst( _defColorShader.uni_worldMat, CONST_FLOAT44, &Matrix4f().x[0] );
                                                                                    ^~~~~~~~~~~~~~~~

and warnings

/usr/ports/devel/horde3d/work/Horde3D-57678aa/Horde3DEditor/src/QPropertyEditor/Property.cpp:78:7: warning: case value not in enumerated type 'QVariant::Type' [-Wswitch]
        case QMetaType::Float:  
             ^
/usr/ports/devel/horde3d/work/Horde3D-57678aa/Horde3DEditor/src/QPropertyEditor/Property.cpp:103:7: warning: case value not in enumerated type 'QVariant::Type' [-Wswitch]
        case QMetaType::Float:  
             ^
/usr/ports/devel/horde3d/work/Horde3D-57678aa/Horde3DEditor/src/QPropertyEditor/Property.cpp:123:7: warning: case value not in enumerated type 'QVariant::Type' [-Wswitch]
        case QMetaType::Float:  
             ^

Sample applications broken when built on MacOSX using unix makefiles

When building the project with a makefile generated by CMake, the samples don't work.

Xcode generates the executable in Horde3D/Binaries/Darwin/Debug/or Horde3D/Binaries/Darwin/Release/.

The makefile generates the executable in Horde3D/Binaries/Darwin/(not in a subfolder). Therefore, the resources in Content can not be found.

Getting rid of the scene graph

Marciano proposed on the forum:

We are currently thinking about taking out the scene tree (transformation hierarchy) from the Horde core. Why?

I begin to think more and more that is not a good idea if the 3d engine (and even less the renderer) is modifying transformations. Without a scene tree, all horde scene objects would just be added directly into a flat list. Besides making the game engine integration strategy clearer, this would also help to further simplify the horde code and would definitely be beneficial for performance, as the scene tree does not have to be updated every frame (an operation which causes a lot of cache misses).

The change would have the introduction of model resources as dependency. Along with it, we would probably give more control over the model update as well. It needs to be possible to explicitly and immediately apply the skeletal animation to a model, so that the joint matrices can be read back to manually attach an object to a joint. A simple function updateModel could take care of that and control as well when morphers and software skinning should be applied. BTW, if anyone really needs it, it would be possible to have a scene tree in the utility library.

Discussion on official thread:
http://horde3d.org/forums/viewtopic.php?f=8&t=1117

Move .NET samples to Bindings/C#/Source

I think .NET related stuff should not live in the same source-tree of default C/C++ version, so I propose to move .NET samples to Bindings/C#/Source/Samples/.

Conan package for Horde3D

Hello,
Do you know about Conan?
Conan is modern dependency manager for C++. And will be great if your library will be available via package manager for other developers.

Here you can find example, how you can create package for the library.

If you have any questions, just ask :-)

Stop shipping GLFW with Horde3D SDK

As reported by @attilaz in its fork:

Shipping GLFW with Horde3D SDK makes compiling and running samples easier by newbies, but I don't think it is a good idea to ship an old version of GLFW 2.7 missing a lot of bug fixes or going in trouble of updating bundled GLFW with every release with GLFW 3 being on the edge.

So my suggestion is to remove bundled GLFW from Horde3D SDK or atleast from the git repository and dynamically link against the installed version on target system.

Built-in samples could just link dynamically the lib.

A requirement check should be added to CMakeLists.txt.

Terrain shows geometry artifacts

Occasionally you can see extra triangles in the terrain.

These are most noticable if you go "under" the terrain and can see that every other triangle is exactly vertical

from the top of the terrain you see all the triangles and some extra ones you shouldn't

Problems loading resources

Hi! Not sure if this is a bug or if I'm screwing something up, I just recently started tinkering with Horde3D master repos.

While trying to adapt the SDL example to SDL2 I've come across a weird problem, I try to load the pipelines as resources:

    H3DRes test = h3dAddResource(H3DResTypes::Pipeline, "pipelines/forward.pipeline.xml", 0);
    if (!h3dutLoadResourcesFromDisk("<full and relative path to Horde3D/Horde3D/Binaries/Content tried>")) {
        if (!h3dutDumpMessages()) {
            fprintf(stderr, "ERROR: unable to log?\n");
        }
        fprintf(stderr, "ERROR: unable to load resources\n");
    }

h3dutLoadResourcesFromDisk always returns false, I've tried relative paths, and "." (copying all the content to my local path).

I tried dumping messages to a log to maybe find out why, but there is no log file available and no output to stdout/stderr. Subsequent call to h3dGetError returns false and tried setting MaxLogLevel to both 0 and 1000, neither has given any output afaik.

First, I'm wondering what I'm doing wrong since I'm unable to load any resources (the samples work fine) and secondly I'm wondering how to get information about WHAT the actual error is. Error parsing XML? Error finding the file? So far I've seen no output from Horde3D at all regardless of MaxLogLevel, is there no way to find out what error actually occured when calling a function?

Thanks for the help!

Samples doesn't work on Linux

The samples (Chicago, Knight, etc.) doesn't seem to work on Linux. All I get is a black screen.
Tried two different nvidia machines with x64 Arch Linux.

This issue might be caused by the hack that made it compile in the first place (#66).

Edit: If I hit F7 (debug mode?) I can see some khaki colored plane when I move my mouse around.

Edit2: I'm very sorry. I didn't see the error log html file. It didn't find any resources because I ran the binaries from the cmake build directory.

colladaConv process joints

This is more like a question than an issue. I tried to convert some animated character models(dae format) to geo format that H3D can process. I encountered a warning message saying my character has more than 75 joints. Once the model is loaded into the engine, the joint's index (in abc.scene.xml file) which higher than 75 are missing and so does the meshes. Is there a restriction with H3D that prevent loading models that have more than 75 joints?

Great work on the new version thou. Thanks a ton.

Fix documentation

Documentation is currently out-of-date. Should be re-generated before releasing.

Create a sample framework

Currently, in samples code, we reinvent the wheel every time with a lot of duplicated code.

It makes the sample-specific code bloating (hiding the interesting logic with a lot of boring configuration code), hard to manage (fixes should be duplicated too for each sample) and hard to extend (adding more samples).

I propose to create a base (very minimal) sample framework which handles:

  • Default window creation, configuration and handling.
  • Default application logic (Exit on ESC, Fullscreen toggle on F1, etc.).
  • Hooks for sample-specific logic.

It should be implemented using an abstract BaseSampleApplication class, shared by all samples and inherited by sample concrete application class. The concrete class should be written in a header file with a default name (i.e: app.h) included by the shared main source file.

Remove pre-generated Visual Studio solutions

Redundancy should be avoided on source repository: if a file could be generated by others, it should be generated if it useful and when it is useful.

All pre-generated Visual Studio solutions should be removed by the source tree and generated by CMake when they are really needed (i.e. included in a Windows-specific binary SDK package).

It allows a better separation between build and source files and avoid sync issues between CMake file and VS solutions (new files should be added to CMakeLists.txt and NOT to VS project files!).

H3D_DEBUGGER_OUTPUT is only implemented for windows

H3D_DEBUGGER_OUTPUT: Send log messages to the output channel of the attached debugger

This is only working on windows. It's really useful to have that while developing, it saves you to check the html log file. On most other platform and stdout or stderr is shown on the debugger, so the fix is simple.

Buffers are destroyed even if they are still referenced

Currently the terrain extension uses the same vertex buffer two times in it's geometry. Calling destroyGeometry destroys the bound buffers by default and releases the same buffer multiple times because it does not check if a buffer bound previously has been already destroyed.
Probably the best would be to reference count the _buffer entries and only destroy buffers in destroyGeometry if no one else is using it anymore. Similar to how it is done with the resources. Maybe _buffers should be handled as Resources anyway. This way one vertex buffer may be used in different Geometries if needed.

Can not build on MacOSX

I can not build the project on MacOSX 10.9 with XCode 6.0.1, CMake 3.0.2, I got this error:
CMake Error at CMakeLists.txt:42 (include):
include could not find load file:
Extensions/Extensions.txt

Then I created an empty Extensions.txt file in Extensions folder, and got this Error:
Horde3D/Source/Horde3DEngine/egModules.cpp:29:11: fatal error:
'egExtensions_auto_include.h' file not found

include "egExtensions_auto_include.h"

GLFW3 cursor position / mouse movement problem

I had updated all Horde3D samples to latest version of GLFW 3. Everything works and compiles without issues, but there is problem with cursor position when mouse is moved and FPS camera rotates / resets itself to Z-axis instead of beginning movement at start/center position of window. Camera movement code is same:

void cursor_position_callback(GLFWwindow* window, double xpos, double ypos)
{
    if( !running )
    {
        mx0 = xpos; my0 = ypos;
        return;
    }
    app->mouseMoveEvent( (double)(xpos - mx0 ), (double)(my0 - ypos) );
    mx0 = xpos; my0 = ypos;
}

I think it has something to do with GLFW 3 (cursor position which start at X0 and Y0 of window, instead of center), instead of Horde3D but Im posting this issue here because I was not able to find any solution on Horde3D forums.

Build fails on Visual Studio 2012 (std::max undefined)

Build of Horde3D master fails on Visual Studio 2012.

error C2039: 'max' : is not a member of 'std' ..\horde3d\horde3d\source\colladaconverter\daeLibAnimations.h 141 1 ColladaConv

The cause seems to be a reorganization of STL in last VS libs.

The fix should be to add the following line to daeLibAnimations.h:

#include <algorithm>

Move Overlays logic to an extension

I propose to move all the Overlays logic to a separated extension.

Why?

Well, basically because:

  1. In real use cases, I think, a stand-alone GUI solution is used instead of basic Overlays.
  2. Overlays are just a restricted use case of, more general, geometry primitives drawing (see: #24)
  3. Split the core from extension concepts is usually a winning idea.

Discussion on this thread:

http://www.horde3d.org/forums/viewtopic.php?f=8&t=2162

Build fails with GCC 4.7.X

I'm not sure if it should be considered an Horde3D bug (maybe not), but I post it just for reference.

The building of Horde3D fails with GCC 4.7.X due to a bug in the included rapidxml library. The bug is related to the change in the GCC behavior about symbol name lookups.

The build error is the following (this is not exactly from my build, but it almost the same):

[,,,]
../Shared/rapidxml_print.h: In instantiation of 'OutIt rapidxml::internal::print_node(OutIt, const rapidxml::xml_node<Ch>*, int, int) [with OutIt = std::ostream_iterator<char, char, std::char_traits<char> >; Ch = char]':
../Shared/rapidxml_print.h:390:57:   required from 'OutIt rapidxml::print(OutIt, const rapidxml::xml_node<Ch>&, int) [with OutIt = std::ostream_iterator<char, char, std::char_traits<char> >; Ch = char]'
../Shared/rapidxml_print.h:403:9:   required from 'std::basic_ostream<Ch>& rapidxml::print(std::basic_ostream<Ch>&, const rapidxml::xml_node<Ch>&, int) [with Ch = char]'
../Shared/rapidxml_print.h:414:31:   required from 'std::basic_ostream<Ch>& rapidxml::operator<<(std::basic_ostream<Ch>&, const rapidxml::xml_node<Ch>&) [with Ch = char]'
../Shared/rapidxml_print.h:115:17: error: 'print_children' was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
[,,,]

The bug was already reported on the Horde3D forum at:

http://www.horde3d.org/forums/viewtopic.php?f=3&t=1735

More info here (with a valid workaround):

http://stackoverflow.com/questions/14113923/rapidxml-print-header-has-undefined-methods
http://gcc.gnu.org/gcc-4.7/porting_to.html

Missing Extensions.txt on master

Master is missing Extensions/Extensions.txt, and cmake won't build without it.
Seems like everything builds ok if I checkout the file from develop.

Oh, and it's actually the same issue as in #65.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.