(8 replies, posted in Editor)

Yes, I have test android build, but it's not done yet, mainly in the file access I think.
I don't know how to embed and access file in Android from Android NDK.


(8 replies, posted in Editor)

Your welcome, glad to help.
Want to develop android build?


(8 replies, posted in Editor)

Do you want me to merge some code? What kind of features do you want?

Just noticed built-in script editor, cool.


(22 replies, posted in Off-Topic)

Great, I will fork from your repository and make some pull request later.


(22 replies, posted in Off-Topic)

That's cool, even though I know nothing about voronoi big_smile
So, anything can be compiled with emscripten or there are some adjustment to make it work?


(22 replies, posted in Off-Topic)

Hmm, I don't know if the compiler could do auto compile to SSE instructions. What compiler flags should I use? Or it's on by default?

It's a great then big_smile
Nice info. Thanks.


(22 replies, posted in Off-Topic)

Great, looks like an optimized code.
I still think to implement SSE function for matrix or vector math function though.
It won't be portable, but it will cut down the number of instruction.


(22 replies, posted in Off-Topic)

It's great if we can add voxel renderer in current engine, so user can choose FixedRenderer, StandardRenderer, VoxelRenderer, and maybe DeferredRenderer later.

I don't understand how your code works smile, I'll look some reference to implement voxel based renderer which is compatible to CPU rendering then.


(22 replies, posted in Off-Topic)

Did you mean voxel based rendering? It's cool if we could create voxel based game engine, but I don't know anything about it yet. If you have a specific plan for voxel based rendering, just let me know.
We can't combine the current code and we have to start from scratch if we want to implement it, because it's different on every aspect though.

After a bit of googling it looks promising for the future, as it can perform real time ray tracing, but I concern about sparse voxel octree creation per frame if we want dynamic scene, and there isn't many resource out there for further implementation, so this is required much research.

This is interesting and can make Maratis unique from others I think.


(22 replies, posted in Off-Topic)

I'd tried both of SDL2 and GLFW, but it's not a class so the function name conflict to each other.

Why do you have interest in software rendering? Currently many of them are used for fallback mode. It's different if you want non realtime rendering.

OpenCL can be used together with OpenGL also, they can share GPU memory through interoperability, I'd used it for post processing, although it can achieved by fragment shader, just for testing purpose.

Deferred rendering used to decoupling object(n) and light(m), so instead of we calculate n*m per frame, it can be n+m, hence we can use hundred of light in a scene, but still not all of them can have shadow, because shadow calculation is quite expensive. Deferred rendering also has advantageous like post processing such as blur, DOF, tone mapping, glow, flare, etc. But it has a problem for transparent object, so they need different process and if in standard rendering we could use many shader for each object, we can't do this in deferred rendering.

The process, first we draw all object color/albedo, normal, and depth (probably specular coef, IOR, roughness, etc we like) into separate texture using one frame buffer (usually named gbuffer), usually we can compact into different channel on one texture, like normal map using rgb channel, and roughness value into alpha channel.
Then we process this textures for every light into light buffer if we want some post process later or draw directly to screen.

Physically based shading is similar to standard shading such as lambertian model for diffuse shading and blinn-phong for specular shading, but physically based shading using more accurate rendering equation, it's approximately equal to what light actually does, so the result can be more natural. This can be achieved in fragment shader using additional material parameter like roughness and IOR, it's more expensive though. CMIIW smile


(22 replies, posted in Off-Topic)

Thanks for explanation, it is good to know that you have a plan for this engine.

I did successfully compile on Linux, Mac OSX (using hackintosh big_smile), Windows (MinGW GCC Compiler), Android and iOS.
It's working on Linux and Mac OSX, but crash on Windows and Android at glLinkProgram (some of your shader code in Standard Renderer), it did not crash if I comment "addFx" on shader1-8 code, but on Android version I only got a gray window (from glClear I think), I don't know it's because I didn't embed the assets, because I don't know how to do it big_smile, or the window didn't swap the buffer. It was become harder on iOS version, I managed to compile and installed on devices, but it crash immediately when I open the app.

