{"id":25569377,"url":"https://github.com/riccardobl/jme-effekseerNative","last_synced_at":"2026-03-19T12:30:18.321Z","repository":{"id":83709957,"uuid":"295132574","full_name":"riccardobl/jme-effekseerNative","owner":"riccardobl","description":"This is a library that uses EffekseerForMultiLanguages to load and render effects made with Effekseer in jme.","archived":false,"fork":false,"pushed_at":"2023-12-01T22:50:05.000Z","size":4363,"stargazers_count":13,"open_issues_count":1,"forks_count":6,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-02-09T18:52:10.964Z","etag":null,"topics":["effekseer","jmonkeyengine","particles"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/riccardobl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-09-13T11:00:02.000Z","updated_at":"2025-02-01T06:19:29.000Z","dependencies_parsed_at":"2024-10-29T01:15:30.042Z","dependency_job_id":null,"html_url":"https://github.com/riccardobl/jme-effekseerNative","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riccardobl%2Fjme-effekseerNative","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riccardobl%2Fjme-effekseerNative/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riccardobl%2Fjme-effekseerNative/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riccardobl%2Fjme-effekseerNative/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/riccardobl","download_url":"https://codeload.github.com/riccardobl/jme-effekseerNative/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239933080,"owners_count":19720728,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["effekseer","jmonkeyengine","particles"],"created_at":"2025-02-21T00:02:20.650Z","updated_at":"2026-03-19T12:30:18.244Z","avatar_url":"https://github.com/riccardobl.png","language":"Java","funding_links":[],"categories":["Effects"],"sub_categories":[],"readme":"# Effekseer Native for JME\n\nThis is a library that uses [EffekseerForMultiLanguages](https://github.com/effekseer/EffekseerForMultiLanguages) to load and render effects made with Effekseer in jme.\n\nSupported platforms:\n- Windows 64bit\n- Linux 64bit\n\nMissing features:\n- Sounds\n\n## Gradle coordinates (github packages)\n```gradle\nplugins {\n    id \"io.github.0ffz.github-packages\" version \"1.2.1\"\n}\n\nrepositories {\n    maven githubPackage.invoke(\"riccardobl\")\n}\n\ndependencies {\n    implementation 'wf.frk:jme-effekseer-native:0.4'\n}\n\n```\n\n\n## Usage - Managed Rendering\n\nFor infos regarding version to version upgrade see [docs/UPGRADE.md](docs/UPGRADE.md)\n\n```java\n// Add a filter post processor to your viewPort\n// optional:\n//   if the FilterPostProcessor is created, EffekseerRenderer will attach itself as a filter\n//   otherwise it will be attached as a scene processor.\n//   Note: if a FilterPostProcessor is used in the viewport, EffekseerRenderer must be called before \n//         attaching any other filter, becoming defacto the first filter to be attached to the FilterPostProcessor\nFilterPostProcessor fpp=new FilterPostProcessor(assetManager);\nviewPort.addProcessor(fpp);\n\n// Add Effekseer Renderer\nEffekseerRenderer effekseerRenderer=EffekseerRenderer.addToViewPort(stateManager, viewPort, assetManager, settings.isGammaCorrection());\n        \n// Load an effect\nEffekseerEmitterControl effekt=new EffekseerEmitterControl(assetManager,\"effekts/Pierre/Lightning.efkefc\");\n\n// Set a driver (optional)\neffekt.setDriver(\n    new EffekseerEmissionDriverGeneric()\n        .shape(new EffekseerPointFollowingSpatialShape())\n        .spawner(new EffekseerGenericSpawner().loop(true).delay(1f,2f, 1f).maxInstances(1000))\n        .dynamicInputSupplier(new EffekseerGenericDynamicInputSupplier().set(0,10f).set(1,11f))\n);\n\n// Attach to a spatial\nNode n=new Node();\nn.addControl(effekt);\n\nrootNode.attachChild(n);\n\n```\n\n## Advanced Usage - Manual Rendering\nThis is intended to be used on custom render pipelines or offscreen rendering\n```java\n// Init Effekseer\nboolean isSRGB=true;\nEffekseer.init(assetManager,isSRGB);\n\n// Update logic: This needs to be called in your update loop (once per frame)\nEffekseer.update( tpf);\n\n// --- Render scene 1\n// Select the scene to render\nEffekseer.beginRender(root1);\n\n// Render\nEffekseer.render(\n\tRenderer gl, /* The opengl renderer */\n\tCamera cam, /* The scene camera */\n\tFrameBuffer target, /* The render target */\n\tTexture2D color, /* The current scene, used for distortions  (null to disable distortions) */\n\tTexture2D depth, /* The depth of the current scene, used for soft particles (null to disable soft particles) */\n\tboolean isOrthographic /* true if rendering in orthographic mode */\n);\n\n// End the render\nEffekseer.endRender();\n\n// --- Render scene 2\n// Select the scene to render\nEffekseer.beginRender(root2);\n\n// Render\nEffekseer.render(\n\tRenderer gl, /* The opengl renderer */\n\tCamera cam, /* The scene camera */\n\tFrameBuffer target, /* The render target */\n\tTexture2D color, /* The current scene, used for distortions  (null to disable distortions) */\n\tTexture2D depth, /* The depth of the current scene, used for soft particles (null to disable soft particles) */\n\tboolean isOrthographic /* true if rendering in orthographic mode */\n);\n\n// End the render\nEffekseer.endRender();\n\n```\n\nNote: opengl cannot read and write on the same buffer, this means that depth and colors that come from the same target framebuffer have to be copied.\nThe following helper utility can be used to do it in a reasonably fast way:\n```java\nFrameBufferCopy copiedFb=EffekseerUtils.copyFrameBuffer(\n\tAssetManager am, /* the asset manager */\n\tRenderManager rm, /* the render manager */\n\tFrameBuffer source, /* source */\n\tint width, /* width */\n\tint height, /* height */\n\tboolean copyColor, /* true to copy the color buffer */\n\tboolean colorTarget, /* which target to copy (0=first) */\n\tboolean copyDepth /* true to copy the depth buffer*/\n);\n```\n\n## Limitations with particles on the GUI\nThere is an issue with depth sorting when using *Managed Rendering* to render inside the SimpleApplication's guiViewPort: the particles will always be rendered on top. Finding a generic workaround for this issue is pretty complex due to the way the engine handles the guiViewPort. A possible solution is to use *Advanced Usage - Manual Rendering* to render a special root node containing only \"gui particles\" on top of the main framebuffer using an appropriate Camera.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Friccardobl%2Fjme-effekseerNative","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Friccardobl%2Fjme-effekseerNative","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Friccardobl%2Fjme-effekseerNative/lists"}