Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dynamicimage #495

Open
wants to merge 106 commits into
base: master
Choose a base branch
from
Open

Dynamicimage #495

wants to merge 106 commits into from

Conversation

woelper
Copy link
Owner

@woelper woelper commented Oct 28, 2024

No description provided.

@woelper woelper requested a review from B-LechCode October 28, 2024 15:54
@B-LechCode
Copy link
Collaborator

@woelper I started looking in that and tried to render grayscale textures - which didn't work. I created them as R8, but I can't tell notan to add a swizzle mask or something else to render it grayscale.

Doing "imageops::crop_imm" on a "DynamicImage" will always result in an rgba image, even if the underlying data is grayscale.

I didn't find any flaws in your implementation so far.

@woelper
Copy link
Owner Author

woelper commented Oct 31, 2024

Thanks so much for looking at it! Regarding grey textures, that is of course bad news. Maybe we can use a shader to convert red to grey? Would it make sense to open an issue in notan for this?

@B-LechCode
Copy link
Collaborator

I thought about asking in notan's issue section, too.
I will do this rn :)

Yes, we maybe could define a default shader, doing conditional conversion?

@woelper
Copy link
Owner Author

woelper commented Oct 31, 2024

Great!

Yeah, a shader could make sense anyways for HDR and other things!

@B-LechCode
Copy link
Collaborator

B-LechCode commented Nov 1, 2024

@woelper do you know where to inject a pixel shader to do that? That's beyond my knowledge. Maybe you got some hints.

Then I would try to commit a dynamic rendering for R8 at least.
Edit: Could this work: "https://github.com/Nazariglez/notan/blob/develop/examples/draw_image_shader.rs"?

@woelper
Copy link
Owner Author

woelper commented Nov 1, 2024

I was going to post the same URL :)

I am quite happy with the progress, your idea to have a convert operator was amazing. The pixel operators and image operators already support some additional data types and you can convert on the fly between them.

@B-LechCode
Copy link
Collaborator

B-LechCode commented Nov 2, 2024

I got it for image rendering, but not for egui::image.
Maybe you have an idea where to add a shader for egui.
The alternative is maybe to use notan here, too. (Need to look at it today!)

Edit: I committed my changes, I hope it's okay for you! Due to the special behavior of imageops::crop_imm on dynamic image, I needed to match the types. Maybe you can have a look at it, if this is a bug or intention.

Screenshot_20241102_004043

src/texture_wrapper.rs Outdated Show resolved Hide resolved
@B-LechCode
Copy link
Collaborator

@woelper is the branach dynamicimage_zoom supposed to combine the new zoom image and dynamic image?
I'd merge them then together and delete both old branches?

@woelper
Copy link
Owner Author

woelper commented Nov 4, 2024

Hi! I tried to combine them by merging zoom into it and made it build, but I think I am missing something. If you have time maybe you can try integrating the changes from your zoom window branch directly into this one? I can delete the dynamicimage_zoom in that case.

@B-LechCode
Copy link
Collaborator

Hi! I tried to combine them by merging zoom into it and made it build, but I think I am missing something. If you have time maybe you can try integrating the changes from your zoom window branch directly into this one? I can delete the dynamicimage_zoom in that case.

Done :)

@B-LechCode
Copy link
Collaborator

@B-LechCode is the old picker still present somewhere? I'm bringing this up because in the past when this PR was first opened it seemed as if the old and new picker were visually having a race condition and appearing over one another. Now that is fixed though but I found another similar issue, the pickers corners seem to round like the old picker whenever hovering over transparency. This makes me think there's still something of the old picker around somewhere or if you managed to round the new one then it doesn't work all the time.

Video showing this (Watch the corners):
round.mp4

@woelper thanks for fixing this!

One more thing I can immediately point out, a user complained about the zoom window "wrapping" the image. This should probably change as it looks quite odd. Example with checker.png

@Stoppedpuma I'm working on this. I hope to get this to work within the next week.

img.height(),
(*amt as u32).clamp(2, 254),
libblur::FastBlurChannels::Channels4,
libblur::ThreadingPolicy::Adaptive,
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

libblur's have gated feature image with prebuilt handling DynamicImage if this makes sense in latest versions
https://github.com/awxkee/libblur/blob/03341a4e4df05d88bf61f69187cbe2c16cee7770/src/lib/stack_blur_image.rs#L46.

Just to confirm because it is not clear from context: it is a mistake that immediately leads to artifacts to perform blur/scaling/any blending operation on the image with unpremultiplied alpha. The DynamicImage type from image crate always considers an image as unpremultiplied, therefore to perform any blending operation you have to premultiply alpha first. Thus this leads to question, does here DynamicImage holds an image with already premultiplied alpha?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request UI
Projects
Status: In progress
Development

Successfully merging this pull request may close these issues.

4 participants