PDA

View Full Version : Is there anybody who give me guideline for seting up latest version of OpenGL.



kdepirate
09-14-2015, 08:00 PM
Hi,

I'm newest member this forum.

I have been searching for the way to setup latest version of OpenGL such as 4.2 or 4.5.
However, I canít find any guideline about that.

When I setup visual studio 2013 on my laptop computer, I can use the version 4.2 of OpenGL.
But I want to use it on Visual Studio 2010 as well as VS2013.

How to setup for the (latest)version 4.2 or 4.5 of OpenGL.
I expect followings,
1. Download OpenGL header files and libraries(.lib and .dll).
2. Place downloaded files on somewhere like C:\\OpenGL
3. Then, Setup property at visual studio(2010 or below) such as include and library directory.
4. Include header files on source code.

The one of guidelines I found is downloading the driver at graphic card manufacturer homepage and setting up it. And I do these actions. But I didnít find any header and library files on setup folders (In my case, C:\NVIDIA\DisplayDriver\341.81\Win8_WinVista_Win7_ 64\International)

If I miss any step, please give me guideline or advice any things.
Thank you for reading my issue.

DarioCiao!
09-18-2015, 09:43 AM
First of all be sure to install latest drivers for your videocard, also check if your videocard/drivers support already fully functional OpenGL 4.5.

