[External] : Re: [JavaFX 3D ( | Feature Request)] Setting Texture Nearest-Sampling on PhongMaterial

Kevin Rushforth kevin.rushforth at oracle.com
Mon Jun 26 15:40:30 UTC 2023


Yes, but likely not until after the jfx21 fork.

-- Kevin


On 6/25/2023 11:03 AM, Nir Lisker wrote:
> Perhaps Jay and Kevin can weigh in on this.
>
> By the way, I see that the com.sun.prism.Texture interface already 
> defines get/setLinearFiltering methods that specify if the filtering 
> is not linear then it uses a nearest neighbor algorithm. It's not used 
> by the 3D side it seems.
>
> On Sun, Jun 25, 2023 at 8:54 PM Matija Brown <Matija.Brown at outlook.de> 
> wrote:
>
>     This is a good point you’re bringing up Nir!
>
>     I’m really not sure on that. On the one hand your interpretation
>     seems the most sensible, but on the other hand I can’t see any use
>     case of NEAREST filtering in specular or self-illumination maps.
>
>     However giving more options is also always good, and the same way
>     there aren’t really many places (that I’m aware of) one would have
>     NEAREST filtered diffuse maps and use any of the others at all.
>
>     TLDL: Would work excellently your way API wise, but I’m not
>     certain if it makes sense use-case wise.
>
>     Thanks,
>
>     Matija.
>
>     *From: *Nir Lisker <mailto:nlisker at gmail.com>
>     *Sent: *Sunday, 25 June 2023 19:49
>     *To: *Matija Brown <mailto:Matija.Brown at outlook.de>
>     *Cc: *Jayathirth Rao Daarapuram Venkatesh Murthy
>     <mailto:jayathirth.d.v at oracle.com>; Kevin Rushforth
>     <mailto:kevin.rushforth at oracle.com>; openjfx-dev at openjdk.org
>     *Subject: *Re: [JavaFX 3D ( | Feature Request)] Setting Texture
>     Nearest-Sampling on PhongMaterial
>
>     I think that the first question to answer is whether the filtering
>     method is applied to all maps/textures of the material (diffuse,
>     specular, self-illumination) or to each individually. I would
>     imagine that the former makes more sense. If that's the case, the
>     texture filtering parameter will be just one more property in
>     PhongMaterial (perhaps in the Material supertype if it also makes
>     sense for other possible materials - that can be figured out later
>     in any case).
>
>     On Sun, Jun 25, 2023 at 3:20 PM Matija Brown
>     <Matija.Brown at outlook.de> wrote:
>
>         Unfortunately it took a little longer (got busy), but have
>         just had a quick look at the
>
>         OpenGL side of things.
>
>         The ES2Texture class appears to handle everything there. There
>         are two create-Methods, but the other
>
>         one is responsible for MediaFrame stuff and it doesn’t really?
>         make sense to have non-linear filtering there?
>
>         What’s your opinion?
>
>         The create method seems to parse in all texture parameters
>         simply as arguments
>         (https://github.com/openjdk/jfx/blob/0d9dcf38275528e1b621d71631aac5bdb9452110/modules/javafx.graphics/src/main/java/com/sun/prism/es2/ES2Texture.java#L98
>         <https://urldefense.com/v3/__https://github.com/openjdk/jfx/blob/0d9dcf38275528e1b621d71631aac5bdb9452110/modules/javafx.graphics/src/main/java/com/sun/prism/es2/ES2Texture.java*L98__;Iw!!ACWV5N9M2RV99hQ!Kymj_0SzGmiitcE_AhzTd0w-Omx_kwLdDsh6SFW1My_TyDHBYLTRrWlUaWgkgfTbWQAIJrpzBleYqnXCkwAc$>),
>
>         it would probably be best to just add the filtering in there
>         as well.
>
>         API-wise it’s probably best to have a Texture or DiffuseMap
>         class that the PhongMaterial uses and stores metadata about
>         the Image.
>
>         However this might be slightly overkill considering there is
>         only this one single parameter we’re trying to add,
>
>         thus maybe just a flag in PhongMaterial would suffice?
>
>         Have a nice day,
>
>         Matija.
>
>         *From: *Matija Brown <mailto:Matija.Brown at outlook.de>
>         *Sent: *Thursday, 22 June 2023 18:37
>         *To: *Jayathirth Rao Daarapuram Venkatesh Murthy
>         <mailto:jayathirth.d.v at oracle.com>; Nir Lisker
>         <mailto:nlisker at gmail.com>; Kevin Rushforth
>         <mailto:kevin.rushforth at oracle.com>
>         *Cc: *openjfx-dev at openjdk.org
>         *Subject: *RE: [JavaFX 3D ( | Feature Request)] Setting
>         Texture Nearest-Sampling on PhongMaterial
>
>         I’ll do the OpenGL – have done quite a bit with Vulkan and GL
>         in the past so there’s no problem there.
>
>         Certainly usefull if you would do some reviewing – if you
>         finish the Metal texture maps someone will surely find
>
>         themselves to expand it with sampling.
>
>         Tomorrow I’ll give a short summary on what would be to do for
>         OpenGL, as we have that for D3D already.
>
>         Then do a little example probably – doesn’t really seem too
>         much work to me?
>
>         Thanks,
>
>         Matija.
>
>         *From: *Jayathirth Rao Daarapuram Venkatesh Murthy
>         <mailto:jayathirth.d.v at oracle.com>
>         *Sent: *Thursday, 22 June 2023 06:28
>         *To: *Nir Lisker <mailto:nlisker at gmail.com>; Kevin Rushforth
>         <mailto:kevin.rushforth at oracle.com>
>         *Cc: *openjfx-dev at openjdk.org
>         *Subject: *Re: [JavaFX 3D ( | Feature Request)] Setting
>         Texture Nearest-Sampling on PhongMaterial
>
>         Correcting myself:
>
>         Currently I am working on Metal implementation of Texture maps
>         in JavaFX 3D : https://bugs.openjdk.org/browse/JDK-8310109 and
>         not on adding nearest sampling(which last mail can imply).
>
>         Thanks,
>
>         Jay
>
>         *From: *openjfx-dev <openjfx-dev-retn at openjdk.org> on behalf
>         of Jayathirth Rao Daarapuram Venkatesh Murthy
>         <jayathirth.d.v at oracle.com>
>         *Date: *Thursday, 22 June 2023 at 9:22 AM
>         *To: *Nir Lisker <nlisker at gmail.com>, Kevin Rushforth
>         <kevin.rushforth at oracle.com>
>         *Cc: *openjfx-dev at openjdk.org <openjfx-dev at openjdk.org>
>         *Subject: *Re: [JavaFX 3D ( | Feature Request)] Setting
>         Texture Nearest-Sampling on PhongMaterial
>
>         Currently I am working on Metal implementation of the same and
>         has no bandwidth to work on additional OpenGL thing.
>
>         But I can help in reviewing the code if we come up with
>         addition of nearest filtering.
>
>         Thanks,
>
>         Jay
>
>         *From: *openjfx-dev <openjfx-dev-retn at openjdk.org> on behalf
>         of Nir Lisker <nlisker at gmail.com>
>         *Date: *Wednesday, 21 June 2023 at 9:40 PM
>         *To: *Kevin Rushforth <kevin.rushforth at oracle.com>
>         *Cc: *openjfx-dev at openjdk.org <openjfx-dev at openjdk.org>
>         *Subject: *Re: [JavaFX 3D ( | Feature Request)] Setting
>         Texture Nearest-Sampling on PhongMaterial
>
>             If I remember correctly, in OpenGL you parse the texture
>             filter when the texture is being created, while in DirectX
>             as it is bound
>
>             to the sampler (it is a sampler state after all) it would
>             have to be set before every render call. However it
>             shouldn’t make any
>
>             API difference really, as we can just have a field
>             somewhere and the parse it along when needed.
>
>         Yes, the JBS ticket mentions this difference as well.
>
>         Since Kevin approved this feature and the API seems to
>         converge nicely between the pipelines, we can start the work.
>         I'm somewhat busy with other tasks as of late, but I will try
>         to formulate an API. Matija or Jay, if one of you can start
>         investigating the changes to the OpenGL pipeline we could
>         create a branch in the sandbox repo and work there.
>
>         On Wed, Jun 21, 2023 at 4:03 PM Kevin Rushforth
>         <kevin.rushforth at oracle.com> wrote:
>
>             My preference would be to add support only for Linear and
>             Nearest in any case.
>
>             -- Kevin
>
>             On 6/21/2023 4:48 AM, Matija Brown wrote:
>
>                 As Jayathrith said, in OpenGL as well as Metal only
>                 NEAREST and LINEAR filters are available.
>
>                 There might be a way of getting around it by
>                 implementing some own algorithm for OpenGL and Metal
>                 but that seem slightly
>
>                 over the top. So either one would have to keep the
>                 options limited to the two supported everywhere
>
>                 or go with the “conditional” features.
>
>                 Having had a look at DirectX the APIs seem not to
>                 differ too much.
>
>                 If I remember correctly, in OpenGL you parse the
>                 texture filter when the texture is being created,
>                 while in DirectX as it is bound
>
>                 to the sampler (it is a sampler state after all) it
>                 would have to be set before every render call. However
>                 it shouldn’t make any
>
>                 API difference really, as we can just have a field
>                 somewhere and the parse it along when needed.
>
>                 Cheers,
>
>                 Matija.
>
>                 *From: *Jayathirth Rao Daarapuram Venkatesh Murthy
>                 <mailto:jayathirth.d.v at oracle.com>
>                 *Sent: *Wednesday, 21 June 2023 13:09
>                 *To: *Nir Lisker <mailto:nlisker at gmail.com>; Matija
>                 Brown <mailto:Matija.Brown at outlook.de>
>                 *Cc: *openjfx-dev at openjdk.org
>                 *Subject: *Re: [JavaFX 3D ( | Feature Request)]
>                 Setting Texture Nearest-Sampling on PhongMaterial
>
>                 In OpenGL we set GL_LINEAR by default at :
>                 https://github.com/openjdk/jfx/blob/0d9dcf38275528e1b621d71631aac5bdb9452110/modules/javafx.graphics/src/main/java/com/sun/prism/es2/ES2Texture.java#L221
>                 <https://urldefense.com/v3/__https://github.com/openjdk/jfx/blob/0d9dcf38275528e1b621d71631aac5bdb9452110/modules/javafx.graphics/src/main/java/com/sun/prism/es2/ES2Texture.java*L221__;Iw!!ACWV5N9M2RV99hQ!Kymj_0SzGmiitcE_AhzTd0w-Omx_kwLdDsh6SFW1My_TyDHBYLTRrWlUaWgkgfTbWQAIJrpzBleYqlyhROI9$>
>
>                 And Metal supports only two types of Min/Max filters :
>                 Nearest(default) and Linear. So even if D3D supports
>                 multiple types we might be limited to support only
>                 these 2 filters for all platforms.
>
>                 Thanks,
>
>                 Jay
>
>                 *From: *openjfx-dev <openjfx-dev-retn at openjdk.org>
>                 <mailto:openjfx-dev-retn at openjdk.org> on behalf of Nir
>                 Lisker <nlisker at gmail.com> <mailto:nlisker at gmail.com>
>                 *Date: *Wednesday, 21 June 2023 at 3:57 PM
>                 *To: *Matija Brown <Matija.Brown at outlook.de>
>                 <mailto:Matija.Brown at outlook.de>
>                 *Cc: *openjfx-dev at openjdk.org
>                 <openjfx-dev at openjdk.org> <mailto:openjfx-dev at openjdk.org>
>                 *Subject: *Re: [JavaFX 3D ( | Feature Request)]
>                 Setting Texture Nearest-Sampling on PhongMaterial
>
>                     First of all, please excuse directly e-mailing you
>                     earlier today. Working with mailing lists is quite
>                     new for me and apparently I forgot to add
>
>                     the mailing list to cc.
>
>                 I didn't get any private email, so you seem to be
>                 doing better than you thought with the mailing list :)
>
>                     With the OpenGL-side I do have some experience.
>                     Concerning the D3D-side of things it would
>                     probably mean convincing
>
>                     Somebody that it is a good idea to finally apply
>                     the suggested change.
>
>                     There would be some API change required of course.
>                     As a basic concept it would probably be sensible
>                     to add this as a parameter to the PhonMaterial-class.
>
>                     Alternatively it might make sense to add a
>                     “Texture” class that is used a a DiffuseMap in the
>                     PhonMaterial. But that seems slightly overkill.
>
>                 Where to put the new methods in the Java side is not
>                 the concerning part, it's how to create methods that
>                 match all the pipelines. In D3D, the method for
>                 setting the filter is detailed in [1], and its
>                 possible parameters in [2][3][4]. So suppose that I'm
>                 looking at the list of available filter types there:
>
>                 D3DTEXF_NONE, D3DTEXF_POINT, D3DTEXF_LINEAR,
>                 D3DTEXF_ANISOTROPIC, D3DTEXF_PYRAMIDALQUAD,
>                 D3DTEXF_GAUSSIANQUAD, D3DTEXF_CONVOLUTIONMONO,
>
>                 if OpenGL supports a somewhat different set of
>                 filters, we will have some clashes in the Java API side.
>
>                 Generally, we would like to give as much flexibility
>                 to the user as possible, but need to be careful
>                 with platform-specific functionality. We could round
>                 *some* corners. For example, I think that if we have
>                 an enum for the filter types above that is a union of
>                 the ones available in the different pipelines, and if
>                 a few are supported by only one of the pipelines, we
>                 could note it in the docs and get away with it
>                 (something similar to a conditional feature). However,
>                 if the whole native pipeline setup for texture
>                 filtering is different, which means a different set of
>                 Java API methods per pipeline, then that's too much.
>
>                 All this means is that to continue we need to figure
>                 out what the API for each pipeline looks like, what's
>                 the most functionality we can have for each pipeline,
>                 and then how we can unite them into a single Java API
>                 with the hopes of being able to reconcile the
>                 differences "well enough" (whatever that will mean).
>
>                 [1]
>                 https://learn.microsoft.com/en-us/windows/win32/api/d3d9helper/nf-d3d9helper-idirect3ddevice9-setsamplerstate
>                 <https://urldefense.com/v3/__https://learn.microsoft.com/en-us/windows/win32/api/d3d9helper/nf-d3d9helper-idirect3ddevice9-setsamplerstate__;!!ACWV5N9M2RV99hQ!Kymj_0SzGmiitcE_AhzTd0w-Omx_kwLdDsh6SFW1My_TyDHBYLTRrWlUaWgkgfTbWQAIJrpzBleYqrrki48a$>
>
>                 [2]
>                 https://learn.microsoft.com/en-us/windows/win32/direct3d9/d3dtexturefiltertype
>                 <https://urldefense.com/v3/__https://learn.microsoft.com/en-us/windows/win32/direct3d9/d3dtexturefiltertype__;!!ACWV5N9M2RV99hQ!Kymj_0SzGmiitcE_AhzTd0w-Omx_kwLdDsh6SFW1My_TyDHBYLTRrWlUaWgkgfTbWQAIJrpzBleYqlZ23fLp$>
>
>                 [3]
>                 https://learn.microsoft.com/en-us/windows/win32/direct3d9/d3dsamplerstatetype
>                 <https://urldefense.com/v3/__https://learn.microsoft.com/en-us/windows/win32/direct3d9/d3dsamplerstatetype__;!!ACWV5N9M2RV99hQ!Kymj_0SzGmiitcE_AhzTd0w-Omx_kwLdDsh6SFW1My_TyDHBYLTRrWlUaWgkgfTbWQAIJrpzBleYqnU4vml3$>
>
>                 [4]
>                 https://learn.microsoft.com/en-us/windows/win32/direct3d9/vertex-textures-in-vs-3-0
>                 <https://urldefense.com/v3/__https://learn.microsoft.com/en-us/windows/win32/direct3d9/vertex-textures-in-vs-3-0__;!!ACWV5N9M2RV99hQ!Kymj_0SzGmiitcE_AhzTd0w-Omx_kwLdDsh6SFW1My_TyDHBYLTRrWlUaWgkgfTbWQAIJrpzBleYqn_dBel4$>
>
>                 On Wed, Jun 21, 2023 at 12:45 PM Matija Brown
>                 <Matija.Brown at outlook.de> wrote:
>
>                     First of all, please excuse directly e-mailing you
>                     earlier today. Working with mailing lists is quite
>                     new for me and apparently I forgot to add
>
>                     the mailing list to cc.
>
>                     With the OpenGL-side I do have some experience.
>                     Concerning the D3D-side of things it would
>                     probably mean convincing
>
>                     Somebody that it is a good idea to finally apply
>                     the suggested change.
>
>                     There would be some API change required of course.
>                     As a basic concept it would probably be sensible
>                     to add this as a parameter to the PhonMaterial-class.
>
>                     Alternatively it might make sense to add a
>                     “Texture” class that is used a a DiffuseMap in the
>                     PhonMaterial. But that seems slightly overkill.
>
>                     As I am not very well acquainted with current
>                     design principles of this library, these things
>                     should lie in more experience contributors hands.
>
>                     *From: *Nir Lisker <mailto:nlisker at gmail.com>
>                     *Sent: *Tuesday, 20 June 2023 20:50
>                     *To: *Matija Brown <mailto:Matija.Brown at outlook.de>
>                     *Cc: *openjfx-dev at openjdk.org
>                     *Subject: *Re: [JavaFX 3D ( | Feature Request)]
>                     Setting Texture Nearest-Sampling on PhongMaterial
>
>                         Which leads to the question; Does there, in
>                         JavaFX exist something comparable to setting
>                         the texture-sampler to NEAREST
>
>                         instead of LINEAR sampling?
>
>                     There is no API to set the texture filter. If you
>                     would like to contribute and add it, I can help.
>                     It needs to be compatible with both Direct3D and
>                     OpenGL (not sure how the work on Metal is going),
>                     so this can be a challenge.
>
>                     For the D3D side, see this issue in JBS [1]. The
>                     relevant code is at [2]. I didn't look at the
>                     OpenGL side.
>
>                     - Nir
>
>                     [1] https://bugs.openjdk.org/browse/JDK-8092272
>
>                     [2]
>                     https://github.com/openjdk/jfx/blob/0d9dcf38275528e1b621d71631aac5bdb9452110/modules/javafx.graphics/src/main/native-prism-d3d/D3DContext.cc#L621
>                     <https://urldefense.com/v3/__https://github.com/openjdk/jfx/blob/0d9dcf38275528e1b621d71631aac5bdb9452110/modules/javafx.graphics/src/main/native-prism-d3d/D3DContext.cc*L621__;Iw!!ACWV5N9M2RV99hQ!Kymj_0SzGmiitcE_AhzTd0w-Omx_kwLdDsh6SFW1My_TyDHBYLTRrWlUaWgkgfTbWQAIJrpzBleYqpek3psH$>
>
>                     On Mon, Jun 19, 2023 at 10:15 PM Matija Brown
>                     <Matija.Brown at outlook.de> wrote:
>
>                         On my never ending journey of building a
>                         Minecraft-clone in every graphics-framework
>                         available,
>
>                         I have come across JavaFX for the next attempt.
>
>                         However a minor inconvenience has crossed my
>                         path in the process:
>
>                         Using the (very well developed!) 2D-Graphics
>                         displaying pixel-art style images is no
>                         trouble whatsoever.
>
>                         Simply rendering it to a canvas and disabling
>                         smoothing does the job just fine.
>                         Unfortunately, I have been
>
>                         unable to figure out how to achieve a similar
>                         thing using the 3D-Graphics engine and the
>                         PhongMaterial that comes with it.
>
>                         Which leads to the question; Does there, in
>                         JavaFX exist something comparable to setting
>                         the texture-sampler to NEAREST
>
>                         instead of LINEAR sampling?
>
>                         Unfortunately the latest information I could
>                         find online was from about 2013 and much has
>                         (probably)
>
>                         changed since then. Thus the question is being
>                         posed once again.
>
>                         I whish to excuse myself for probably
>                         repeating a fairly common question,
>
>                     Kind regards,
>                     Matija Brown.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20230626/94d0ddf8/attachment-0001.htm>


More information about the openjfx-dev mailing list