OpenGL opengl win and linux

Recommended Posts

Hy. I have some little experience in dx 10 . I would start to programming opengl 3. How i can write a portable(win and linux)c++ project? I see that there are some .so in linux and dll in win that are inconpatible(win don't use .so and linux dont use .dll) How i configure a portable project? Thanks

Share on other sites
Well i have a project template that i've put together so that all my projects work both in windows and linux. So I can explain the way do it:
Firstly, I use SDL as my windowing manager both in linux and windows (rather than the win32 api stuff).

I do all the windows library references using preprocessor directives and also specify it to use a console subsystem. So my project's main source file contains:
#ifdef _WIN32#	pragma comment(linker, "/SUBSYSTEM:CONSOLE /ENTRY:WinMainCRTStartup")#	pragma comment(lib, "opengl32")#	pragma comment(lib, "glu32")#	pragma comment(lib, "glew32")#	pragma comment(lib, "sdl")#	define WIN32_LEAN_AND_MEAN#	include "windows.h"#endif

In linux, my makefile will handle the compilation and library references with something like:
g++ -o linux_out/myapp -lSDL -lGLEW myapp.cpp

All the code must use functions available in both OS'.. If it's not, then use an ifdef to choose. For example the WinMain signature should be main(..) in linux, so i have:
#ifdef _WIN32int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPSTR lpCmd, int nShowCmd){#elseint main(int argc, char *argv[]){#endif

I can't think of anything else that's important right now. It'll take a bit of fiddling, but that should help. By using GLUT or SDL(in my case) one can avoid all the OS specific window/input handling.

good luck

EDIT: As for the shared libraries/dlls, ld in linux should be able to locate any needed shared libraries, but in windows you may wanna keep the dll's in the same directory, or in the system path(though distribution may be harder then).

Share on other sites
You can't use glut or glfw?

If you wish to make your own framework (which is quite educative and rewarding in my opinion =)), simply abstract the work needed to be done on both systems. Such as:

open window
render to window
etc ...

Then implement everyting on both platforms. One header, differenct .c (or .cpp) files - this is approach I take.

I also try to keep myself to as much ansi C and iso C++ as possible. Using only one compiler - gcc only, might be of great help, instead of targetting several compilers at once.

As for the tip above, it is correct. But don't ever use WinMain. That is common missunderstanding that every win32 application HAS to start in WinMain. It has not!

It is just a convenience used by microsoft. You can start any win application in standard main. You gain nothing by using winmain. You rather loose on portability and some convenience such as console io, and it is common to see questions on how to "enable" console in windows applications, and unnecessary code like this: http://www.halcyon.com/~ast/dload/guicon.htm.

Check my post here:

http://www.gamedev.net/community/forums/topic.asp?topic_id=544126

There is a tiny little demo that will open a window and prepare it for rendering. It starts in main, but it is very "windowsh".

For some more abstracted thing, check here: www.nextpoint.se/glw.zip where you can see how to abstract some win32 details about window creation and such. I have glx version (linux) working as well, and once I get time to write a few words about it I will post a blog entry and maybe a tutorial on it. But in next 2 or 3 weeks I won't have time to do it.

If you are planning to make it C++, templates and virtual functions are your friends. Interface programming is really great thing when it comes to modelling, abstractions and different implementations of common modell.

Also take a look at glut and glfw source ... or numerous others. Anything you will have to write ia already written :-).

Create an account

Register a new account

• Partner Spotlight

• Forum Statistics

• Total Topics
627660
• Total Posts
2978489
• Similar Content

• Both functions are available since 3.0, and I'm currently using glMapBuffer(), which works fine.
But, I was wondering if anyone has experienced advantage in using glMapBufferRange(), which allows to specify the range of the mapped buffer. Could this be only a safety measure or does it improve performance?
Note: I'm not asking about glBufferSubData()/glBufferData. Those two are irrelevant in this case.
• By xhcao
Before using void glBindImageTexture(    GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format), does need to make sure that texture is completeness.
• By cebugdev
hi guys,
are there any books, link online or any other resources that discusses on how to build special effects such as magic, lightning, etc. in OpenGL? i mean, yeah most of them are using particles but im looking for resources specifically on how to manipulate the particles to look like an effect that can be use for games,. i did fire particle before, and I want to learn how to do the other 'magic' as well.
Like are there one book or link(cant find in google) that atleast featured how to make different particle effects in OpenGL (or DirectX)? If there is no one stop shop for it, maybe ill just look for some tips on how to make a particle engine that is flexible enough to enable me to design different effects/magic
let me know if you guys have recommendations.
• By dud3
How do we rotate the camera around x axis 360 degrees, without having the strange effect as in my video below?
Mine behaves exactly the same way spherical coordinates would, I'm using euler angles.
Tried googling, but couldn't find a proper answer, guessing I don't know what exactly to google for, googled 'rotate 360 around x axis', got no proper answers.

References:
Code: https://pastebin.com/Hcshj3FQ
The video shows the difference between blender and my rotation:

• By Defend
I've had a Google around for this but haven't yet found some solid advice. There is a lot of "it depends", but I'm not sure on what.
My question is what's a good rule of thumb to follow when it comes to creating/using VBOs & VAOs? As in, when should I use multiple or when should I not? My understanding so far is that if I need a new VBO, then I need a new VAO. So when it comes to rendering multiple objects I can either:
* make lots of VAO/VBO pairs and flip through them to render different objects, or
* make one big VBO and jump around its memory to render different objects.
I also understand that if I need to render objects with different vertex attributes, then a new VAO is necessary in this case.
If that "it depends" really is quite variable, what's best for a beginner with OpenGL, assuming that better approaches can be learnt later with better understanding?

• 10
• 12
• 22
• 13
• 33