Sign in to follow this  

OpenGL wrapping shader code

Recommended Posts

irreversible    2862
I'm currently doing all of my stuff in OpenGL and thus far I have just a couple of shaders that I really need or want. The problem is I've adapted one of these in cg, which I haven't read too much positive about. I know there are profile converters out there that would probably convert it to GLSL for me and save me some headache (as one can probably tell, I'm not too well versed in shader stuff and usually try to avoid using them if I can help it - especially since I generally really don't need shaders for what I'm doing), but that's really not the issue for me right now. What I've done is created a video "driver" wrapper (a renderer, not a real driver), which hides API-specific code. Even though I'm using cg stuff directly right now, bypassing the wrapper, and everything seems to be working fine on my computer, I'm can't help but wonder if I should dump either cg or GLSL (eg, should I expect any issues to arise when mixing the two?) and if I should, then which one should I keep? Secondly, how similar is HLSL to GLSL and should I expect any quirks/special cases to crop up when (or if) I do decide to implement a D3D renderer? My GLSL code loads shaders directly from a buffer in memory with no additional setup required, which makes it very robust. I assume HLSL to not be much different.

Share this post

Link to post
Share on other sites
Hodgman    51342
GLSL only works with GL, so if you want an API-independent solution, go with CG.

You may not know this, but CG and HLSL are actually 2 different implementations of the same language. The difference is that CG (NVidia's implementation) has a compiler that supports both DX and GL.

Share this post

Link to post
Share on other sites
irreversible    2862
Thanks for the reply, hodgman!

As for GLSL and HLSL - I know they're API-dependent; what I was driving at was whether I should go with GLSL or cg for OpenGL (and a separate HLSL pipeline for D3D). I didn't know cg compiled for both :)

Like I mentioned, I've read a few bad things about cg, though - along the lines that its reliability/consistency/support on different platforms is really not that good. Additionally, since it's nVidias, would it be rational to assume that cg shaders won't work on API cards?

The most important question right now, though, is whether it's okay to mix cg and GLSL or should I be aware of something when doing so?

Share this post

Link to post
Share on other sites
Hodgman    51342
Sorry I've never mixed two shader languages in the one app, so I've got no advice for that :/
Original post by irreversible
I've read a few bad things about cg, though - along the lines that its reliability/consistency/support on different platforms is really not that good.
Well this doesn't help with GL, only DX, but if there are cases of incompatibility -- seeing that CG and HLSL are the same language, you should be able to pass CG code to DirectX directly (as if it were HLSL code) without using the CG runtimes at all.
For example, the 360 uses Microsoft-HLSL and the PS3 uses NVidia-CG, but we write one shader and it works on both platforms.
""NVIDIA and Microsoft collaborated to develop the Cg language. Microsoft calls its implementation High-Level Shading Language, or HLSL for short. HLSL and Cg are the same language but reflect the different names each company uses to identify the language and its underlying technology.""
Additionally, since it's nVidias, would it be rational to assume that cg shaders won't work on API cards?
No, the whole point of CG is that it just works everywhere, so NVidia would be shooting themselves in the foot by forcing game developers to write two versions of all their shaders (one for NVidia cards and one for non-NVidia cards).

Share this post

Link to post
Share on other sites
MJP    19790
Yeah I'll second the Cg/HLSL approach. There's very few cases where you would need to modify a shader to compile for one or the other, and you can usually fix it with a #define.

I've also always considered GLSL a no-go since it lacks a very fundamental feature that Cg and HLSL support: off-line compilation.

Share this post

Link to post
Share on other sites
irreversible    2862
Alrighty - cheerio, guys! I'll go with the cg/HLSL approach as well in that case. Incidentally - something I found for GLSL enthusiasts while doing research.

