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

Build on Windows - incorrectly saved .ppm format #9

Open
cyclone125 opened this issue Feb 15, 2019 · 10 comments
Open

Build on Windows - incorrectly saved .ppm format #9

cyclone125 opened this issue Feb 15, 2019 · 10 comments

Comments

@cyclone125
Copy link

Hi!
First of all thank you for great tutorials on 3D graphics.

There is an issue when building project on Windows with GCC. In initial commit in file tinyraycaster.cpp in function drop_ppm_image you have:

std::ofstream ofs(filename);
ofs << "P6\n" << w << " " << h << "\n255\n";

On Windows GCC replaces \n in output file with platform specific code 0x0D0A, what is incorrect (it should be 0x0A in the file). This result in incorrect *.ppm image representation.
This happens because of opening file in "text" mode. To fix this, file should be opened in "binary" mode, for example like this:

std::ofstream ofs;
ofs.open(filename, std::ofstream::out | std::ofstream::binary);
ofs << "P6\n" << w << " " << h << "\n255\n";

Then everything works correctly. I think this patch would not affect other platforms.

@ssloy
Copy link
Owner

ssloy commented Feb 15, 2019

Yes, this issue had already been adressed by this commit.

@Liquix
Copy link

Liquix commented Feb 19, 2019

I love your writeups and walkthroughs! Thanks for putting them together. However, a big obstacle for beginners is that the first code snippets (in both tinyraycaster and tinyraytracer repositories) do not produce matching output when copied/pasted and compiled on Windows machines. I understand that you and many other enthusiasts develop on Linux, but there is nowhere (that I could find) where the reader is warned that the code must be modified in order to follow along on Windows. A bold note at the beginning or quick reminder under the code snippet would be much appreciated. Thanks again for all your hard work.

@ssloy
Copy link
Owner

ssloy commented Feb 19, 2019

From my experience, bold reminders are ignored by most readers. That is why I keep this current issue open even if in later commits the bug was fixed.

@cyclone125
Copy link
Author

It's not only about ignoring reminders. It's about someone, who is trying to start from the very beginning step by step, as you recommend in your tutorials, and taking the link to initial commit to try it himself. Then he realizes that output is different comparing to what it should be and it's unclear why, and it takes some time to find where the problem hides. Also for the beginner it's not trivial to find the problem himself.
It's not criticism, just some thoughts. Also I don't know if there is a really good way to fix this in initial commit.

@ssloy
Copy link
Owner

ssloy commented Feb 19, 2019

I do agree with you, this is problematic, but I do not see a satisfactory solution to the problem. I do create bugs (a lot). This repository is a real history of one of my saturdays, not something I prepared for months before. While modifying the very first commit is possible, I do not master git sufficiently to feel a firm ground under my feet with this kind of solution.

@cyclone125
Copy link
Author

Just notice: I think, this is possible to edit it directly on github just as text file, but I can't guarantee consequences.
Summing up, I think that small reminder in README file about building on different platforms (including this issue) would be helpful anyway for those people, who would find it. :)
Thank you again for you work and sharing knowledge.

@ssloy ssloy pinned this issue Feb 19, 2019
@ssloy
Copy link
Owner

ssloy commented Nov 15, 2020

I think I would love to ask you a few questions about this project of yours - https://github.com/ssloy/triador

thanks ret394

well... go and ask there?

@KubaO
Copy link

KubaO commented Dec 7, 2020

You can rewrite git history :) You can edit the early commits, and force push the repo to update it. I find that doing this via command line is no fun, and github doesn't provide any tools for that either - the power tool you want is smartgit - it's free for use in open source development. When you open this repo using smartgit, you can go to the log and either move the commit that fixes the issue back in the history, or right click on the first commits and edit them, rewriting the history. It's fairly unproblematic.

@ell1e
Copy link

ell1e commented Aug 23, 2021

It's fairly unproblematic.

It's not, it will break the repo on future git pulls for everyone who cloned it pre-rewrite, and it'll also change all commit hashes anyway (so at least direct links to commits won't be fixed with this).

completely unrelated minor side note: maybe this repo would be a good match to be tagged 2-5d? https://github.com/topics/2-5d that tag could be great to unite pseudo-3d things, raycasters and others, but it's mostly unused right now

@WaterAndFlower
Copy link

Wow!Very thank you,i have been in this problems for more than 2H!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants
@ssloy @Liquix @KubaO @cyclone125 @WaterAndFlower @ell1e and others