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),
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.br...@outlook.de>
Sent: Thursday, 22 June 2023 18:37
To: Jayathirth Rao Daarapuram Venkatesh 
Murthy<mailto:jayathirth....@oracle.com>; Nir Lisker<mailto:nlis...@gmail.com>; 
Kevin Rushforth<mailto:kevin.rushfo...@oracle.com>
Cc: openjfx-dev@openjdk.org<mailto:openjfx-dev@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....@oracle.com>
Sent: Thursday, 22 June 2023 06:28
To: Nir Lisker<mailto:nlis...@gmail.com>; Kevin 
Rushforth<mailto:kevin.rushfo...@oracle.com>
Cc: openjfx-dev@openjdk.org<mailto:openjfx-dev@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-r...@openjdk.org> on behalf of Jayathirth Rao 
Daarapuram Venkatesh Murthy <jayathirth....@oracle.com>
Date: Thursday, 22 June 2023 at 9:22 AM
To: Nir Lisker <nlis...@gmail.com>, Kevin Rushforth <kevin.rushfo...@oracle.com>
Cc: openjfx-dev@openjdk.org <openjfx-dev@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-r...@openjdk.org> on behalf of Nir Lisker 
<nlis...@gmail.com>
Date: Wednesday, 21 June 2023 at 9:40 PM
To: Kevin Rushforth <kevin.rushfo...@oracle.com>
Cc: openjfx-dev@openjdk.org <openjfx-dev@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.rushfo...@oracle.com<mailto:kevin.rushfo...@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....@oracle.com>
Sent: Wednesday, 21 June 2023 13:09
To: Nir Lisker<mailto:nlis...@gmail.com>; Matija 
Brown<mailto:matija.br...@outlook.de>
Cc: openjfx-dev@openjdk.org<mailto:openjfx-dev@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

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-r...@openjdk.org><mailto:openjfx-dev-r...@openjdk.org> on behalf 
of Nir Lisker <nlis...@gmail.com><mailto:nlis...@gmail.com>
Date: Wednesday, 21 June 2023 at 3:57 PM
To: Matija Brown <matija.br...@outlook.de><mailto:matija.br...@outlook.de>
Cc: openjfx-dev@openjdk.org<mailto:openjfx-dev@openjdk.org> 
<openjfx-dev@openjdk.org><mailto:openjfx-dev@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
[2] 
https://learn.microsoft.com/en-us/windows/win32/direct3d9/d3dtexturefiltertype
[3] 
https://learn.microsoft.com/en-us/windows/win32/direct3d9/d3dsamplerstatetype
[4] 
https://learn.microsoft.com/en-us/windows/win32/direct3d9/vertex-textures-in-vs-3-0

On Wed, Jun 21, 2023 at 12:45 PM Matija Brown 
<matija.br...@outlook.de<mailto:matija.br...@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:nlis...@gmail.com>
Sent: Tuesday, 20 June 2023 20:50
To: Matija Brown<mailto:matija.br...@outlook.de>
Cc: openjfx-dev@openjdk.org<mailto:openjfx-dev@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

On Mon, Jun 19, 2023 at 10:15 PM Matija Brown 
<matija.br...@outlook.de<mailto:matija.br...@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.





Reply via email to