Git Product home page Git Product logo

eyescale / equalizer Goto Github PK

View Code? Open in Web Editor NEW
223.0 223.0 102.0 65.45 MB

Equalizer is the standard middleware to create and deploy parallel OpenGL-based applications. It enables applications to benefit from multiple graphics cards, processors and computers to scale the rendering performance, visual quality and display size. An Equalizer application runs unmodified on any visualization system, from a simple workstation to large scale graphics clusters, multi-GPU workstations and Virtual Reality installations.

Home Page: http://eyescale.github.io/equalizergraphics.com/

License: Other

CMake 1.18% C++ 94.66% C 1.37% GLSL 0.29% Batchfile 0.02% Lex 0.62% Yacc 1.86%

equalizer's People

Contributors

3p3r avatar cstalder avatar dardok avatar delalond avatar delyas avatar dulley avatar eile avatar favreau avatar m0bl0 avatar marlam avatar marwan-abdellah avatar maxmah avatar michaelvlad avatar mjdsys avatar oliver-e avatar petroskataras avatar probert73 avatar purplekarrot avatar rickarkin avatar roberthauck avatar samsellem avatar shutter avatar steiner- avatar tribal-tec avatar whimlex avatar wueest avatar yarda 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

equalizer's Issues

seqPly deadlock on exit

To reproduce: Click in window, press 's' to enable statistics, press 'Esc' to exit. Half of the time the exit deadlocks.

Automatic CPU-GPU affinity

On multi-socket systems, performance may vary widely depending on which core a thread executes:

readback "channel" RGBA/401/101/0 1920x1200: 249MPix/sec (8.80081ms, 113FPS)
readback "channel" RGBA/401/101/1 1920x1200: 243MPix/sec (9.02805ms, 110FPS)
readback "channel" RGBA/401/101/2 1920x1200: 257MPix/sec (8.54776ms, 116FPS)
readback "channel" RGBA/401/101/3 1920x1200: 241MPix/sec (9.10284ms, 109FPS)
readback "channel" RGBA/401/101/4 1920x1200: 263MPix/sec (8.34019ms, 119FPS)
readback "channel" RGBA/401/101/5 1920x1200: 262MPix/sec (8.37638ms, 119FPS)
readback "channel" RGBA/401/101/6 1920x1200: 173MPix/sec (12.6451ms, 79FPS)
readback "channel" RGBA/401/101/7 1920x1200: 173MPix/sec (12.6364ms, 79FPS)
readback "channel" RGBA/401/101/8 1920x1200: 173MPix/sec (12.6432ms, 79FPS)
readback "channel" RGBA/401/101/9 1920x1200: 173MPix/sec (12.6438ms, 79FPS)
readback "channel" RGBA/401/101/a 1920x1200: 175MPix/sec (12.5237ms, 79FPS)
readback "channel" RGBA/401/101/b 1920x1200: 174MPix/sec (12.5634ms, 79FPS)

Provide a, preferably automatic, way to configure CPU affinity. hwloc seems to be the most promising package for this.

AUTO compression type breaks when no compression is used

The default values for _colorCompressor and _depthCompressor in eq/client/frameData.cpp are propagated as-is to the receiver when no compression is used (i.e. bandwidth > 262144). Image::setPixelData fails to alloc a corresponding decompressor and either asserts failure in debug mode or fails to find the image attachment buffers in release mode ("No image attachment buffers to assemble").

Not quite sure how best to fix...

Add isActive() to View

When a configuration has multiple views, the application needs to know which ones are active to decide if a redraw is needed. While this can be achieved already, a convenience function is a good idea.

eqc connections without hostnames

With eqc version 1.2 connections may no longer need a hostname. Test what happens with a hostname-less connection on a render client. Client should listen on INADDR_ANY, use getHostname to find its name and the name should propagate correctly through the peer-to-peer network to allow connections. Alternatively the node's host may be used if the connection hostname is empty?

Implement push-based object distribution

The current object distribution is pull-based, that is, the slave node requests the mapping and with it the instance data of an object. Implement a pull-based model, along these lines:

