Sign in to follow this  
Bru

OpenGL DirectX... costs money?

Recommended Posts

i recently read somewhere that if i try selling my game(that uses directX),i'll need to pay for a license. is it true? if it is,that's problematic for me. i am a sole person and i probably cant pay for a license. i am also using directX in order to be more impressive when i present my game when i try to get into a gaming company. i dont want to use openGL because then i'll go into a lower level and need to build myself more functions and classes(and i try not to use external libarys too much). a real engine? well i heared unity is nice,but now everybody seems to be using it and considering the fact i wont have a degree soon i need to be extrodinary if i want to get a job as a game programmer... not mention i dont want a unity watermark appearing on my game for using the free version. so... does directX realy cost money when i try selling my game?

Share this post


Link to post
Share on other sites
I have yet to find something that says you have to purchase a license to use it. You already have to use Microsoft Windows and Visual Studio before you can use DirectX anyways, and if you only use Visual Studio Express, I believe I've heard there are limitations on commercial distribution of applications coded in Visual Studio Express.

I'm assuming since they include the redist for free: http://www.microsoft.com/downloads/details.aspx?familyid=0cf368e5-5ce1-4032-a207-c693d210f616&displaylang=en then there is no license required.

Share this post


Link to post
Share on other sites
Quote:
Original post by Dbproguy
if you only use Visual Studio Express, I believe I've heard there are limitations on commercial distribution of applications coded in Visual Studio Express.
That is not true, there is no limit to commercial distribution even if you use the Express versions.

I don't know where you heard that you need pay to any license fees, but it's not true.

Share this post


Link to post
Share on other sites
Quote:
Original post by Codeka
Quote:
Original post by Dbproguy
if you only use Visual Studio Express, I believe I've heard there are limitations on commercial distribution of applications coded in Visual Studio Express.
That is not true, there is no limit to commercial distribution even if you use the Express versions.

I don't know where you heard that you need pay to any license fees, but it's not true.

True there is no fee, but there are some limits DirectX's use, regardless of which VStudio edition you're using. Not in quantity of sales or anything, just on how you're allowed to ship/install the needed files. You are not allowed to just pack a few DLLs in the same directory as your app. You can only distribute the redistributable installer packages that Microsoft allows. All the details on which files must be present, what's optional, etc, are contained in the REDIST folder of your SDK. If you don't want to ship with the redist packages, then you should point your users to the DirectX Web Installer.

Share this post


Link to post
Share on other sites
Hmmm, on this note... I'm using Visual Studio C++ 2008, but just for the compiler (not .NET or anything).

When I distribute a game, will the game just run on anyone's system?

Or will they need to install something? If so, is there some other compiler I should be using instead of VS? Also, if this is the case, why is it that I would need some extra package just to run a standard C++ program?

Share this post


Link to post
Share on other sites
Quote:
Original post by NightCabbage
Hmmm, on this note... I'm using Visual Studio C++ 2008, but just for the compiler (not .NET or anything). When I distribute a game, will the game just run on anyone's system? Or will they need to install something?
Yes you'll need them to install the visual C++ runtime. You can integrate this installer with your own game's installer though, so both packages are installed at once.

You can find the installer by doing a search for "Microsoft Visual C++ 2008 Redistributable Package".
Quote:
why is it that I would need some extra package just to run a standard C++ program?
Your game is compiled down to native code, BUT it will likely be linked to Microsoft DLLs, for functions such as printf, timeGetTime, fopen, etc... These DLLs are installed by the redist package.

Share this post


Link to post
Share on other sites
Quote:

Or will they need to install something? If so, is there some other compiler I should be using instead of VS? Also, if this is the case, why is it that I would need some extra package just to run a standard C++ program?

Because C++ isn't "standard" in that sense. All C and C++ programs need a runtime to execute -- that's where your "standard" functions come from, implemented in terms of the OS functions for the same. The difference with C++ is that those runtimes can be linked in to your program as static libraries, although that is discouraged these days in favor of linking dynamically (which means you need to package the redistributable for your runtime version with your installer).

Share this post


Link to post
Share on other sites
Note also that all C++ compilers have a runtime library component, it's just that some compilers choose to link to their statically, rather than dynamically.

Microsoft chose to link to the C++ runtime dynamically (by default) because it allows them to patch security vulnerabilities that may be found without requiring you to recompile and have all your clients re-download your application. Not that there's ever been a security vulnerability in the VC++ runtime (that I'm aware of), but it's theoretically possible - they learnt this lession with the JPEG vulnerability that was found in GDI+ a few years back: all applications that had distributed private copies of GDI+ had to be updated separately, and it was a nightmare for sysadmins!

In any case, the redist for the runtime is quite small. But if you're really against the idea of including it with your installer, you can link to the VC++ runtime statically instead. There are issues when linking with the C++ runtime statically (particularly if your application uses DLLs) but as long as you understand those and are willing to take on the responsibilty of monitoring for security issues in the runtime (you should always be monitoring for security [and other] issues in all your dependencies, of course) then it's an option.

Share this post


Link to post
Share on other sites
(Thanks to the above 3 posters!)

