Jump to content
  • Advertisement
Sign in to follow this  
d h k

OpenGL No way to get into programming shaders with *older* graphic-card?

This topic is 3876 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

I hope I won't be ridiculed for admitting I still use a NVidia GeForce 4 TI in my computer (Hell, it used to be top-of-the-line back in the day... six years ago)... ;) Now, I want to get started with shader-programming. I'm using C++/SDL/OpenGL so far and I've decided to start out with GLSL for now. However, when I use the following code to check whether my GeFore 4 TI supports the vertex- and fragment-shader-extensions, it says both aren't:
bool check_extension ( char* name )
// checks whether an extension is supported
{
	char*	list;

	// get a list of supported extensions
	list = ( char* ) glGetString ( GL_EXTENSIONS );

	if ( !name || !list )
	// if something is wrong
		return false;

	while ( *list )
	// loop through list
	{
		// find the length of the first extension substring
		unsigned int first_extension_length = strcspn ( list, " " );

		if ( strlen ( name ) == first_extension_length && strncmp ( name, list, first_extension_length ) == 0 )
		// if extension is supported
			return true;

		// move to the next substring
		list += first_extension_length + 1;
	}

	return false;
}

void init_extensions ( )
// initializes extensions
{
	if ( !check_extension ( "GL_ARB_multitexture" ) )
		return_error ( fatal_error, "Failed to load GL_ARB_multitexture extension. Your system doesn't support it." );

	if ( !check_extension ( "GL_ARB_vertex_shader" ) )
		return_error ( fatal_error, "Failed to load GL_ARB_vertex_shader extension. Your system doesn't support it." );

	if ( !check_extension ( "GL_ARB_fragment_shader" ) )
		return_error ( fatal_error, "Failed to load GL_ARB_fragment_shader extension. Your system doesn't support it." );
}

As you can see, I also load the multitexture-extension just to check my code and this one loads perfectly fine. Now, I don't trust this test-result, because games such as Half-Life 2, FEAR, all parts of Splinter Cell and Far Cry all run stable on my computer and - if I'm not mistaken - all those do use shaders in one place or the other (HL2 with the blooming for example). So, what am I doing wrong? Will I have to use CG as a language (because it's made by NVidia)? Is it possible that one language works and the other doesn't? Any help is appreciated.

Share this post


Link to post
Share on other sites
Advertisement
GLView says that the GeForce 4 TI doesn't support ARB_vertex_shader and ARB_fragment shader either. But how do the other shaders run on my machine? Would CG work when GLSL doesn't?

Share this post


Link to post
Share on other sites
AFAIK on my old GF4 vertex shaders with GLSL worked. This may depend on the actual driver you use. For initializing extensions and checking their availability I recommend you use a tool such as GLEW. This makes things a lot easier. I believe the framebuffer object extension was also introduced in one driver release (or beta driver) for GF4 but I don't know whether they removed it later on, as it was buggy.

You could use CG as a shader programming language since it can also target other Nvidia specific shader extensions such as NV_fragment_shader and thus you would be able to create some hardware accelerated shaders on GF4, but you would be very much limited in what you can achive...

Another alternative would be to use Mesa, which has a GLSL compiler and is OpenGL 2.0 or 2.1. Sure it does software rendering and therefore things will be horribly slow but you could at least test GLSL.

Share this post


Link to post
Share on other sites
Vertex shaders can be emulated on the CPU, and so if you get up to date drivers then you might find you're able to run GLSL vertex shaders even though your card doesn't support them. You're out of luck for GLSL pixel shaders though.

You can use Cg for pixel shaders though (becuase the GF4 supports pixel shader 1.3, but not 2.0 which is needed for GLSL support). You'll have various restrictions though (like the number of textures you can read and the length of the shader etc.). It will probably be easier to use Cg for both pixel and vertex shaders.

Share this post


Link to post
Share on other sites
Okay, so I can either run GLSL, but only use the vertex-shader, or I can use CG with limited options?

Hmm... I'd really rather stick to using GLSL than CG with OpenGL, but in this case I guess I'll change language.

I downloaded NVemulate, but it doesn't seem to work. I change the feature-set-emulation and the GLSL-compiler-device-support and hit "apply" but it doesn't allow my program to use the extensions either. I suppose that's not what the tool does? Or am I using it wrong?

Thanks for the information, guys.

Share this post


Link to post
Share on other sites
Quote:
Original post by d h k
Hmm... I'd really rather stick to using GLSL than CG with OpenGL, but in this case I guess I'll change language.

If you know GLSL then it'll be a snap to pick up Cg, since all the concepts are the same and the syntax is pretty close too.

Share this post


Link to post
Share on other sites
Ok. Thanks everyone. I switched to CG and after, like, three hours I came up with my first shader: it's bump-mapping! :)



Yay for entering a new level of 3d-programming. Cheers!

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.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!