SW Tracking Report Feature Objectives Overview: Difference between revisions

From JogampWiki
Jump to navigation Jump to search
No edit summary
 
(52 intermediate revisions by 2 users not shown)
Line 1: Line 1:
== High DPI ==
This list exposes building blocks
for potential use and business case scenarios
using Java & JogAmp on Desktop and Embedded Devices.


[{{SERVER}}/bugzilla/showdependencytree.cgi?id=1373&hide_resolved=0 Dependency Tree]
Notably [[#Graph|Graph & Graph UI]] as well as [[#NEWT_+_Wayland|Wayland]] & [[#Vulkan|Vulkan]] support could be of interest here?


<bugzilla>
Also see [[Completed Features Objectives]] ...
    {
 
        "id":["1373"],
= Graph =
        "include_fields":"id,version,product,component,priority,severity,status,summary"
[https://jausoft.com/blog/tag/graph_type_rendering/ Graph/GraphUI Progress Blog Entries]
    }
 
</bugzilla>
== Desired Work Items ==
 
This is an ad-hoc list of desired features and fixes,
which shall result in proper bug-reports soon.
 
After having reached [https://jausoft.com/blog/2024/01/21/graphui-frustum-culling-clipping-modelview-space/ UI usability with widgets and clipping],
the following items are becoming more interesting
 
* Fix general issues with current implementation and API, if any
* Fix Graph rendering bugs (Tessellation)
** [https://jausoft.com/blog/2024/02/13/fixing-jogamps-graph-delaunay-tessellation-of-complex-non-convex-shapes/ First round done]
* Use of super-sized triangles to render Graph lines & curves to allow
** Using a one-pass smooth AA Graph renderer to save resources otherwise used in our pass-2 FBO supersampling renderer
** Generate outlines, i.e. outlined fonts
** Generate special effects like glowing/pumping outlines indicating selection etc
* Allow passing or better attaching per-vertex color to Graph Outline (API)
* <s>Add subtitles in MediaPlayer GraphUI widget</s> ''([https://jausoft.com/blog/2024/02/07/graphui-mediaplayer-feature-complete/ done])''
* Add video encoding in our FFmpeg binding, i.e. an FFMPEGMediaRecorder (Encoding + Multiplexing)
 
Further more, if so desired, a C++ implementation of our Graph + GraphUI framework
may also be of interest.
 
In case any company or organization is interested and likes to support
this work and may also like to receive support in adopting this framework,
please contact [[Maintainer_and_Contacts#Commercial_Support|Göthel Software e.K.]]
 
== OpenJDK Compatibility / Integration ==
 
Objectives should be to allow seamless integration into
OpenJDK's deployment and JVM launch methods.
 
A dual JAR file to be used with and without modules is desired,  
however it seems that certain JAR options are not available with this
configuration if our classes are not build as modules itself.
 
An optional [https://jogamp.org/bugzilla/show_bug.cgi?id=1505#c0 JVM Launch Pad (JLP)] might be helpful,
even though it instructs further complexity and is not helping
with a vanilla OpenJDK deployment.
 
=== OpenJDK >= 11 ===
 
See [https://jogamp.org/bugzilla/show_bug.cgi?id=1404 Bug 1404]
 
'''JVM Commandline Parameter'''


<bugzilla>
Current used 'add-opens' in my JogAmp test scripts for Java >= 11,
    {
covering all AWT utilization including background erase is:
        "blocks":["1373"],
        "include_fields":"id,version,product,component,priority,severity,status,summary"
    }
</bugzilla>


<pre>
--add-opens java.desktop/sun.awt=ALL-UNNAMED
--add-opens java.desktop/sun.awt.windows=ALL-UNNAMED
--add-opens java.desktop/sun.java2d=ALL-UNNAMED
</pre>


== Java 11 ==
=== OpenJDK >= 2x ===


[{{SERVER}}/bugzilla/showdependencytree.cgi?id=1363&hide_resolved=0 Dependency Tree]
See [https://jogamp.org/bugzilla/show_bug.cgi?id=1505 Bug 1505]


<bugzilla>
'''JVM Commandline Parameter'''
    {
        "id":["1363"],
        "include_fields":"id,version,product,component,priority,severity,status,summary"
    }
</bugzilla>


<bugzilla>
Current used 'add-opens' in my JogAmp test scripts for Java >= 23,
    {
covering all AWT utilization including background erase is:
        "blocks":["1363"],
        "include_fields":"id,version,product,component,priority,severity,status,summary"
    }
</bugzilla>


= Graph =
<pre>
--add-opens java.desktop/sun.awt=ALL-UNNAMED
--add-opens java.desktop/sun.awt.windows=ALL-UNNAMED
--add-opens java.desktop/sun.java2d=ALL-UNNAMED
--TO_BE_DETERMINED
</pre>


== Graph UI ==
== Graph UI ==


[{{SERVER}}/bugzilla/showdependencytree.cgi?id=803&hide_resolved=0 Dependency Tree]
[https://jausoft.com/blog/2023/02/22/reimagine-java-on-desktop-bare-metal-devices/ ''Graph UI'' will enable an immersive UI within the 3D scene] on the desktop, mobile and on bare-metal embedded systems without a windowing system.
 
Graph UI utilizes [https://jausoft.com/blog/2011/10/05/jogljogamp-red-square-moscow-nurbs-graphicon2011/ Resolution Independent NURBS Curves Rendering using Programmable Graphics Pipeline], i.e. rendering curves directly on the GPU, resolution independent [ [https://jogamp.org/doc/gpunurbs2011/p70-santina.pdf paper], [https://jogamp.org/doc/gpunurbs2011/graphicon2011-slides.pdf slides] ].


[{{SERVER}}/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&bug_status=CONFIRMED&bug_status=IN_PROGRESS&bug_status=RESOLVED&bug_status=VERIFIED&columnlist=product%2Ccomponent%2Cassigned_to%2Cbug_status%2Cresolution%2Cversion%2Cshort_desc%2Cchangeddate&component=core&component=Plugin&list_id=2265&product=GraphUI&query_format=advanced&resolution=---&resolution=FIXED&resolution=INVALID&resolution=WONTFIX&resolution=DUPLICATE&resolution=WORKSFORME&resolution=MOVED All GraphUI]
This method allows us to have an ultimate fast font and UI rendering engine, suitable for all devices and applications. No CPU based curve nor font pre-rendering (matching a target resolution) is required.


Parent ..
Think of an integrated QT or OpenJFX in your 2D/3D application
working on desktop and embedded devices even w/o any windowing system on top
of a plain console [{{SERVER}}/bugzilla/show_bug.cgi?id=1156  DRM/GBM as support by JOGL(EGL) and NEWT]
as demonstrated [https://ict.zafena.se/improved-graphical-information-technology/ by Xerxes on a Raspberry Pi4].


<bugzilla>
[https://jausoft.com/blog/2023/02/22/reimagine-java-on-desktop-bare-metal-devices/ Reimagine Java on Desktop & Bare-Metal Devices]
    {
demonstrates the updated Graph Curve Rendering and UI, while [https://jausoft.com/blog/2024/01/21/graphui-frustum-culling-clipping-modelview-space/ this update shows clipping and widgets]. [https://jausoft.com/blog/tag/graph_type_rendering/ Further updates will be posted here...].
        "id":["803"],
 
        "include_fields":"id,version,product,component,priority,severity,status,summary"
Notably the ''Graph Curve Rendering'' is almost feature complete, as well as our own user input including gesture detection within NEWT.
    }
</bugzilla>


Child blocking parent
;Parent Main Node
: [{{SERVER}}/bugzilla/showdependencytree.cgi?id=803&hide_resolved=0 Dependency Tree]
: [{{SERVER}}/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&bug_status=CONFIRMED&bug_status=IN_PROGRESS&bug_status=RESOLVED&bug_status=VERIFIED&columnlist=product%2Ccomponent%2Cassigned_to%2Cbug_status%2Cresolution%2Cversion%2Cshort_desc%2Cchangeddate&component=core&component=Plugin&list_id=2265&product=GraphUI&query_format=advanced&resolution=---&resolution=FIXED&resolution=INVALID&resolution=WONTFIX&resolution=DUPLICATE&resolution=WORKSFORME&resolution=MOVED All GraphUI]


;Open Items ''graphui''
<bugzilla>
<bugzilla>
     {
     {
         "blocks":["803"],
         "status":["IN_PROGRESS","CONFIRMED", "UNCONFIRMED"],
        "product":"graphui",
         "include_fields":"id,version,product,component,priority,severity,status,summary"
         "include_fields":"id,version,product,component,priority,severity,status,summary"
     }
     }
</bugzilla>
</bugzilla>


All of product 'graphui'  
;Completed Items ''graphui''
 
<bugzilla>
<bugzilla>
     {
     {
        "status":["RESOLVED","VERIFIED"],
         "product":"graphui",
         "product":"graphui",
         "include_fields":"id,version,product,component,priority,severity,status,summary"
         "include_fields":"id,version,product,component,status,resolution,summary"
     }
     }
</bugzilla>
</bugzilla>
Line 77: Line 126:
[{{SERVER}}/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&bug_status=CONFIRMED&bug_status=IN_PROGRESS&bug_status=RESOLVED&bug_status=VERIFIED&columnlist=product%2Ccomponent%2Cassigned_to%2Cbug_status%2Cresolution%2Cversion%2Cshort_desc%2Cchangeddate&component=graph&list_id=2264&product=Jogl&query_format=advanced&resolution=---&resolution=FIXED&resolution=INVALID&resolution=WONTFIX&resolution=DUPLICATE&resolution=WORKSFORME&resolution=MOVED All Jogl Graph]
[{{SERVER}}/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&bug_status=CONFIRMED&bug_status=IN_PROGRESS&bug_status=RESOLVED&bug_status=VERIFIED&columnlist=product%2Ccomponent%2Cassigned_to%2Cbug_status%2Cresolution%2Cversion%2Cshort_desc%2Cchangeddate&component=graph&list_id=2264&product=Jogl&query_format=advanced&resolution=---&resolution=FIXED&resolution=INVALID&resolution=WONTFIX&resolution=DUPLICATE&resolution=WORKSFORME&resolution=MOVED All Jogl Graph]


;Open Items ''Jogl / graph''
<bugzilla>
<bugzilla>
     {
     {
        "status":["IN_PROGRESS","CONFIRMED", "UNCONFIRMED"],
         "product":"jogl",
         "product":"jogl",
         "component":"graph",
         "component":"graph",
        "include_fields":"id,version,product,component,priority,severity,status,summary"
    }
</bugzilla>
;Completed Items ''Jogl / graph''
<bugzilla>
    {
        "status":["RESOLVED","VERIFIED"],
        "product":"jogl",
        "component":"graph",
        "include_fields":"id,version,product,component,status,resolution,summary"
    }
</bugzilla>
= WebAssembly (wasm) Target Platform =
See [[WebAssembly (wasm) Target Platform]]
= NEWT =
* [{{SERVER}}/bugzilla/showdependencytree.cgi?id=807&hide_resolved=0 Dependency Tree NEWT Input Devices]
* [{{SERVER}}/bugzilla/showdependencytree.cgi?id=814&hide_resolved=0 Dependency Tree NEWT Pointer Event]
<bugzilla>
    {
        "product":["newt","jinput"],
        "version":["2.5.0","3.0.0","tbd"],
         "cf_type":"FEATURE",
         "cf_type":"FEATURE",
         "include_fields":"id,version,product,component,priority,severity,status,summary"
         "include_fields":"id,version,product,component,priority,severity,status,summary"
     }
     }
</bugzilla>
</bugzilla>
= NEWT + Wayland =
Currently NEWT supports the X11/Xorg windowing server on Unix alike platforms.
It might be desired to add direct support to Wayland, as we already added support for
[https://jogamp.org/bugzilla/show_bug.cgi?id=1156 bare metal devices w/o a windowing system via the Linux DRM/GBM console mode]
throughout JOGL + NEWT.


= Vulkan  =
= Vulkan  =
Line 96: Line 180:
</bugzilla>
</bugzilla>


= NEWT =
= Video Encoding/Decoding & Player =
 
Across our releases, we supported video encoding and decoding (with a player)
based on either FFmpeg or Android's library as [https://youtu.be/4gWStKCioi8?t=132 shown in this clip at 2:12 min mark].
 
Goal would be to
* Update general ffmpeg video decoding support
* Enhance ffmpeg video encoding support
* Potentially add better control about video-frame to framebuffer control for editing software


* [{{SERVER}}/bugzilla/showdependencytree.cgi?id=807&hide_resolved=0 Dependency Tree NEWT Input Devices]
See [https://jogamp.org/bugzilla//buglist.cgi?bug_status=__open__&component=video&list_id=3053&product=Jogl related buglist]
* [{{SERVER}}/bugzilla/showdependencytree.cgi?id=814&hide_resolved=0 Dependency Tree NEWT Pointer Event]


<bugzilla>
<bugzilla>
     {
     {
         "product":["newt","jinput"],
         "component":"video",
        "version":["2.5.0","3.0.0","tbd"],
        "cf_type":"FEATURE",
         "include_fields":"id,version,product,component,priority,severity,status,summary"
         "include_fields":"id,version,product,component,priority,severity,status,summary"
     }
     }
</bugzilla>
</bugzilla>
= iOS Enhancements =
Early iOS support has been demonstrated in 2019
* [https://jausoft.com/blog/2019/06/17/jogamp-ios-arm64-bring-up/ iOS Arm64 bring-up]
* [https://jausoft.com/blog/2019/06/23/jogamp-ios-arm64-port-first-visuals/ iOS Arm64 Port: First Visuals]
* [https://jausoft.com/blog/2019/07/08/jogamp-ios-arm64-port-newt/ iOS Arm64 Port: NEWT]
Enhancing this port would allow to use JogAmp in a similar fashion as on Android,
but using an OpenJDK iOS build.


= [[SCC Overview|Source Certification Contract (SCC)]] =
= [[SCC Overview|Source Certification Contract (SCC)]] =
Line 122: Line 221:
     }
     }
</bugzilla>
</bugzilla>
= OpenJFX =
[https://jogamp.org/bugzilla//show_bug.cgi?id=607#c20 Bug report 607] describes different ways to either
* enhance external rendering via JOGL into an OpenJFX UI elements, or
* to replace OpenJFX's Glass w/ NEWT and Prism's OpenGL coding with JOGL


= Misc =
= Misc =

Latest revision as of 08:11, 4 April 2024

This list exposes building blocks for potential use and business case scenarios using Java & JogAmp on Desktop and Embedded Devices.

Notably Graph & Graph UI as well as Wayland & Vulkan support could be of interest here?

Also see Completed Features Objectives ...

Graph

Graph/GraphUI Progress Blog Entries

Desired Work Items

This is an ad-hoc list of desired features and fixes, which shall result in proper bug-reports soon.

After having reached UI usability with widgets and clipping, the following items are becoming more interesting

  • Fix general issues with current implementation and API, if any
  • Fix Graph rendering bugs (Tessellation)
  • Use of super-sized triangles to render Graph lines & curves to allow
    • Using a one-pass smooth AA Graph renderer to save resources otherwise used in our pass-2 FBO supersampling renderer
    • Generate outlines, i.e. outlined fonts
    • Generate special effects like glowing/pumping outlines indicating selection etc
  • Allow passing or better attaching per-vertex color to Graph Outline (API)
  • Add subtitles in MediaPlayer GraphUI widget (done)
  • Add video encoding in our FFmpeg binding, i.e. an FFMPEGMediaRecorder (Encoding + Multiplexing)

Further more, if so desired, a C++ implementation of our Graph + GraphUI framework may also be of interest.

In case any company or organization is interested and likes to support this work and may also like to receive support in adopting this framework, please contact Göthel Software e.K.

OpenJDK Compatibility / Integration

Objectives should be to allow seamless integration into OpenJDK's deployment and JVM launch methods.

A dual JAR file to be used with and without modules is desired, however it seems that certain JAR options are not available with this configuration if our classes are not build as modules itself.

An optional JVM Launch Pad (JLP) might be helpful, even though it instructs further complexity and is not helping with a vanilla OpenJDK deployment.

OpenJDK >= 11

See Bug 1404

JVM Commandline Parameter

Current used 'add-opens' in my JogAmp test scripts for Java >= 11, covering all AWT utilization including background erase is:

--add-opens java.desktop/sun.awt=ALL-UNNAMED 
--add-opens java.desktop/sun.awt.windows=ALL-UNNAMED 
--add-opens java.desktop/sun.java2d=ALL-UNNAMED

OpenJDK >= 2x

See Bug 1505

JVM Commandline Parameter

Current used 'add-opens' in my JogAmp test scripts for Java >= 23, covering all AWT utilization including background erase is:

--add-opens java.desktop/sun.awt=ALL-UNNAMED 
--add-opens java.desktop/sun.awt.windows=ALL-UNNAMED 
--add-opens java.desktop/sun.java2d=ALL-UNNAMED
--TO_BE_DETERMINED

Graph UI

Graph UI will enable an immersive UI within the 3D scene on the desktop, mobile and on bare-metal embedded systems without a windowing system.

Graph UI utilizes Resolution Independent NURBS Curves Rendering using Programmable Graphics Pipeline, i.e. rendering curves directly on the GPU, resolution independent [ paper, slides ].

This method allows us to have an ultimate fast font and UI rendering engine, suitable for all devices and applications. No CPU based curve nor font pre-rendering (matching a target resolution) is required.

Think of an integrated QT or OpenJFX in your 2D/3D application working on desktop and embedded devices even w/o any windowing system on top of a plain console DRM/GBM as support by JOGL(EGL) and NEWT as demonstrated by Xerxes on a Raspberry Pi4.

Reimagine Java on Desktop & Bare-Metal Devices demonstrates the updated Graph Curve Rendering and UI, while this update shows clipping and widgets. Further updates will be posted here....

Notably the Graph Curve Rendering is almost feature complete, as well as our own user input including gesture detection within NEWT.

Parent Main Node
Dependency Tree
All GraphUI
Open Items graphui

Bugzilla query error

error, http-timed-out, Array


Completed Items graphui

Bugzilla query error

error, http-timed-out, Array


Jogl / Graph

Dependency Tree Graph Font Issues

All Jogl Graph

Open Items Jogl / graph

Bugzilla query error

error, http-timed-out, Array


Completed Items Jogl / graph

Bugzilla query error

error, http-timed-out, Array


WebAssembly (wasm) Target Platform

See WebAssembly (wasm) Target Platform

NEWT

Bugzilla query error

error, http-timed-out, Array


NEWT + Wayland

Currently NEWT supports the X11/Xorg windowing server on Unix alike platforms.

It might be desired to add direct support to Wayland, as we already added support for bare metal devices w/o a windowing system via the Linux DRM/GBM console mode throughout JOGL + NEWT.

Vulkan

Bugzilla query error

error, http-timed-out, Array


Video Encoding/Decoding & Player

Across our releases, we supported video encoding and decoding (with a player) based on either FFmpeg or Android's library as shown in this clip at 2:12 min mark.

Goal would be to

  • Update general ffmpeg video decoding support
  • Enhance ffmpeg video encoding support
  • Potentially add better control about video-frame to framebuffer control for editing software

See related buglist

Bugzilla query error

error, http-timed-out, Array


iOS Enhancements

Early iOS support has been demonstrated in 2019

Enhancing this port would allow to use JogAmp in a similar fashion as on Android, but using an OpenJDK iOS build.

Source Certification Contract (SCC)

Dependency Tree

Root Parent Entry

Bugzilla query error

error, http-timed-out, Array


OpenJFX

Bug report 607 describes different ways to either

  • enhance external rendering via JOGL into an OpenJFX UI elements, or
  • to replace OpenJFX's Glass w/ NEWT and Prism's OpenGL coding with JOGL

Misc

Bugzilla query error

error, http-timed-out, Array