Channel::frameDraw                                                           
    sendEvent( EVENT_PUSH_SCENE, sceneID, localNodeID )                      

Config::handleEventPushSceneEvent                                            
    _scenePushs[ sceneID ].nodeIDs.push_back( nodeID )                       

Config::frameStart                                                           
    if( !_scenePushs ).empty( ))                                             
        finishAllFrames();                                                   
        for each scene                                                       
            traverse scene top-down or leaf-first                            
                object->push( sceneID, object->getType(), nodeIDs )          

LocalNode::objectPush( objectID, pushID, typeID, ObjectDataIStream )         
    object = Foo::create( typeID );                                          
    object->deserialize( dataIStream, DIRTY_ALL );                           
    // OPT: use mapObjectNB and sync on next frameStart                      
    mapObject( object, objectID, VERSION_NONE );                             

Refactor BitmapFont

The util::BitmapFont interface should stay as is, but the agl/glx/wgl code should be refactored into new classes in the respective eq sub-namespace.

Auto-calculation for initial frustum

Introduce a way to set automatically adapt the initial frustum for a given pixel aspect ratio (default 1) by recomputing the width or height to match this aspect ratio (default quadratic).

Cross-compiling to Windows with MinGW

I'm trying to cross-compile Equalizer for Windows on Ubuntu, using Mingw-cross-env.

There are a few minor problems regarding upper-/lowercase, missing includes, and one clash of a variable name with some header definition. I have a patch that fixes these; I'll try to attach it to this issue (not sure yet how this works on github).

But now I'm stuck with a problem when linking libEqualizerServer:

Linking CXX shared library ../../bin/libEqualizerServer.dll
Creating library file: libEqualizerServer.dll.a
CMakeFiles/lib_EqualizerServer_shared.dir/objects.a(channel.cpp.obj):channel.cpp:(.text$ZN2eq6fabric7ChannelINS_6server6WindowENS2_7ChannelEEC2ERKS5[eq::fabric::Channel<eq::server::Window, eq::server::Channel>::Channel(eq::fabric::Channel<eq::server::Window, eq::server::Channel> const&)]+0x61): undefined reference to vtable for eq::fabric::Object' CMakeFiles/lib_EqualizerServer_shared.dir/objects.a(channel.cpp.obj):channel.cpp:(.text$_ZN2eq6fabric7ChannelINS_6server6WindowENS2_7ChannelEEC1ERKS5_[eq::fabric::Channel<eq::server::Window, eq::server::Channel>::Channel(eq::fabric::Channel<eq::server::Window, eq::server::Channel> const&)]+0x61): undefined reference tovtable for eq::fabric::Object'

I tried to link with eq_fabric to solve this, but I don't know how this works with CMake, and somehow I think that this should not be done anyway.

Martin

load equalizer: Turn off slave nodes for high framerates

Add a new load_equalizer attribute 'destination_only_framerate | AUTO' which deactivates all non-destination children if the total render time does not exceed the given frame time. AUTO uses the vsync rate, which is to be added to the DrawableConfig and queried in the appropriate places.

Add a hysteresis value, e.g, 10%, for switching between the modes (e.g. dest only is activated at 66Hz and deactivated at 54Hz).

zoom readback with FBO

Open issues:

  • make zoom readback work with FBO (see TODOs in image.cpp)
  • optimize zoom readback for FBOs (avoid copyFromFramebuffer)

eqPixelBench crash with double free

System: RHEL 6.1, NV 270.13, 3x GTX580

Local auto-config from master branch - three pipes with one window each

*** glibc detected *** ./debug/bin/eqPixelBench: double free or corruption (!prev): 0x00002abd94421f60 ***
*** glibc detected *** ./debug/bin/eqPixelBench: double free or corruption (!prev): 0x00002abd989a1a90 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x75716)[0x2abd5ded3716]
/usr/lib64/tls/libnvidia-tls.so.270.41.19(+0x8eb)[0x2abd5e1f08eb]