By plan to implement OpenCL or Cuda, do you want to focus on desktop?
If yes, then it's good to keep GLFW than SDL2 I think.

I've tried deferred rendering and physically based shading, but I haven't process transparent object and light didn't have the shadow at the moment, it's hard to implement CSM for me. At some point maybe I try to implement global illumination using LPV, and it can use your OpenCL implementation for cell generation.

If you already push the code to github, I'll fork and make some pull request to merge the features.


(22 replies, posted in Off-Topic)

Hi Anael, any news regarding github migration?

I know, there is already free AAA engine right now, and maybe more on later, and there is plenty of promising new engine like godot engine, openfl, etc with their near complete feature for production and easiness to use. So do you have any plan or a state of this engine?
Maybe if you have a roadmap or so, you can share with us, so if there is someone who like to contribute they can do the milestone.


(22 replies, posted in Off-Topic)

Google has announced today they're shutting down Google Code.[1]

So, maratis repository on google code should be migrate to github?

more on: http://google-opensource.blogspot.com/2 … -code.html

[1] http://www.phoronix.com/scan.php?page=n … tting-Down


(0 replies, posted in Engine)

I just tried to porting ManualUse example into experimental branch, and bullet too as dependency.
I think it's quiet good as it is an early build. Here is my performance result :

Experimental (800x600)
* vsync on:
  - fps: 60
  - frame time: 16.6667ms
  - cpu usage: 13.3% - 14.6%

* vsync off:
  - fps: 561 - 572
  - frame time: 1.7482ms - 1.7825ms
  - cpu usage: 39.5% - 41.5%

Trunk (original 800x400)
* vsync on:
  - cpu usage: 17.6% - 22.2%
    * unstable, first start with 92.3% - 97.5%, 10 secs later decline gradually until quiet stable, sometimes can rise again up to 30%+.

* vsync off:
  - cpu usage: 95.0% - 97.1%

Trunk (modified - draw every frame 800x600)
* vsync on:
  - fps: 60
  - frame time: 16.6667ms
  - cpu usage: 19.3% - 20.3%

* vsync off:
  - fps: 508 - 531
  - frame time: 1.8832ms - 1.9685ms
  - cpu usage: 63.5% - 64.2%

My laptop specs:
- Intel Core i3-2330M @ 2.2Ghz
- Intel HD Graphics 3000
- Ubuntu 14.04 LTS x86_64
- Mesa 10.3 (Intel Open Source)

The ManualUse experimental test and bullet libs are just quick porting, I do not optimize or check for memory leaking, or etc that may be missing and cause an error. Hence this performance result may be wrong.

CPU usage unstable at the original version, I don't know why, or it's just me.

The changes at modified trunk version:
- resolution 800x600
- fps counter
- comment "don't wait too much" block
- draw every update (comment "if (steps > 0)" line)

I turn on and off vsync using "vblank_mode=0"

Looking forward experimental branch to be main branch and stable big_smile
Good luck devs smile



(1 replies, posted in General)

What the needed of Z pre-pass?
Is it just for occlusion query?

I got 210 FPS in demo ManualUse,
and after I modify MStandardRenderer.cpp to skip Z pre-pass processing, I got 310 FPS.

Query is expensive in OpenGL I think.
This is useful to reduce draw, but the checking process also takes time.
Or I'm missing something?

Thank you.

(Sorry for English)


(2 replies, posted in Gossip)

I think I want to modify Maratis freely, so I will clone it to github.

Thank you.

add link https://github.com/jurgel/maratis


(2 replies, posted in Gossip)


Can I fork Maratis source code from googlecode(svn) to bitbucket/github(git)?
I need to modify some Maratis source and keep synchronised with Maratis development.

Thank you.



(1 replies, posted in Bug report)

I have some scene that each of them have a script,
in every script, there's several function that is same each other, so I move them and make a new lua file, then call it with dofile("function.lua") in every script that needed this function.
But it's failed, the function never being called.

A simple test case,
I have 2 scene, let's call them scene A and B,
and I have 3 script, script A for scene A, script B for scene B, and script C is called by script A and B.

for example:

script A wrote:


script C wrote:


