How to set up mac for graphics programming to use openGL? - c++

I am a new to programming and also to this platform so i apologize if
my question is not proper or seems stupid but i need help .None of the
resources on internet have been useful to me . If possible please
provide step by step instrction to set up mac for graphics
programming. thank you in advance.
I am a new to programming and i am trying to learn graphics programming .Till now i write c/c++ code in a text editor and compile and execute them to see the output in shell . I searched the web for setting up mac for opengl projects but none of them come close to clearing my doubts . Here are the doubts/questions :
my computer: macOS-Mojave :macbook pro mid 2012 (intel hd graphics 4000) supports openGL 4.1 according to apple website
1. do i have to download some files to use openGL ? or is it just a an api implemented by the computer hardware manufacturer(here apple in my case ).
2. according to recent news apple deprecated openGL. And i don't know which version of openGL is on my macbook . is there a way to find out ?None of the answers listed have worked for me.
3.Can i compile openGL code through terminal like i have been doing till now or do i have to use xcode ?

1. do i have to download some files to use openGL?
So far, not yet. Everything required ships with the compilers by default. You just add -framework OpenGL to your compiler invocations and are good to go.
2. according to recent news apple deprecated OpenGL. And i don't know which version of openGL is on my macbook. is there a way to find out? None of the answers listed have worked for me.
You're mixing two different concepts here:
The deprecation of OpenGL in the macOS platform means, that OpenGL will disappear from that OS altogether, irrespective of what OpenGL version actually is supported. Eventually you'll have to either move to Metal, or use some wrapper like MoltenGL (which implements OpenGL on top of Metal) or MoltenVK (which implements Vulkan on top of Metal).
With macOS the highest OpenGL version supported is determined entirely by the version of macOS installed. That is different from other OS, where a mere driver update may give you a higher OpenGL version, as long as the installed graphics hardware meets the requirements of that higher OpenGL version.
3. Can i compile openGL code through terminal like i have been doing till now or do i have to use xcode?
Yes. And there's no difference between compiling from the command line, and through Xcode, because Xcode is just doing the very same command calls as you'd do through the terminal.

Related

OpenGL version is few years older than laptop

When I write a java program using LWJGL, and get the OpenGL version using glGetString(GL_VERSION);. Then it displays: 2.1.0 - Build 8.15.10.1892
When I open my windows console (using the famous 'cmd' run), and I use systeminfo, it gives me not just any information about the installation date of windows.
I want to get the installation date of windows because then I know how old my laptop is. After searching the internet, I used WMIC OS GET installdate and I finally got a date: 11 November 2010.
And I assume that's true because I can remember at least the same year. And of course the device may have been some time at the factory or in the store.
When I lookup how old OpenGL 2.1.0 is, I see it's of around 2006 https://www.opengl.org/wiki/History_of_OpenGL#OpenGL_2.1_.282006.29
I'm disappointed of my OpenGL version.
I'm running 64 bit Windows 7. The device is probably at least from the end of 2010, but java displays an OpenGL version of 2006.
There are newer OpenGL versions from widely before November 2010, like version 3.0 (2008), 3.1 (2009) and 3.2 (also 2009)
Could it perhaps be that the JVM only has access to an older version of OpenGL?
Some time ago I played a CD-rom game on this laptop. I think that game would never be playable if it used OpenGL 2.1.0...
Or is this an unfair comparision?
OpenGL by itself is just a specification. The actual thing running on your computer is called an implementation which are usually part of the graphics driver. Also each OpenGL specification has very specific requirements on the implementation. And there are many things in OpenGL-3.x that simply are not supported even by hardware that were "modern" in 2010. For example Intel GPUs from around that time simply don't have everything that's required for OpenGL-3 support. Hence you'll get only OpenGL-2.x support for those and nothing more.
You could look up your laptop specification and see your gfx hardware. This will tell you which version of OpenGL your hardware supports (this information will be available from the gfx chip vendor most likely).
Using an API that supports the version of GL that you hardware does is another issue and may be with the way you have initialized or used the openGL graphics lib.
I would have thought most drivers these days support older versions. They may not support the API natively, but I would have thought provide wrappers for the functionality in the driver. Certainly I can code in OpenGL 1.1 and see the results on the same machine as an OpenGL 4.5 program (On a quadro K2200M).

Force Unreal Engine to use opengl on windows executable