> gdb ./debug/bin/eqPixelBench
(gdb) set env MALLOC_CHECK_ 2
(gdb) run --eq-config local.eqc
(gdb) bt
#0  0x00002aaaadff8a45 in raise () from /lib64/libc.so.6
#1  0x00002aaaadffa225 in abort () from /lib64/libc.so.6
#2  0x00002aaaae03b740 in malloc_printerr () from /lib64/libc.so.6
#3  0x00002aaaaaeb18ff in co::base::Buffer<unsigned char>::clear (
    this=0xbaf938) at /home/test/eile/Equalizer/libs/co/base/buffer.h:55
#4  0x00002aaaaaeb12b2 in co::base::Buffer<unsigned char>::~Buffer (
    this=0xbaf938, __in_chrg=<value optimized out>)
    at /home/test/eile/Equalizer/libs/co/base/buffer.h:51
#5  0x00002aaaaaf2a87b in eq::plugin::CompressorReadDrawPixels::~CompressorReadDrawPixels (this=0xbaf910, __in_chrg=<value optimized out>)
    at /home/test/eile/Equalizer/libs/eq/client/compressor/compressorReadDrawPixels.cpp:273
#6  0x00002aaaaaf2a8fc in eq::plugin::CompressorReadDrawPixels::~CompressorReadDrawPixels (this=0xbaf910, __in_chrg=<value optimized out>)
    at /home/test/eile/Equalizer/libs/eq/client/compressor/compressorReadDrawPixels.cpp:273
#7  0x00002aaaaaf26c96 in EqCompressorDeleteCompressor (compressor=0xbaf910)
    at /home/test/eile/Equalizer/libs/eq/client/compressor/compressor.cpp:101
#8  0x00002aaaac460be8 in co::base::Compressor::reset (this=0x993720)
    at /home/test/eile/Equalizer/libs/co/base/compressor.cpp:55
#9  0x00002aaaac46122a in co::base::Compressor::initCompressor (this=0x993720, 
    name=1033) at /home/test/eile/Equalizer/libs/co/base/compressor.cpp:109
#10 0x00002aaaaaf10617 in eq::util::GPUCompressor::initDownloader (
    this=0x993720, name=1033)
    at /home/test/eile/Equalizer/libs/eq/util/gpuCompressor.cpp:93
#11 0x00002aaaaaeae480 in eq::Image::allocDownloader (this=0x993360, 
    buffer=eq::Frame::BUFFER_COLOR, name=1033, glewContext=0x96af20)
    at /home/test/eile/Equalizer/libs/eq/client/image.cpp:754
#12 0x000000000040d518 in eqPixelBench::Channel::_testFormats (this=0x785530, 
    applyZoom=0.5)
    at /home/test/eile/Equalizer/examples/eqPixelBench/channel.cpp:186

Image compression must be configurable

For tile based rendering, it may be necessary to disable compression for small tiles as it may be not worth it to do so. However, for greater tiles or 2D loadbalancing it should be enabled. So the current implementation that switches compression on or off depending on the link speed has to be changed. Design for this FR pending.

Push packets received in the wrong order

The packets are being received out of order when the global ObjectBufferSize is small compared to the size of the data being transmitted.

Issue is reproducible in co_object_Push test:

  • ObjectBufferSize (global.cpp) is set to 600, instead of regular 60000:
  • Message being transmitted:

static const std::string message = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eget felis sed leo tincidunt dictum eu eu felis. Aenean aliquam augue nec elit tristique tempus. Pellentesque dignissim adipiscing tellus, ut porttitor nisl lacinia vel. Donec malesuada lobortis velit, nec lobortis metus consequat ac. Ut dictum rutrum dui. Pellentesque quis risus at lectus bibendum laoreet. Suspendisse tristique urna quis urna faucibus et auctor risus ultricies. Morbi vitae mi vitae nisi adipiscing ultricies ac in nulla. Nam mattis venenatis nulla, non posuere felis tempus eget. Cras dapibus ultrices arcu vel dapibus. Nam hendrerit lacinia consectetur. Donec ullamcorper nibh nisl, id aliquam nisl. Nunc at tortor a lacus tincidunt gravida vitae nec risus. Suspendisse potenti. Fusce tristique dapibus ipsum, sit amet posuere turpis fermentum nec. Nam nec ante dolor.";