One note though - I did try to pass a (pretty random) HLSL shader (off the net) to the cg compiler, but it choked on it; I didn't even try to figure out why, though, so it might've been the shader.

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  

  • Partner Spotlight

  • Similar Content

    • By pseudomarvin
      I assumed that if a shader is computationally expensive then the execution is just slower. But running the following GLSL FS instead just crashes
      void main() { float x = 0; float y = 0; int sum = 0; for (float x = 0; x < 10; x += 0.00005) { for (float y = 0; y < 10; y += 0.00005) { sum++; } } fragColor = vec4(1, 1, 1 , 1.0); } with unhandled exception in nvoglv32.dll. Are there any hard limits on the number of steps/time that a shader can take before it is shut down? I was thinking about implementing some time intensive computation in shaders where it would take on the order of seconds to compute a frame, is that possible? Thanks.
    • By Arulbabu Donbosco
      There are studios selling applications which is just copying any 3Dgraphic content and regenerating into another new window. especially for CAVE Virtual reality experience. so that the user opens REvite or CAD or any other 3D applications and opens a model. then when the user selects the rendered window the VR application copies the 3D model information from the OpenGL window. 
      I got the clue that the VR application replaces the windows opengl32.dll file. how this is possible ... how can we copy the 3d content from the current OpenGL window.
      anyone, please help me .. how to go further... to create an application like VR CAVE. 
    • By cebugdev
      hi all,

      i am trying to build an OpenGL 2D GUI system, (yeah yeah, i know i should not be re inventing the wheel, but this is for educational and some other purpose only),
      i have built GUI system before using 2D systems such as that of HTML/JS canvas, but in 2D system, i can directly match a mouse coordinates to the actual graphic coordinates with additional computation for screen size/ratio/scale ofcourse.
      now i want to port it to OpenGL, i know that to render a 2D object in OpenGL we specify coordiantes in Clip space or use the orthographic projection, now heres what i need help about.
      1. what is the right way of rendering the GUI? is it thru drawing in clip space or switching to ortho projection?
      2. from screen coordinates (top left is 0,0 nd bottom right is width height), how can i map the mouse coordinates to OpenGL 2D so that mouse events such as button click works? In consideration ofcourse to the current screen/size dimension.
      3. when let say if the screen size/dimension is different, how to handle this? in my previous javascript 2D engine using canvas, i just have my working coordinates and then just perform the bitblk or copying my working canvas to screen canvas and scale the mouse coordinates from there, in OpenGL how to work on a multiple screen sizes (more like an OpenGL ES question).
      lastly, if you guys know any books, resources, links or tutorials that handle or discuss this, i found one with marekknows opengl game engine website but its not free,
      Just let me know. Did not have any luck finding resource in google for writing our own OpenGL GUI framework.
      IF there are no any available online, just let me know, what things do i need to look into for OpenGL and i will study them one by one to make it work.
      thank you, and looking forward to positive replies.
    • By fllwr0491
      I have a few beginner questions about tesselation that I really have no clue.
      The opengl wiki doesn't seem to talk anything about the details.
      What is the relationship between TCS layout out and TES layout in?
      How does the tesselator know how control points are organized?
          e.g. If TES input requests triangles, but TCS can output N vertices.
             What happens in this case?
      In this article,
      the isoline example TCS out=4, but TES in=isoline.
      And gl_TessCoord is only a single one.
      So which ones are the control points?
      How are tesselator building primitives?
    • By Orella
      I've been developing a 2D Engine using SFML + ImGui.
      Here you can see an image
      The editor is rendered using ImGui and the scene window is a sf::RenderTexture where I draw the GameObjects and then is converted to ImGui::Image to render it in the editor.
      Now I need to create a 3D Engine during this year in my Bachelor Degree but using SDL2 + ImGui and I want to recreate what I did with the 2D Engine. 
      I've managed to render the editor like I did in the 2D Engine using this example that comes with ImGui. 
      3D Editor preview
      But I don't know how to create an equivalent of sf::RenderTexture in SDL2, so I can draw the 3D scene there and convert it to ImGui::Image to show it in the editor.
      If you can provide code will be better. And if you want me to provide any specific code tell me.
  • Popular Now