I'm attempting to make a video game in Unreal Engine 4.9. I'm building it for Windows, but I'd like to have it use opengl instead of directx in the executable. However, I've found no options that let you do this. Unreal Engine uses OpenGL when it creates executables for Linux and Mac, but there seems to be no way to use OpenGL with Windows.
Am I missing something? Is there some way to force Unreal Engine to use OpenGL in Windows executables?
EDIT: The reason I want to use OpenGL is because I want this game to run without having to install anything on the end user's computer (DirectX has to be installed to work)
Microsoft doesn't really support OpenGL, they typically go out of their way to make it very difficult to use OpenGL on Windows and strongly encourage people to use DirectX instead.
The simplest way to get a working OpenGL context in windows is sometimes to use ANGLE which is a compatibility layer which translates OpenGL calls to DirectX calls. This is what Chrome and Firefox use to support WebGL on windows. I doubt that Unreal Engine is integrated with this, so you might have a hard time.
Edit:
EDIT: The reason I want to use OpenGL is because I want this game to run without having to install anything on the end user's computer (DirectX has to be installed to work)
One thing you could do is cross-compile the Mesa3D drivers, as described here: https://wiki.qt.io/Cross_compiling_Mesa_for_Windows
But then you won't get hardware acceleration.

OpenGL - Using modern libraries

Upon successful compilation of a recent program I wrote from the openGL-book using openGL 4.0 I wasn't able to run the program due to an error that stated " error XX - unsupported hardware.."
However according to a previous question I asked if I could compile/run openGL programs on my computer I got an answer that I could:
Wiki claims you can do GL 4.0 with your HD 4000 [Graphics Chip] on Windows.
My question is - is that I am using the libraries freeglut 2.8 and GLEW 1.10 (newest versions) but the tutorial I followed used functions that came with 4.0 could the reason that my program does not run follow because I am linking modern versions of openGL libaries?
Things you have to check to run modern OpenGL:
Graphics driver: Do you have the latest and most up to date drivers?
Graphics card/chipset: Can your graphics hardware support the latest OpenGL even with its most recent drivers?
Using Proper Hardware: Some laptops come with a low powered graphics chipset and a high powered alternate graphics card/chipset. The low powered one may not support new stuff, but the high powered one definitely should. Have you instructed your computer to use the right one?
Libraries: Have you properly linked to something like GLEW that gives you the ability to use modern OpenGL?
Since you're on Windows, do note that they purposefully don't give you preinstalled access to modern OpenGL, so you have to do it yourself. Usually that just means checking your drivers and downloading GLEW.
From your error message, it looks like your graphics drivers aren't up to date or the graphics card/chipset/whatever you're using doesn't support the OpenGL version you want.

Compiling/Running C++ code on iPhone

I have recently created an Asteroids game/app for one of my CS classes with openGL, GLU and C++ for Linux. The teacher told me that if I get it to run on the iPhone he would give me extra credit. I have been looking around and I think I have to develop/port it to Objective C using the iPhone Development Kit. My questions are:
Would this be easy to port?
Can I install the Development Kit on Windows, or Linux (I do not have a Mac).
Is there an alternative way (shortcut) to maybe emulate Linux binaries on the iPhone?
I have not tried anything yet, because I would like to know first what you guys think. You do not have to tell me exactly what to do, but I would highly appreciate if you would point me in the right direction.
Thanks.
Well, if you don't want to port your program into another language. You CAN use SDL2, it seems pretty stable and it works on iOS (iPhone/iPad/iPod Touch). All you would have to do is change your code and then play around with the controls. You'll have to clone the Mercurial repo from http://hg.libsdl.org/. It will come with a README.iOS file, in which describes how the port works and some other details. I am not sure if it has multi-touch support yet, I have not tested it.
Also, you can use immediate mode on the iPhone, you just can't use OpenGL ES 2 if you do that. All you have to do is make a context for OpenGL ES 1.1.
And you WILL need a Mac, or perhaps you could get a Hackintosh to compile your code and then run it with a jailbroken iPod/iPhone/iPad.
NOTE:
I believe I have heard of some people compiling their code on a Hackintosh and then submitting it to the app store from a Mac within an Apple store.

Setup VisualC++ to use OpenGL 4.1?

I'm trying to setup VC++ to compile code with OpenGL 4.1 functionality. I downloaded the 3 header files from from opengl.org; put them in the correct paths and include them - but keep getting errors like this:
error C3861: 'wglSwapIntervalEXT': identifier not found
I have the latest video drivers. OpenGL says the problem is MS includes only version 1.1 with their compiler when though the vendor/driver supports 4.1.
One of the big pains of using OpenGL on Windows is that the Windows SDK only ships with OpenGL 1.1. There's probably a really good technical (and non-political) reason for this, but the fact remains, if you want to do anything with OpenGL on Windows, you're on your own.
What you need then, is something to bring the Windows SDK up to current standards (OpenGL 4.1 as I write this.) When I was originally trying to solve this problem (around the time of OpenGL 3.0), I came across GLee http://elf-stone.com/glee.php which is a cool library which makes the full OpenGL spec available easily. I didn't like their license, so I decided to write my own extension loader.
I don't think anyone should ever have to do this again, so I've made mine public domain, do with it as you will. I'd like to hear if you use it in something, but that's not a requirement.
http://www.onemanmmo.com/index.php?cmd=newsitem&comment=news.1.28.0