Log output from our tests:

5956 Main ........\libs\co\objectDataOStream.cpp:67 714 packet dt 0 cmd 30 object 383a64098f954f88:214f152247b7d798.4294967293 v1 size 858 seq 0
5956 Rcv class S F:\Equalizer_tribal\libs\co\objectDataIStream.cpp:81 714 packet dt 1 cmd 0 object 383a64098f954f88:214f152247b7d798.4294967293 v1 size 858 seq 0
5956 Main ........\libs\co\objectDataOStream.cpp:67 735 packet dt 0 cmd 30 object 383a64098f954f88:214f152247b7d798.4294967293 v1 size 4 seq 1
5956 Rcv class S F:\Equalizer_tribal\libs\co\objectDataIStream.cpp:81 757 packet dt 1 cmd 0 object 383a64098f954f88:214f152247b7d798.4294967293 v1 size 858 seq 0
5956 Rcv class S F:\Equalizer_tribal\libs\co\objectDataIStream.cpp:81 801 packet dt 1 cmd 0 object 383a64098f954f88:214f152247b7d798.4294967293 v1 size 4 seq 1
5956 Rcv class S F:\Equalizer_tribal\libs\co\objectDataIStream.cpp:81 823 packet dt 1 cmd 0 object 383a64098f954f88:214f152247b7d798.4294967293 v1 size 4 seq 1
5956 Rcv class S F:\Equalizer_tribal\libs\co\objectDataIStream.cpp:85 845 Assert: packet->sequence == 0 , in: backtrace not implemented

Fix texture tile upload

  • re-add assertion in upload plugin
  • move image offset addition from Image::upload to callers (compositor)
  • add image offset only for unzoomed FB upload (aka draw pixels)
  • upload texture images into texture 0,0 and add image offset during quad drawing (should be there already)

assertion failed with 2-node.2D.eqc

happens right after the start on the client eqPly:

Collage.dll!co::base::abort() Line 44 + 0x8 bytes C++
Equalizer.dll!eq::Channel::addStatistic(eq::Event & event={...}, const unsigned int index=1) Line 327 + 0x98 bytes C++
Equalizer.dll!eq::ChannelStatistics::~ChannelStatistics() Line 87 C++
Equalizer.dll!eq::Channel::_cmdFrameTransmitAsync(co::Command & command={...}) Line 1721 + 0x19 bytes C++
Collage.dll!co::CommandFuncco::Dispatcher::operator()(co::Command & command={...}) Line 50 + 0x13 bytes C++
Collage.dll!co::Command::operator()() Line 140 C++
Equalizer.dll!eq::Node::TransmitThread::run() Line 392 + 0xb bytes C++

Add window attribute 'grab keyboard'

Setup: Ubuntu Linux system with a single Geforce 8800 GTX, configured to have two X displays. Two pipes, one windowed on :0.0 to act as controller, one fullscreen on :0.1 to act as display (test setup for a TPD). The configuration file is attached.

When I start eqServer with the given config file followed by starting eqPly I get the setup and behaviour I expect. However, when I change focus to a different window on :0.0, e.g. a Gnome terminal, all keyboard events still gets sent to Equalizer.

The keyboard focus is grabbed for fullscreen windows, since otherwise they would never receive events:

// Grab keyboard focus in fullscreen mode

if( getIAttribute( Window::IATTR_HINT_FULLSCREEN ) == ON )
XGrabKeyboard( display, drawable, True, GrabModeAsync, GrabModeAsync, CurrentTime );

I'll recategorize this as a feature request to have a new window attribute
'grab keyboard'. If it is important to you, please get back to us.

Move swapbarriers out of compounds

Reason: swapbarriers are display-system feature, not rendering logics.

Option 1: Per-canvas swap barrier (SW, HW, OFF)

  • simple, covers 90% of use cases
  • multi-view per-view swap barriers need at least clever automagic code

Option 2: Per-destination channel

  • dest channels are hidden and can't be configured
    o possible to use per-view & segment attr with best-effort logics
  • Flexible

