Jump to content
  • Advertisement
Sign in to follow this  
Kk1496

OpenGL Xcode and OpenGL shaders

This topic is 905 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Advertisement

You have to find out how the compiled program accesses the files. Where does it look for them? Are there absolute paths in use, or paths relative to the application, the install directory, the user's home directory, or whatever? Only if that is identified, you can work on a strategy to install the files where they are expected.

Share this post


Link to post
Share on other sites

Just to echo what Haegarr posted; you need to find out what the 'working directory' is and you need to put the shader folder there. A quick search seems to imply that the working directory is the same as the directory Xcode is in so you could try putting the shader folder in there. Or you could try changing it to an absolute path. I am not familiar with MacOS so I don't really know what the 'correct' way to do things is there.

 

Look down a bit int his thread and it shows how to set a working directory for your project in XCode 4 (I don't know which version you are using).

http://stackoverflow.com/questions/13225500/how-to-change-the-working-directory-to-the-location-of-the-program

Edited by Nanoha

Share this post


Link to post
Share on other sites
I found this tutorial

http://www.tomdalling.com/blog/modern-opengl/01-getting-started-in-xcode-and-visual-cpp/

His project has a .mm file that handles apples way of using file system and framework.

I was hoping that i could do it completely platform independent, but I guess not.

I assume that if i wamyed to build for Windows, I'd have to take my files into visual studio and write some code to check what operating system I'm using?

Share this post


Link to post
Share on other sites

It says it uses GLFW for windows creation and input which Google tells me is cross platform so it should be good. I can't say you wouldn't have to do something platform specific at all but if GLFW is cross platform (window creation is usually the bit that requires the most platform specific code) then you shouldn't really have to do much different to get a simple OpenGL program to work on both MacOS/Windows. The same code will probably compile just fine on both platforms.

 

The issue you had originally is just where the program is being run from, that's not really a code/compilation issue. From a windows point of view; if your 'shaders' folder is int he same directory as your .exe then it will work. MacOS may be different in that respect (I just don't know) so you might have to have a tiny bit of platform specific code which you can deal with with a simple #ifdef

 

#ifdef WINDOWS

path = windowsPath;

#end

#ifdef MACOS

path = macPath

#endif

Share this post


Link to post
Share on other sites

I assume that if i wamyed to build for Windows, I'd have to take my files into visual studio and write some code to check what operating system I'm using?

No. You cannot run a Mac OS program on Windows or vice versa, so how should runtime OS checking help? Instead you build an own executable for each platform. Those for Windows has some Windows specific code, and those for Mac OS has some Mac OS specific code. If you have the need to call such code from the common code base, than wrap the specific code into functions / classes giving them a well defined single interface.

Edited by haegarr

Share this post


Link to post
Share on other sites

Mac and iOS use application bundles to package executables together with all of their supporting files. You need to copy the shaders into the application bundle, and then you need to find out where your application bundle is. For the first step, the easiest thing to do is simply to add the shaders to the XCode project - they will automatically be copied to sit alongside the executable. It will ignore folder structure in this case. To get a folder structure, add a folder reference to XCode.

 

Once you have the files copied in, the usual way is to use Cocoa system calls (typically NSBundle's resourcePath property) to get the path to your bundle and thus your files. This requires an objective C file, which is of course a real hassle. The trick to get around this is that you can write an Objective C implementation for a C function. So I have a header called "PlatformHelp" with a bunch of simple C styled functions inside a namespace, and then it's implemented in C++/Win32 for WIndows and ObjC/Cocoa for Mac and iOS.

Share this post


Link to post
Share on other sites
The shaders are added to the project. In fact, they were created in Xcode.

I copied the code from the example into my project.

Nothing seems to work.

Share this post


Link to post
Share on other sites

Find where your compiled application bundle is, right click and select Show Package Contents. I forget the exact structure in there, there's another app folder or something but you should be able to find your binary and the shaders should be there too. Then once you have that, you have to load the shaders from that location using [[NSBundle mainBundle] resourcePath], which in turn means adding a C header and Objective C implementation to get the path. The code from the sample will NOT work as-is.

 

Nobody said cross platform was easy.

Edited by Promit

Share this post


Link to post
Share on other sites

Well, I found the bundle, and the shaders aren't in there. They've been added to the project so, could this be some kind of build setting issue?

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!