[JavaFX 3D ( | Feature Request)] Setting Texture Nearest-Sampling on PhongMaterial
Kevin Rushforth
kevin.rushforth at oracle.com
Wed Jun 21 13:03:06 UTC 2023
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
>
> 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> on behalf of Nir
> Lisker <nlisker at gmail.com>
> *Date: *Wednesday, 21 June 2023 at 3:57 PM
> *To: *Matija Brown <Matija.Brown at outlook.de>
> *Cc: *openjfx-dev at openjdk.org <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
>
> [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.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
>
> 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/20230621/d951d694/attachment-0001.htm>
More information about the openjfx-dev
mailing list