RSP optimization script

Create a script to generate a 3d heightfield plot of:

X: RSP upscale rate
Y: RSP downscale rate
Z/Height: RSP performance

with a configurable number of receivers, to facilitate optimization of the RSP up/downscale rate for a given cluster.

zoom: depth readback does not work

Reading back a depth texture using zoom on the output frame does not work. The step when the frame buffer texture is redrawn zoomed into the FBO does not work, the resulting FBO texture is garbage.

The reason is probably that a depth texture can't directly be used with fixed-function drawing.

Solution 1: copy the depth buffer into a color texture, draw into a color FBO and read this one back
Solution 2: use GLSL like in DB GLSL compositing.

Assertion failed during eqAdmin::removeWindow

the admin objects segment, observer, .. are stil attached to the localnode, thus the assertion fails.

Collage.dll!co::base::abort() Line 45 C++

EqualizerFabric.dll!eq::fabric::Object::~Object() Line 40 + 0xce bytes C++
EqualizerAdmin.dll!eq::fabric::Segmenteq::admin::Canvas,eq::admin::Segment,eq::admin::Channel::~Segmenteq::admin::Canvas,eq::admin::Segment,eq::admin::Channel() Line 51 + 0x24 bytes C++
EqualizerAdmin.dll!eq::admin::Segment::~Segment() Line 41 + 0xa bytes C++
EqualizerAdmin.dll!eq::admin::Segment::`vector deleting destructor'() + 0x7f bytes C++
eqPly.exe!eqAdmin::removeWindow(co::base::RefPtreq::admin::Server * server=0x0000000000a4eee0) Line 175 + 0x45 bytes C++
eqPly.exe!eqPly::Config::_handleKeyEvent(const eq::KeyEvent & event={...}) Line 665 C++
eqPly.exe!eqPly::Config::handleEvent(const eq::ConfigEvent * event=0x0000000023ef6660) Line 389 + 0x19 bytes C++
Equalizer.dll!eq::Config::handleEvents() Line 473 + 0x18 bytes C++
Equalizer.dll!eq::Config::finishFrame() Line 349 C++
eqPly.exe!eqPly::EqPly::run() Line 132 C++
eqPly.exe!main(const int argc=3, char * * argv=0x000000000250d930) Line 84 + 0x15 bytes C++
eqPly.exe!__tmainCRTStartup() Line 586 + 0x19 bytes C
eqPly.exe!mainCRTStartup() Line 403 C

Push packets received in the wrong order

The packets are being received out of order when the global ObjectBufferSize is small compared to the size of the data being transmitted.

Issue is reproducible in co_object_Push test:

  • ObjectBufferSize (global.cpp) is set to 600, instead of regular 60000:
  • Message being transmitted:

static const std::string message = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eget felis sed leo tincidunt dictum eu eu felis. Aenean aliquam augue nec elit tristique tempus. Pellentesque dignissim adipiscing tellus, ut porttitor nisl lacinia vel. Donec malesuada lobortis velit, nec lobortis metus consequat ac. Ut dictum rutrum dui. Pellentesque quis risus at lectus bibendum laoreet. Suspendisse tristique urna quis urna faucibus et auctor risus ultricies. Morbi vitae mi vitae nisi adipiscing ultricies ac in nulla. Nam mattis venenatis nulla, non posuere felis tempus eget. Cras dapibus ultrices arcu vel dapibus. Nam hendrerit lacinia consectetur. Donec ullamcorper nibh nisl, id aliquam nisl. Nunc at tortor a lacus tincidunt gravida vitae nec risus. Suspendisse potenti. Fusce tristique dapibus ipsum, sit amet posuere turpis fermentum nec. Nam nec ante dolor.";

Log output from our tests:

5956 Main ........\libs\co\objectDataOStream.cpp:67 714 packet dt 0 cmd 30 object 383a64098f954f88:214f152247b7d798.4294967293 v1 size 858 seq 0
5956 Rcv class S F:\Equalizer_tribal\libs\co\objectDataIStream.cpp:81 714 packet dt 1 cmd 0 object 383a64098f954f88:214f152247b7d798.4294967293 v1 size 858 seq 0
5956 Main ........\libs\co\objectDataOStream.cpp:67 735 packet dt 0 cmd 30 object 383a64098f954f88:214f152247b7d798.4294967293 v1 size 4 seq 1
5956 Rcv class S F:\Equalizer_tribal\libs\co\objectDataIStream.cpp:81 757 packet dt 1 cmd 0 object 383a64098f954f88:214f152247b7d798.4294967293 v1 size 858 seq 0
5956 Rcv class S F:\Equalizer_tribal\libs\co\objectDataIStream.cpp:81 801 packet dt 1 cmd 0 object 383a64098f954f88:214f152247b7d798.4294967293 v1 size 4 seq 1
5956 Rcv class S F:\Equalizer_tribal\libs\co\objectDataIStream.cpp:81 823 packet dt 1 cmd 0 object 383a64098f954f88:214f152247b7d798.4294967293 v1 size 4 seq 1
5956 Rcv class S F:\Equalizer_tribal\libs\co\objectDataIStream.cpp:85 845 Assert: packet->sequence == 0 , in: backtrace not implemented

3-window.monitor crashes on Windows 7 on exit

The GLEWContext used to create an FBO is no longer valid. Crashes with the following stack trace:

Equalizer.dll!eq::util::FrameBufferObject::exit()  Line 124 + 0x14 bytes C++
Equalizer.dll!eq::util::ObjectManager<void const * __ptr64>::deleteAll()  Line 195 C++
eqPly.exe!eqPly::VertexBufferState::deleteAll()  Line 190 + 0x32 bytes C++
eqPly.exe!eqPly::Window::configExitGL()  Line 105 C++
Equalizer.dll!eq::Window::configExit()  Line 475 + 0x13 bytes C++
Equalizer.dll!eq::Window::_cmdConfigExit(co::Command & command={...})  Line 733 + 0x19 bytes C++
Collage.dll!co::CommandFunc<co::Dispatcher>::operator()(co::Command & command={...})  Line 51 C++
Collage.dll!co::Command::invoke()  Line 140 C++
Equalizer.dll!eq::Pipe::_runThread()  Line 234 + 0xb bytes C++
Equalizer.dll!eq::Pipe::PipeThread::run()  Line 423 + 0x31 bytes C++
Collage.dll!co::base::Thread::_runChild()  Line 135 C++
Collage.dll!co::base::Thread::runChild(void * arg=0x0000000002411100)  Line 109 C++
pthread.dll!ptw32_threadStart(void * vthreadParms=0x0000000002411910)  Line 219 + 0x9 bytes C

Extend statistics with x/y time plot

Plot a per-entity graph over a longer time period (one pixel per frame) to show the statistics over a longer time. Also create one graph with aggregate statistics. See OpenSceneGraph statistics for an example.

Generalize early image transmission

The tile implementation transmits all new images after a tile draw as an optimization. Generalize this feature for all readbacks by letting the transmit thread observe the frame data:

transmit thread:
    foreach transmit task
        wait for new image or ready on framedata
        if( new image ) transmit image
        else if( ready ) send ready; end task

pipe thread:
    _cmdFrameReadback()
        readback();
        set all frames ready()
    _cmdFrameTiles()
        while( tiles )
              .... readback tile...
        set all frames ready()

Assertion failed during eqAdmin::removeWindow for passive stereo windows

Similar to the previous issue, but now with passive stereo windows.

Collage.dll!co::base::abort()  Line 45  C++
EqualizerFabric.dll!eq::fabric::Object::~Object()  Line 40 + 0xce bytes C++
EqualizerServer.dll!eq::fabric::Segment<eq::server::Canvas,eq::server::Segment,eq::server::Channel>::~Segment<eq::server::Canvas,eq::server::Segment,eq::server::Channel>()  Line 51 + 0x24 bytes   C++
EqualizerServer.dll!eq::server::Segment::~Segment()  Line 78 + 0x3b bytes   C++
EqualizerServer.dll!eq::server::Segment::`scalar deleting destructor'()  + 0x31 bytes   C++
EqualizerServer.dll!eq::server::NodeFactory::releaseSegment(eq::server::Segment * segment=0x0000000015282b60)  Line 67 + 0x58 bytes C++
EqualizerServer.dll!eq::fabric::Canvas<eq::server::Config,eq::server::Canvas,eq::server::Segment,eq::server::Layout>::release(eq::server::Segment * segment=0x0000000015282b60)  Line 190 + 0x44 bytes  C++
EqualizerServer.dll!eq::fabric::Canvas<eq::server::Config,eq::server::Canvas,eq::server::Segment,eq::server::Layout>::~Canvas<eq::server::Config,eq::server::Canvas,eq::server::Segment,eq::server::Layout>()  Line 54  C++
EqualizerServer.dll!eq::server::Canvas::~Canvas()  Line 51 + 0xa bytes  C++
EqualizerServer.dll!eq::server::Canvas::`scalar deleting destructor'()  + 0x31 bytes    C++
EqualizerServer.dll!eq::server::Config::_deleteEntities<eq::server::Canvas>(const std::vector<eq::server::Canvas *,std::allocator<eq::server::Canvas *> > & entities=[2](0x00000000026b9960 {_state=STATE_RUNNING _private=0xcdcdcdcdcdcdcdcd },0x00000000152b0360 {_config=0x00000000026a7b40 _data={...} _backup={...} ...}))  Line 711 + 0x30 bytes  C++
EqualizerServer.dll!eq::server::Config::_updateRunning()  Line 527  C++
EqualizerServer.dll!eq::server::Config::_cmdUpdate(co::Command & command={...})  Line 1021 + 0xd bytes  C++
Collage.dll!co::CommandFunc<co::Dispatcher>::operator()(co::Command & command={...})  Line 51   C++
Collage.dll!co::Command::operator()()  Line 142 C++
EqualizerServer.dll!eq::server::Server::handleCommands()  Line 241 + 0xb bytes  C++
EqualizerServer.dll!eq::server::Server::run()  Line 178 C++
EqualizerServer.dll!`anonymous namespace'::ServerThread::run()  Line 54 C++

