OpenGL icon indicating copy to clipboard operation
OpenGL copied to clipboard

Linux Support

Open DaveAxiom opened this issue 6 years ago • 12 comments

Proper Linux support for project OpenGL! This contribution is intended to be inline with Cherno's programming intent and style.

Premake creates multiple Makefiles as .make files. Each project Makefile needs to be specified for compilation. To compile OpenGL-Examples, run from the command prompt: make -f OpenGL-Examples.make

DaveAxiom avatar Jan 16 '20 06:01 DaveAxiom

Confirming that these changes providing linux support worked on my arch linux system. Very helpful.

slzatz avatar Feb 16 '20 15:02 slzatz

@DaveAxiom thank you for your contribution! I'll check it out and merge it in once I'm happy. What Linux distro did you use?

TheCherno avatar Feb 18 '20 23:02 TheCherno

I use a Ubuntu variant distribution. Ubuntu is a Debian based system which many popular distributions are also based on. The directions for installing required libraries is on the Hazel Project Linux PR branch. https://github.com/LovelySanta/Hazel/tree/linux-support-v2#32-linux

DaveAxiom avatar Feb 19 '20 04:02 DaveAxiom

Running the OpenGL-Example one failed to load returning this error

[00:09:29] GLCORE: Could not open file 'assets/shaders/test.vert.glsl'
[00:09:29] GLCORE: Could not open file 'assets/shaders/test.frag.glsl'
[00:09:29] GLCORE: [OpenGL Debug HIGH] 0:1(1): error: syntax error, unexpected $end
[00:09:29] GLCORE: Assertion Failed: GL_DEBUG_SEVERITY_HIGH

Os: Linux Ubuntu 20.4 LTS

alboainin avatar Oct 28 '20 21:10 alboainin

@AliAlboainin96 This branch is modified minimally to make it easy to merge. Change into the OpenGL-Examples directory and try running OpenGL-Examples again. The Hazel project has the same issue and it's expected that an asset manager will be written someday. Sorry about that.

cd OpenGL-Examples
../bin/Debug-linux-x86_64/OpenGL-Examples/OpenGL-Examples

DaveAxiom avatar Oct 28 '20 23:10 DaveAxiom

@DaveAxiom For some reason deleting the repo and recloning it worked !

alboainin avatar Oct 29 '20 10:10 alboainin

This seg faulted on example for me and I sort of assumed it might be a conflict with installed glfw. As a learning exercise I decided to follow the commits on this to a clean branch and make my own Linux build more to my taste. I didn't really keep easy merging in mind, renaming and moving subprojects (and updating to latest original sources) but I'm pretty happy with the result, especially as it doesn't segfault anymore.

I diverged a fair bit but it might be worth a quick look at mine for things like the system glfw support and copying of shaders. It's my first time using premake so feel free to point out if I've done anything dumb too, I can't test Windows so it's entirely possible I broke it :)

https://github.com/DominoMarama/OpenGL

DominoMarama avatar Dec 19 '20 23:12 DominoMarama

u@c:/OpenGL$ bin/Debug-linux-x86_64/OpenGL-Examples/OpenGL-Examples 
[18:05:00] GLCORE: OpenGL Info:
[18:05:00] GLCORE:   Vendor: NVIDIA Corporation
[18:05:00] GLCORE:   Renderer: NVS 5200M/PCIe/SSE2
[18:05:00] GLCORE:   Version: 3.3.0 NVIDIA 390.143
Segmentation fault (core dumped)
u@c:/OpenGL$

pulsatorius avatar May 05 '21 16:05 pulsatorius

@pulsatorius

The minimum version of OpenGL needed is 3.3 which is what you have. You do have an old video card. I can give you tips on how to get this project setup in CodeBlocks for you to step through and debug. This is my output for this program:

[22:55:04] GLCORE:   Vendor: X.Org
[22:55:04] GLCORE:   Renderer: AMD Radeon (TM) RX 460 Graphics (POLARIS11, DRM 3.35.0, 5.4.0-72-generic, LLVM 11.0.0)
[22:55:04] GLCORE:   Version: 4.6 (Compatibility Profile) Mesa 20.2.6```

DaveAxiom avatar May 06 '21 03:05 DaveAxiom

I use Eclipse not CodeBlocks normally. In this case I use the CLI, with make -j4 -f OpenGL-Sandbox.make. The version is set by the program. When I run the code I have created from Cherno's OpenGL Course on YouTube, with

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);

, note the COMPAT instead of CORE, I get

4.6.0 NVIDIA 390.143
Registering test Clear Color
Registering test 2D Texture

So the Nvidia driver can run OpenGL 4.6.0.

pulsatorius avatar May 07 '21 02:05 pulsatorius

Shouldn't this conversation be held at https://github.com/DaveAxiom/OpenGL? I tried to debug and got this.

Thread #1 [OpenGL-Sandbox] 152096 [core: 2] (Suspended : Signal : SIGSEGV:Segmentation fault)	
	0x0	
	GLCore::Utils::EnableGLDebugging() at OpenGLDebug.cpp:42 0x5555555d187e	
	SandboxLayer::OnAttach() at SandboxLayer.cpp:16 0x5555555bf4b3	
	GLCore::LayerStack::PushLayer() at LayerStack.cpp:20 0x5555555c43a1	
	GLCore::Application::PushLayer() at Application.cpp:38 0x5555555bfa4b	
	Sandbox::Sandbox() at SandboxApp.cpp:11 0x55555556d215	
	std::make_unique<Sandbox>() at unique_ptr.h:857 0x555555572a99	
	main() at SandboxApp.cpp:17 0x5555555673d7	

It looks like the call to glDebugMessageCallback() gives the segmentation fault. According to http://docs.gl/gl4/glDebugMessageCallback it was introduced in OpenGL 4.3.

pulsatorius avatar May 07 '21 07:05 pulsatorius

If I change lines 49 in /OpenGL-Core/src/Platform/Windows/WindowsWindow.cpp from

49:		glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);

to

49:		glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);

I get a black window, which I think is the correct behaviour.

pulsatorius avatar May 07 '21 08:05 pulsatorius