Kodi Community Forum
fishBMC - Printable Version

+- Kodi Community Forum (http://forum.kodi.tv)
+-- Forum: Development (/forumdisplay.php?fid=32)
+--- Forum: Visualization and Screensaver Development (/forumdisplay.php?fid=38)
+--- Thread: fishBMC (/showthread.php?tid=90686)

Pages: 1 2 3 4 5 6


fishBMC - idefixs - 2011-01-16 01:00

Hi all!

I have started porting my sound visualisation program "fische" to XBMC. There's a first screenshot at http://26elf.at.
However, there's one question that immediately arises: how can I get a higher framerate?
CPU is at 12 percent, framerate around 10 per second, no (intentional) delays in my code


- topfs2 - 2011-01-16 01:18

Impossible to answer that without the code and the hardware and OS you are developing it on/for.

I'd suggest reading up on optmization tricks for OpenGL / DirectX / OpenGLES


- jme - 2011-01-16 12:20

Looks nice!

Do you have a multicore cpu? 12% might not seem like much but if you have 8 cores or 4 cores with hyper threading enabled your actually maxing your cpu in a single threaded application. So you need to do cpu optimization or add support for multithreading.

If cpu doesnt seem to be a problem. Try disabling your blending. Does that have a high impact on the frame rate. Blending is very slow so it might and you seem to do a lot of it. Then you can try to disable other parts of the visualizer one at a time and see how the frame rate changes to pinpoint the cause. But looking though some GPU optimization guides is a good idea since there can be a lot of different bottlenecks (pixelshader, vertexshader, fillrate, texture bandwidth to name just a few). Nvidia has some good tools for it if you have a nvidia card. Not sure how well they work in XBMC though.


- idefixs - 2011-01-16 13:43

Thanks you for your advice. All CPU intensive operations are multi-threaded (i.e. 4 threads on my 4-core CPU). I will be looking into OpenGL optimisations.
Here's the code that matters:
Code:
    glEnable (GL_BLEND);
    glEnable (GL_TEXTURE_2D);
    glDisable (GL_DEPTH_TEST);

    glMatrixMode (GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    glOrtho (-1, 1, -1, 1, -1, 1);

    glMatrixMode (GL_MODELVIEW);
    glPushMatrix();
    glLoadIdentity();
    
    glPolygonMode (GL_FRONT, GL_FILL);

    glBindTexture (GL_TEXTURE_2D, fishbmc_texture);

    // get a lock on the texture pixels
    while (!screenbuffer->lock())
        usleep (1);
    
    // update texture
    glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, configuration->width(), configuration->height(), GL_RGBA, GL_UNSIGNED_BYTE, pixels);
    
    screenbuffer->unlock();

    glBegin (GL_QUADS);
    glTexCoord2f (fishbmc_left, 0.0f);     glVertex3f (-1.0f, -1.0f, 1.0f);
    glTexCoord2f (fishbmc_right, 0.0f);    glVertex3f (1.0f, -1.0f, 1.0f);
    glTexCoord2f (fishbmc_right, 1.0f);    glVertex3f (1.0f, 1.0f, 1.0f);
    glTexCoord2f (fishbmc_left, 1.0f);    glVertex3f (-1.0f, 1.0f, 1.0f);
    glEnd();

    glPopMatrix();
    glMatrixMode (GL_PROJECTION);
    glPopMatrix();



- idefixs - 2011-01-16 13:47

Disregard all after good morning...

The bad frame rates were caused by pulseaudio running. Works flawlessly without.


- crash123 - 2011-01-17 03:19

Looks good. Keep up the good work, i'm looking forward to it.


- spiff - 2011-01-17 10:28

neat. looks like it's just a quad so maybe some helpful chaps in here can port to dx as well..


- idefixs - 2011-01-17 15:02

spiff Wrote:neat. looks like it's just a quad so maybe some helpful chaps in here can port to dx as well..

Shouldn't be any problem at all. Just a textured rectangle, nothing else.


- idefixs - 2011-01-17 15:03

I noticed the "SetSetting" function never gets called - is this normal (and if so, what do I do instead to let the user choose parameters) or have I missed something?


more screenshots - idefixs - 2011-01-17 17:17

I have posted some more screenshots at 26elf.at


- Clumsy - 2011-01-17 17:34

Looks cool, looking forward to it !


pre-release - idefixs - 2011-01-17 22:47

--OUTDATED-- --OUTDATED-- --OUTDATED-- --OUTDATED-- --OUTDATED-- --OUTDATED--
You can download fishBMC sources from: fishBMC-3.2.0.tar.gz

So far it's an "experts only" release, but I'll try to make installation more user friendly.


Another question - idefixs - 2011-01-18 16:01

In addon.xml, I can specify library_linux, library_osx, and so on...
BUT: How do I tell the system which bitness to use? Do I have to create two addon packages for 64/32bit?


fishBMC Add-On - idefixs - 2011-01-18 18:22

I have made an Add-On available here: 32bit 64bit
There's also a repo available here

ATTENTION: So far, only Linux 64-bit is tested. If you have success on other platforms, let me know.


- alanwww1 - 2011-01-19 19:08

idefixs Wrote:I noticed the "SetSetting" function never gets called - is this normal (and if so, what do I do instead to let the user choose parameters) or have I missed something?

Hello Idefixs !

I made the latest Refactor of ProjectM, Milkdrop settings handling. I can help you if you have any question regarding this.

I can tell that the SetSetting() function is get called each time when the visualization starts multiple times going through all settings you have in settings.xml. And of course when any setting is changed in GUI. For example if you check opengl spectrum's code

https://github.com/xbmc/xbmc/blob/master/xbmc/visualizations/OpenGLSpectrum/opengl_spectrum.cpp#L354

this function gets called 3 times with *strSetting values "mode", "bar_height", "speed" and their values in "value".

Note that the visualization gets stopped and restarted with screen changes.

There is even the possibility now that the visualization can save its own state like used preset, preset locked status. You can see this for example at Milkdrop code:

https://github.com/xbmc/xbmc/blob/master/xbmc/visualizations/Milkdrop/MilkdropXBMC.cpp#L265

If you have any questions regarding this, just ask. Cheers, Alan