After that you just need correct headers and source files included in your project (I'm thinking to GLEW/glLoadGen). You should still link to "opengl32.lib" (or whatever its named library) but it is the same library you always linked to even when you were using old OpenGL..

Oh! your windowing system should first of all create a valid GL context, I think SFML and glfw can do that (I fear SDL2 is limited to GL 3)

mhagain
09-18-2015, 10:46 PM
The first and most important thing to understand is that OpenGL is not a software library. There are no official and common headers, .libs, .dlls available that will provide access to OpenGL. OpenGL is provided by your hardware manufacturer as part of their drivers, and so the first thing to do is: download and install the latest drivers from your hardware manufacturer.

The next thing to understand is that the OpenGL version you get is determined by (1) your hardware, and (2) your drivers. For example, and at the time of writing, AMD drivers only support up to OpenGL 4.4 whereas Intel only support up to 4.3 (both support some, but not all, features from higher versions), and older hardware from all manufacturers will (of course) only support lower versions. Current AMD hardware is capable of supporting 4.5 and should do so (via updated drivers) at some point in the future; don't know about Intel. Sometimes a manufacturer will provide software emulation of features they don't support in hardware, but that's typically not worth bothering with: your performance can drop to under 1 frame per second.

What this means is that if your hardware and drivers don't support the OpenGL version you wish to use, then you can't use that OpenGL version.

Since you're talking about Windows and Visual Studio, the next thing to understand is that Visual Studio only provides headers and .libs for OpenGL version 1.1 - nothing higher. With all versions of Visual Studio (except for Visual C++ 2005 Express, which was weird) the full procedure for setting it up to program OpenGL 1.1 is: do nothing. It's built-in, there's nothing you need to do, and if you start cutting and pasting headers, .libs and .dlls around to different folders you'll only make a mess and break it.

So in your program you then just #include <gl/gl.h>, link to opengl32.lib and start writing code.

This is important because subsequent versions of OpenGL build on previous versions: if you can't get a working OpenGL 1.1 program, then you'll never get a working OpenGL 4.5 program, so focus on getting 1.1 working first.

To access higher versions you then need to do one of two things. The hard way is to make a bunch of wglGetProcAddress calls - in your program, after you've created your OpenGL context - for all of the entry points you wish to use. This is tedious and error-prone.

The easy way is to use a 3rd-party library like GLEW which will do it all for you.

Download links for GLEW: http://glew.sourceforge.net/index.html
How to install GLEW: http://glew.sourceforge.net/install.html
How to use GLEW in your program: http://glew.sourceforge.net/basic.html

A useful resource is the OpenGL Extensions Viewer (http://www.realtech-vr.com/glview/) which you can use to determine which OpenGL version your hardware and driver supports.

kdepirate
09-21-2015, 02:30 AM
The first and most important thing to understand is that OpenGL is not a software library. There are no official and common headers, .libs, .dlls available that will provide access to OpenGL. OpenGL is provided by your hardware manufacturer as part of their drivers, and so the first thing to do is: download and install the latest drivers from your hardware manufacturer.
-> I have download it and setup followings(I use Quadro FX 5800)
-> 341.81-quadro-grid-desktop-notebook-win8-win7-64bit-international-whql.exe
* This is driver from nvidia
* After this setup on my desktop computer, there is changed in Windows\System32 such as nvogl[v32.dll, v64.dll, shim32.dll, shim64.dll] and so on.

-> NVIDIA_SDK10_OpenGL_10.52.0808.1735.exe
* This is a SDK Library for nvidia and sample code.
* I have try to insert below code in Example Source code downloaded.
- printf("OpenGL version : %s\n", (char*)glGetString(GL_VERSION));
But, It still prints "OpenGL version : 3.3.0".
In my opinion, I need to get opengl32.dll for the version I want(4.2 or higher).

-> When I have been looking for this problem to solve it, I found one thing(please, refer below).
* 398191-opengl32dll-nvidia-drivers/
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
for nvidia (+ winxp/2000) the opengl driver is called nv_oglnt.dll (or something similar from memory) basically that does all the work,
opengl32.dll is the 100% software driver or redirects u to nv_oglnt.dll if u have nvidia drivers installed
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Is this means that opengl32.dll is intermediate file for driver's *.dll like nvogl*.dll?



The next thing to understand is that the OpenGL version you get is determined by (1) your hardware, and (2) your drivers. For example, and at the time of writing, AMD drivers only support up to OpenGL 4.4 whereas Intel only support up to 4.3 (both support some, but not all, features from higher versions), and older hardware from all manufacturers will (of course) only support lower versions. Current AMD hardware is capable of supporting 4.5 and should do so (via updated drivers) at some point in the future; don't know about Intel. Sometimes a manufacturer will provide software emulation of features they don't support in hardware, but that's typically not worth bothering with: your performance can drop to under 1 frame per second.

What this means is that if your hardware and drivers don't support the OpenGL version you wish to use, then you can't use that OpenGL version.

-> I believe that I already have appropriate drivers because I setup latest driver downloaded from nvidia.
So, I think that so long as I get opengl32.dll for lastest version, I can use this. Is my notion alright?


Since you're talking about Windows and Visual Studio, the next thing to understand is that Visual Studio only provides headers and .libs for OpenGL version 1.1 - nothing higher. With all versions of Visual Studio (except for Visual C++ 2005 Express, which was weird) the full procedure for setting it up to program OpenGL 1.1 is: do nothing. It's built-in, there's nothing you need to do, and if you start cutting and pasting headers, .libs and .dlls around to different folders you'll only make a mess and break it.

So in your program you then just #include <gl/gl.h>, link to opengl32.lib and start writing code.

This is important because subsequent versions of OpenGL build on previous versions: if you can't get a working OpenGL 1.1 program, then you'll never get a working OpenGL 4.5 program, so focus on getting 1.1 working first.
-> I can compile and execute my program using opengl, but It use 3.3 as mentioned above.

To access higher versions you then need to do one of two things. The hard way is to make a bunch of wglGetProcAddress calls - in your program, after you've created your OpenGL context - for all of the entry points you wish to use. This is tedious and error-prone.
-> Sorry, I can't understand your advice. But sincerely thank you.

The easy way is to use a 3rd-party library like GLEW which will do it all for you.

Download links for GLEW: sourceforge
How to install GLEW: glew.sourceforge
How to use GLEW in your program: glew.sourceforge
-> Because you mention the GLEW, I download it and GLUT.
And I include these include/lib directory in my new project(VS2010) for using opengl.
I found Windows SDK(Software Development Kit) at below URL and setup it on my pc
* msdn.microsoft
Following setting up this, I have files in C:\Program Files (x86)\Windows Kits\8.1.
It contains many folders such as Include, Lib, Bin, and so on.
At C:\Program Files (x86)\Windows Kits\8.1\Include\um\gl, I found GL.h and GLU.h.
At C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86\, I found GlU32.Lib and opengl32.lib.
I can't find GLU32.DLL or opengl32.dll at C:\Program Files (x86)\Windows Kits\8.1\bin\.
I create two folders such as "Include" and "Lib" in My new project solution folder.
I copy GL.h and GLU.h in Windows Kits folder to "Include" I created.
And I also copy GLU32.Lib and opengl32.lib in Windows Kits folder to "Lib" I created.
To use these files, I am setting up property in my new project(VS).
I did these work(setting for include and lib directory) for GLEW(C:\glew-1.12.0) and GLUT(C:\glut-3.7).
Now, I have latest version of library such as GLEW, GLUT, GLU32 and opengl32.
I include and link these files in my project.
Below code are the part of my code.
--------------------------------------------------------------------------------------------------------------------------------
for Include
#include <glew_1.12.0_GL/glew.h> // It indicates "C:\glew-1.12.0\include\glew_1.12.0_GL". I change folder name "GL" to "glew_1.12.0_GL" to avoid confusion.
#include <gl.h> // It indicates "---\Visual Studio 2010\Projects\OpenGL_LinkEx\Include\Windows_Kit_gl \GL.h"
#include <glu.h> // It indicates "---\Visual Studio 2010\Projects\OpenGL_LinkEx\Include\Windows_Kit_gl \GLU.h"
#include <glut.h>// It indicates "C:\glut-3.7.6-bin\glut.h"
for main
void main()
{
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(400, 400);

glutCreateWindow("Hellow OpenGL");
initRendering();

glutDisplayFunc(Display);
glutReshapeFunc(Reshape);
printf("OpenGL version : %s\n", (char*)glGetString(GL_VERSION));

glutMainLoop();
}
--------------------------------------------------------------------------------------------------------------------------------
I feel frustrated a little bit because it also prints "OpenGL version : 3.3.0".



A useful resource is the OpenGL Extensions Viewer () which you can use to determine which OpenGL version your hardware and driver supports.
-> It's GOOD!! I knew this not at all.





I wrote a long article to solve it. And I want to use latest version so much.
I have try many thing.
- Setting up Windows SDK.
- Setting up GLEW.
- Setting up GLUT.
- Setting up (appropriate)Driver from Nvidia.
So, What do I miss? I too wonder how can I solve this problem.

Please, let me know any solution.

I am very grateful to you.

mhagain
09-21-2015, 02:50 AM
This is what I told you before: your OpenGL version depends on your hardware and driver. Because it's not a software library you cannot just copy and paste DLLs around and expect things to work.

Specifications for the Quadro FX 5800: http://www.nvidia.com/object/product_quadro_fx_5800_us.html

The OpenGL version supported by this card is 3.1 - it's a very very old card and if you want to access a higher GL_VERSION you will need to buy a newer card.

kdepirate
09-21-2015, 10:15 PM
I thought that if I download and setup latest driver on my pc, I can use latest opengl like 4.2 or higher.

somewhere, I read specifications indicating this driver includes latest opengl.

Now that I think of it, I totally misunderstand it.

Thank to your advice, I realize that I have wrong concepts.


After I have try to solve it for many days, I can understand.

At first reading your advice, I didn't understand what you say because It is not match what I thought.

Finally, I can understand that I need to have graphic card supporting opengl version I want to use.

However, I still have one question.

If I have the graphic card supporting opengl version I want to use, what are the things that make me use of latest opengl?

When setting up the latest driver, what are the things to be changed? Are these opengl32.dll?

Of course, you mention below.
Because it's not a software library you cannot just copy and paste DLLs around and expect things to work.

However, when we develop software and use library like opengl in VC++, we have to do few work.
1. include header files.
2. link library files like .lib
3. copy .dll to same folder as .exe or setup system environment path....

If so, I think it's possible to use opengl through above 3 steps.

hm... I confuse... because of your words. It's not a software library

If I have header and library(.lib, .dll) files, I can use that library when I use any library.

This being so, I thought opengl is the same.

I understand that my graphic card supports up to 3.1 version.

and if I should use higher version, I would get newer graphic card.

Thanks to your mention, I can understand real problems.


To summarize,

1. I need to newer graphic card which has capacity for higher version of opengl.
2. The higher version of OpenGL is installed by the driver of graphic card.
3. I can't develop s/w only with header and library files for OpenGL.
4. I never develop s/w using OpenGL above 3.1 on the present my graphic card.

Is that right?



Thank you so much. Thank you!


ps. I hard to write these article in English which is a second language to me.
please understand you hard to figure out my sentence.