Dynamic DB support for eVolve

eVolve uses one texture for the given range. With the support for DB load-balancing, some changes are necessary.

I think the following approach would be good:

  • brick the full volume into smaller bricks, e.g., 32^3 (or whatever is best from a GPU caching perspective)
  • use the DB-range to select the bricks to render. This involves some rounding/granularity, much like eqPly
  • lazily crate the 3D textures for the bricks

Reliability outstanding tasks

  • Client::_servers.erase() is missing somewhere
  • in Client::stopNodes, iterate over all entities (servers/configs) or ideally identify the failed one
  • disconnects may be normal due to layout change: really need to identify abnormal disconnect.

Implement QtWindow

Implement a SystemWindow based on Qt, which is build automatically when Qt is installed on the system. AppNode windows should use QtWindow as an SystemWindow by default when available.

Review transmit task on server

The receiving nodes of a FrameData are now part of the 'output' FrameData, this making the explicit transmit task redundant. Closely related to issue #32. Either send a transmit task in all cases, including tiles, to the transmit thread, or send no transmit task and let the client channel handle it.

Parsing configuration files is locale-dependent and fails in some locales

Alexey Osipov discovered that the parsing of configuration files depends on the locale and may fail in some locales.

This probably only affects programs with native language support, i.e. programs that use 'setlocale(LC_ALL, "")'. One example is Bino:

LANG=C bino -o equalizer --eq-config 2-window-narrow.2D.eqc video.avi
works fine, but
LANG=de_DE.UTF-8 bino -o equalizer --eq-config 2-window-narrow.2D.eqc video.avi
fails with the message
8853 Main loader.l:44 1 Parse error: 'No channel for the given view and segment', line 40 at ')' from

This is probably due to the fact that de_DE (and others) use a comma instead of a decimal point.

The LANG=C workaround is reported to fix the issues listed in this thread:
http://software.1713.n2.nabble.com/Config-does-not-work-EQ-1-0-1-td6944693.html;cid=1321099535638-496

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.