Ah, that's interesting... so it's about the libraries that it's linking to, not the actual compiled code itself. That makes sense.

So how do people get normal programs that are made in C++ to run on Windows without needing to install anything?

I don't think I've seen many "professional" games that require the redistributable package to run... why is this?

Should I be doing that? Or is it a good idea to just package the redistributable and be done with it?

Share this post


Link to post
Share on other sites
Those programs either link statically with their dependencies (but this is not always possible or advisable, for example, you cannot statically link to the DirectX libraries), or they bundle the redistributable installer with their own installer and quietly install it during the installation phase of the program.

Share this post


Link to post
Share on other sites
Quote:
Original post by NightCabbage
I don't think I've seen many "professional" games that require the redistributable package to run... why is this?
I think we posted at the same time, so I won't go over static linking again, but most games will include the VC++ runtime as part of their installation. It's a "silent" install, so you don't actually see it installing, but if you go to your Control Panel, Programs listing, you'll probably see a bunch of "Microsoft Visual C++ 20xx Redistributable" entries - these are the runtime components that other applications have installed for you.

Because they're separate entries like that, it means Microsoft can update them as part of your regular Windows Update cycle. That's how the security fixes come in.

The redist package is about 1-2MB, so it's not very big when compared to the game itself (usually).

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Forum Statistics

    • Total Topics
      627718
    • Total Posts
      2978790
  • Similar Content

    • By DelicateTreeFrog
      Hello! As an exercise for delving into modern OpenGL, I'm creating a simple .obj renderer. I want to support things like varying degrees of specularity, geometry opacity, things like that, on a per-material basis. Different materials can also have different textures. Basic .obj necessities. I've done this in old school OpenGL, but modern OpenGL has its own thing going on, and I'd like to conform as closely to the standards as possible so as to keep the program running correctly, and I'm hoping to avoid picking up bad habits this early on.
      Reading around on the OpenGL Wiki, one tip in particular really stands out to me on this page:
      For something like a renderer for .obj files, this sort of thing seems almost ideal, but according to the wiki, it's a bad idea. Interesting to note!
      So, here's what the plan is so far as far as loading goes:
      Set up a type for materials so that materials can be created and destroyed. They will contain things like diffuse color, diffuse texture, geometry opacity, and so on, for each material in the .mtl file. Since .obj files are conveniently split up by material, I can load different groups of vertices/normals/UVs and triangles into different blocks of data for different models. When it comes to the rendering, I get a bit lost. I can either:
      Between drawing triangle groups, call glUseProgram to use a different shader for that particular geometry (so a unique shader just for the material that is shared by this triangle group). or
      Between drawing triangle groups, call glUniform a few times to adjust different parameters within the "master shader", such as specularity, diffuse color, and geometry opacity. In both cases, I still have to call glBindTexture between drawing triangle groups in order to bind the diffuse texture used by the material, so there doesn't seem to be a way around having the CPU do *something* during the rendering process instead of letting the GPU do everything all at once.
      The second option here seems less cluttered, however. There are less shaders to keep up with while one "master shader" handles it all. I don't have to duplicate any code or compile multiple shaders. Arguably, I could always have the shader program for each material be embedded in the material itself, and be auto-generated upon loading the material from the .mtl file. But this still leads to constantly calling glUseProgram, much more than is probably necessary in order to properly render the .obj. There seem to be a number of differing opinions on if it's okay to use hundreds of shaders or if it's best to just use tens of shaders.
      So, ultimately, what is the "right" way to do this? Does using a "master shader" (or a few variants of one) bog down the system compared to using hundreds of shader programs each dedicated to their own corresponding materials? Keeping in mind that the "master shaders" would have to track these additional uniforms and potentially have numerous branches of ifs, it may be possible that the ifs will lead to additional and unnecessary processing. But would that more expensive than constantly calling glUseProgram to switch shaders, or storing the shaders to begin with?
      With all these angles to consider, it's difficult to come to a conclusion. Both possible methods work, and both seem rather convenient for their own reasons, but which is the most performant? Please help this beginner/dummy understand. Thank you!
    • By JJCDeveloper
      I want to make professional java 3d game with server program and database,packet handling for multiplayer and client-server communicating,maps rendering,models,and stuffs Which aspect of java can I learn and where can I learn java Lwjgl OpenGL rendering Like minecraft and world of tanks
    • By AyeRonTarpas
      A friend of mine and I are making a 2D game engine as a learning experience and to hopefully build upon the experience in the long run.

      -What I'm using:
          C++;. Since im learning this language while in college and its one of the popular language to make games with why not.     Visual Studios; Im using a windows so yea.     SDL or GLFW; was thinking about SDL since i do some research on it where it is catching my interest but i hear SDL is a huge package compared to GLFW, so i may do GLFW to start with as learning since i may get overwhelmed with SDL.  
      -Questions
      Knowing what we want in the engine what should our main focus be in terms of learning. File managements, with headers, functions ect. How can i properly manage files with out confusing myself and my friend when sharing code. Alternative to Visual studios: My friend has a mac and cant properly use Vis studios, is there another alternative to it?  
    • By ferreiradaselva
      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. 
  • Popular Now