The result should be print "test", but it's not happen.
Is this a bug?


(7 replies, posted in Bug report)

Just to make it sure, do you have gcc?
or install build-essential?

wow, strange, it's works.
all sound works flawlessly.
thank you very much.

The error must be from my machine library when compiling.
I don't know what make it error.

Problem solved.
Thank you again smile

Oh, so there is already a plan to able to get objects from other scenes, currently I just able to get objects from HUD Layer.
I'll look for next release smile

Thank you for a time to check compilation on linux.

btw, if you want to look at my code, here it's, it's just MSDK and Maratis folder,
and I'm edit from Nistur build.

Ahh, my mistake, I didn't realize that it's unsigned int, so it can't be negative. Many thanks.

It's just like tutorial "How to create game interface" that you make, but I embed it in MGame, I've edit MLevel and MScript, and so MaratisEditor.
So if I create new project, the default created scene is Scene-1 and HUD Layer, if open from older project, just add new scene named "HUD Layer", so that layer objects are shareable and controlable from currentScene (ex. Scene-1), so you don't need to create c++ file to make game interface, and the good thing is you can share/control any objects in HUD Layer from currentScene script.

yes I am,
I've remove libsndfile-devel from my system.

I had try compile Maratis to debug,
and here it's

#0  0x080d91d5 in M_SFRead (ptr=0x8d75b60, count=12, user_data=0x0)
    at Maratis/Common/MLoaders/MSndFileLoader.cpp:57
#1  0x001bb568 in psf_fread (ptr=0x8d75b60, bytes=1, items=12, psf=0x8d6c830)
    at file_io.c:321
#2  0x001b988c in header_read (psf=0x8d6c830, ptr=<optimized out>, bytes=12)
    at common.c:817
#3  0x001ba1a9 in psf_binheader_readf (psf=0x8d6c830, format=0x1e46fe "b")
    at common.c:1039
#4  0x00191aed in guess_file_type (psf=0x8d6c830) at sndfile.c:2312
#5  0x0019778b in psf_open_file (psf=0x8d6c830, sfinfo=0xbfffe1c8)
    at sndfile.c:2671
#6  0x00198704 in sf_open_virtual (sfvirtual=0xbfffe1e0, mode=16,
    sfinfo=0xbfffe1c8, user_data=0x8eecc00) at sndfile.c:397
#7  0x080d92be in M_loadSound (
    filename=0x8ed1330 "/home/jurgel/Downloads/Maratis-3.02cBeta-Linux_x86-32/Examples/test/sounds/spring.ogg", data=0xbfffe268)
    at Maratis/Common/MLoaders/MSndFileLoader.cpp:82
#8  0x0017c978 in MDataLoader::loadData (this=0x172d34,
    filename=0x8ed1330 "/home/jurgel/Downloads/Maratis-3.02cBeta-Linux_x86-32/Examples/test/sounds/spring.ogg", data=0xbfffe268)
    at MSDK/MCore/Sources/MDataLoader.cpp:74
#9  0x0015dfb6 in MSoundRef::update (this=0x8eb83c8)
    at MSDK/MEngine/Sources/MSoundRef.cpp:68
---Type <return> to continue, or q <return> to quit---
#10 0x0014397d in MLevel::loadSound (this=0x8813e08,
    filename=0xbfffe504 "/home/jurgel/Downloads/Maratis-3.02cBeta-Linux_x86-32/Examples/test/sounds/spring.ogg", preload=true)
    at MSDK/MEngine/Sources/MLevel.cpp:256
#11 0x080d7a88 in M_loadLevel (
    filename=0x8acaf04 "/home/jurgel/Downloads/Maratis-3.02cBeta-Linux_x86-32/Examples/test/levels/test.level", data=0x8813e08, clearData=true)
    at Maratis/Common/MFileManager/MLevelLoad.cpp:644
#12 0x080d747a in xmlLevelLoad (
    filename=0x8acaf04 "/home/jurgel/Downloads/Maratis-3.02cBeta-Linux_x86-32/Examples/test/levels/test.level", data=0x8813e08)
    at Maratis/Common/MFileManager/MLevelLoad.cpp:470
