Jump to content
  • Advertisement
Sign in to follow this  
TheSeb

OpenGL my shader that work with renderMonkey don't work with my opengl program please help !

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

EDIT : my info log say this : Link successful. The GLSL vertex shader will run in hardware. The GLSL fragment shader will run in hardware. and i have tried with another shader(toon shading) and it works, the problem is for the other shader (per pixel lighting): i have no lighting... even not gouraud. so i suppose (can it be something else ?) that some variable which are in my shader are not in the opengl program. i use in my shader "gl_LightSource[0].halfVector". HalfVector is not present in my opengl program, is it generated by opengl or have i to do something ?if yes what ? in the shader or in the opengl program ? i put the code of the lighting part of my opengl program and the shader code (per pixel lighting): see the end of the page for a copy of that message + the code _______________________________________________________________________________ original first message : Hi, I have made a shader which works with renderMonkey, but when i add this shader to my opengl program the model appears in black. I have used glIntercept and i have these errors : GL ERROR - Function glAttachShader generated error GL_INVALID_VALUE GL ERROR - Function glAttachShader generated error GL_INVALID_VALUE GL ERROR - Function glLinkProgram generated error GL_INVALID_VALUE GL ERROR - Function glUseProgram generated error GL_INVALID_VALUE this is my code :
loadShader::loadShader(char *fileName1, char *fileName2)
{
	
	unsigned int vsh = glCreateShader(GL_VERTEX_SHADER);
	unsigned int fsh = glCreateShader(GL_FRAGMENT_SHADER);
	
	loadStrings(fileName1) ;
	const char *cContent = content ;
		
	glShaderSource(vsh, 1, &cContent, NULL);
	free((void*)content);


	loadStrings(fileName2) ;
	const char *cContent2 = content ;
		
	glShaderSource(fsh, 1, &cContent2, NULL);
	free((void*)content);

	glCompileShader(vsh);
	glCompileShader(fsh);

	unsigned short int ph = glCreateProgram();//program handler
	glAttachShader(ph, vsh);
	glAttachShader(ph, fsh);

	glLinkProgram(ph);
	glUseProgram(ph);
}
	








[Edited by - TheSeb on June 4, 2005 5:30:10 PM]

Share this post


Link to post
Share on other sites
Advertisement
EDIT : i have changed the "unsigned int" by "GLuint" and now i have these errors :
GLDriver - Shutdown - Current OpenGL context 0x10000?
GLDriver - Shutdown - Outstanding OpenGL context 0x10000 ?




[Edited by - TheSeb on June 6, 2005 4:01:25 PM]

Share this post


Link to post
Share on other sites
GLint status=0 ;
glGetObjectParameterivARB(fsh, GL_OBJECT_LINK_STATUS_ARB, &status);
cout<<"status "<<dec<<status<<endl ;

this gives me the status equal to 0, so there is a link problem, but can i do ?

Share this post


Link to post
Share on other sites
yes but with that code my file which contain the log is empty :
int infologLength = 0;
int charsWritten = 0;
char *infoLog;

glGetObjectParameterivARB(vsh, GL_OBJECT_INFO_LOG_LENGTH_ARB, &infologLength);

if (infologLength > 0)
{
cout<<"shader "<<infologLength<<endl ;
infoLog = (char *)malloc(infologLength);
glGetInfoLogARB(vsh, infologLength, &charsWritten, infoLog);
ofstream oFile3("infoLogFile.txt");
oFile3<<infoLog ;
free(infoLog);
}




i have also noticed that infologLength has a lenght of 1...

[Edited by - TheSeb on June 3, 2005 5:13:35 PM]

Share this post


Link to post
Share on other sites
i have used gl intercept and it gives me that :
GL ERROR - Function glUseProgram(2147483649) generated error GL_INVALID_OPERATION
GL ERROR - Function glGetObjectParameterivARB(536870913,GL_LINK_STATUS,0x12fda4) generated error GL_INVALID_ENUM
GLDriver - Shutdown - Current OpenGL context 0x10000?
GLDriver - Shutdown - Outstanding OpenGL context 0x10000 ?
===================================================
Log End.

i don't understand what's wrong with my code... (i reput it here)

loadShader::loadShader(char *fileName1, char *fileName2)
{

GLuint vsh = glCreateShader(GL_VERTEX_SHADER);
GLuint fsh = glCreateShader(GL_FRAGMENT_SHADER);

loadStrings(fileName1) ;
const char *cContent = content ;

ofstream oFile1("sortie shader1.txt");
oFile1<<content ;

glShaderSource(vsh, 1, &cContent, NULL);
free((void*)content);


loadStrings(fileName2) ;
const char *cContent2 = content ;

ofstream oFile2("sortie shader2.txt");
oFile2<<content ;

glShaderSource(fsh, 1, &cContent2, NULL);
free((void*)content);

glCompileShader(vsh);
glCompileShader(fsh);

GLuint ph = glCreateProgram();//program handler
glAttachShader(ph, vsh);
glAttachShader(ph, fsh);

glLinkProgram(ph);
glUseProgram(ph);

GLint status=0 ;
glGetObjectParameterivARB(fsh, GL_OBJECT_LINK_STATUS_ARB, &status);
cout<<"status "<<dec<<status<<endl ;

GLint infologLength = 0;
GLint charsWritten = 0;
GLchar *infoLog;

glGetObjectParameterivARB(vsh, GL_OBJECT_INFO_LOG_LENGTH_ARB, &infologLength);

if (infologLength > 0)
{
cout<<"shader "<<infologLength<<endl ;
infoLog = (char *)malloc(infologLength);
glGetInfoLogARB(vsh, infologLength, &charsWritten, infoLog);
ofstream oFile3("infoLogFile.txt");
oFile3<<infoLog ;
//free(infoLog);
}

Share this post


Link to post
Share on other sites
ok thanks, my info log say this :
Link successful. The GLSL vertex shader will run in hardware. The GLSL fragment shader will run in hardware.

and i have tried with another shader(toon shading) and it works, the problem is for the other shader (per pixel lighting): i have no lighting... even not gouraud.
so i suppose (can it be something else ?) that some variable which are in my shader are not in the opengl program.
i use in my shader "gl_LightSource[0].halfVector". HalfVector is not present in my opengl program, is it generated by opengl or have i to do something ?if yes what ? in the shader or in the opengl program ?
i put the code of the lighting part of my opengl program and the shader code (per pixel lighting):


[Edited by - TheSeb on June 6, 2005 4:30:52 PM]

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!