#13 0x0017c978 in MDataLoader::loadData (this=0x172d70,
    filename=0x8acaf04 "/home/jurgel/Downloads/Maratis-3.02cBeta-Linux_x86-32/Examples/test/levels/test.level", data=0x8813e08)
    at MSDK/MCore/Sources/MDataLoader.cpp:74
#14 0x0808d5ff in Maratis::loadLevel (this=0x83b71e0,
    filename=0x8acaf04 "/home/jurgel/Downloads/Maratis-3.02cBeta-Linux_x86-32/Examples/test/levels/test.level") at Maratis/Editor/Maratis/Maratis.cpp:1114
#15 0x0808d462 in Maratis::loadProject (this=0x83b71e0,
    filename=0xbfffeb34 "/home/jurgel/Downloads/Maratis-3.02cBeta-Linux_x86-32/Examples/test/test.mproj") at Maratis/Editor/Maratis/Maratis.cpp:1062
#16 0x0808d32e in Maratis::okLoadProject (
---Type <return> to continue, or q <return> to quit---
    filename=0xbfffeb34 "/home/jurgel/Downloads/Maratis-3.02cBeta-Linux_x86-32/Examples/test/test.mproj") at Maratis/Editor/Maratis/Maratis.cpp:1028
#17 0x080b0a07 in MaratisUI::fileBrowserEvents (fileBrowser=0x8a42948,
    at Maratis/Editor/Maratis/MaratisUI.cpp:2234
#18 0x080f5c70 in MGuiFileBrowser::fileBrowserOkButtonEvents (button=
    0x8a43958, guiEvents=0xbfffec98)
    at MSDK/MGui/Sources/MGuiFileBrowser.cpp:46
#19 0x080f2fb6 in MGuiButton::onEvent (this=0x8a43958, windowEvent=0xbfffeee8)
    at MSDK/MGui/Sources/MGuiButton.cpp:212
#20 0x080fcc14 in MGuiWindow::internalEvent (this=0x8a42a18,
    windowEvent=0xbfffeee8) at MSDK/MGui/Sources/MGuiWindow.cpp:190
#21 0x080fd59c in MGuiWindow::onEvent (this=0x8a42a18, windowEvent=0xbfffeee8)
    at MSDK/MGui/Sources/MGuiWindow.cpp:391
#22 0x080ef994 in MGui::onEvent (this=0x83b7cc0, windowEvent=0xbfffeee8)
    at MSDK/MGui/Sources/MGui.cpp:194
#23 0x080b2977 in MaratisUI::windowEvents (windowEvents=0xbfffeee8)
    at Maratis/Editor/Maratis/MaratisUI.cpp:2906
#24 0x081047b0 in MWindow::sendEvents (this=0x83b7a20, events=0xbfffeee8)
    at MSDK/MGui/Sources/X11/MX11Window.cpp:329
#25 0x08104a4a in MWindow::onEvents (this=0x83b7a20)
    at MSDK/MGui/Sources/X11/MX11Window.cpp:416
#26 0x080a06d3 in main (argc=1, argv=0xbffff264) at Maratis/Editor/main.cpp:160
(gdb) quit

It's certainly error from libsndfile, I'm use libsndfile from maratis folder.


Ahh, I've some question.
I'd create HUD Layer, and embed it in MGame, so I can scripting easier, I can display and control any object in HUD Layer from current Scene.
I'd test it, and it's works. So, for scripting, every object in each scene have id, right? And I don't want to have same id from current Scene and HUD Layer. So I made every id from HUD Layer to be negative, but it's fail, I think object's id can't be negative, then I try to change every id from HUD Layer + 100 (if id=1 then id=101) and it's works flawlessly.
But I think, I can't create objects from current scene more than 100 to make it different to objects in HUD Layer, so I want to know what is the largest number of objects that I can create, so I can divide it by 2, or any other suggestion?
I can upload soon.

Thank you smile

Codec: Vorbis
Channel: Stereo
Sample rate:44100 Hz
Bitrate: 256 kbps

I also can't play wav format,
I test the example WaterGameDemo and Door(from scripting tutorial)