Jump to content
  • Advertisement
Sign in to follow this  
Dark Engineer

OpenGL OpenGL triangle example

This topic is 2150 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 have problem with this code because it doesn't show anything in a window, vertex and fragment shaders are loading successfully but glGetError shows something wrong is here. Please someone help me.
#include "loadshader.h"
int main()
{
	glfwInit();
	glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
	glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3);
	glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
	glfwOpenWindowHint(GLFW_WINDOW_NO_RESIZE, GL_TRUE);
	glfwOpenWindow(800, 600, 0, 0, 0, 0, 0, 0, GLFW_WINDOW);
	glfwSetWindowTitle("Crion World Alpha");
	glewExperimental = GL_TRUE;
	glewInit();
	GLuint vertexBuffer;
	glGenBuffers( 1, &vertexBuffer );
	GLuint vao;
	glGenVertexArrays(1, & vao);
	glBindVertexArray( vao );
	GLuint vbo;
	glGenBuffers( 1, &vbo); //generate 1 buffer
	float vertices[] = {
		0.0f,	0.5f,
		0.5f,	-0.5f,
		-0.5f,	-0.5f
	};
	glBindBuffer( GL_ARRAY_BUFFER, vbo );
	glBufferData( GL_ARRAY_BUFFER, sizeof( vertices ), vertices, GL_STATIC_DRAW );
	// vertex shader loading
	const string vShaderString = loadShaderFile("SimpleVertexShader.vertexshader").c_str();
	const GLchar * tempVShader = vShaderString.c_str();
	GLuint vertexShader = glCreateShader( GL_VERTEX_SHADER );
	glShaderSource(vertexShader, 1, & tempVShader, NULL);
	glCompileShader( vertexShader ); 
	std::fstream logs;
	logs.open( "logs.txt", ios::in | ios::out | ios::trunc );
	char  vsbuffer[512];
	glGetShaderInfoLog( vertexShader, 512, NULL, vsbuffer );
	logs << vsbuffer;
	//fragment shader loading
	const string fShaderString = loadShaderFile("SimpleFragmentShader.fragmentshader").c_str();
	const GLchar * tempFShader = fShaderString.c_str();
	GLuint fragmentShader = glCreateShader( GL_FRAGMENT_SHADER );
	glShaderSource(fragmentShader, 1, & tempFShader, NULL );
	glCompileShader(fragmentShader);
	char  fsbuffer[512];
	glGetShaderInfoLog( fragmentShader, 512, NULL, fsbuffer );
	logs << fsbuffer;
	if(glGetError() != 0)
	{
		logs << "sth errors";
		cout << "sth wrong" << endl;
	}
	logs.close();
	GLuint shaderProgram = glCreateProgram();
	glAttachShader( shaderProgram, vertexShader );
	glAttachShader( shaderProgram, fragmentShader);
	glBindFragDataLocation( shaderProgram, 0, "outColor" );
	glLinkProgram( shaderProgram );
	glUseProgram( shaderProgram );
	GLint posAttrib = glGetAttribLocation( shaderProgram, "position" );
	glEnableVertexAttribArray( posAttrib );
	glVertexAttribPointer( posAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0 );
	while( glfwGetWindowParam( GLFW_WINDOW ) )
	{
		glDrawArrays( GL_TRIANGLES, 0, 3);
		glfwSwapBuffers();
	}
	glDeleteProgram( shaderProgram );
	glDeleteShader( vertexShader );
	glDeleteShader( fragmentShader );
	glDeleteBuffers(1,  & vbo );
	glDeleteVertexArrays(1, &vao );
	glfwTerminate();
	return 0;
}
Edited by Dark Engineer

Share this post


Link to post
Share on other sites
Advertisement

There's missing () after glGetError. As is it's not getting called (what you have there is a comparison of the function's address).

Share this post


Link to post
Share on other sites

It doesn't change anything. When i turn application on then debug error appears with Invalid allocation size: 4294967295 bytes

untitled.png

Edited by Dark Engineer

Share this post


Link to post
Share on other sites

SimpleFragmentShader

#version 150

out vec4 outColor;

void main()
{
    outColor = vec4( 1.0, 1.0, 1.0, 1.0 );
}

SimpleVertexShader

#version 150

in vec2 position;

void main()
{
    gl_Position = vec4( position, 0.0, 1.0 );
}

and function for loading them

string loadShaderFile(const string fileName)
{
    
    ifstream shaderFile( fileName.c_str());

    //find the file size
    shaderFile.seekg(0, ios::end);
    std::streampos length = shaderFile.tellg();
    shaderFile.seekg(0, ios::beg);

    //read whole file into a vector
    vector<char> buffer(length);
    shaderFile.read(&buffer[0], length);

    //return the shader string
    return string( buffer.begin(), buffer.end());
}

I think something is wrong under 53 line but i'm begginer in OpenGL

Edited by Dark Engineer

Share this post


Link to post
Share on other sites

Check that the functions you're using are returning valid data.

const GLchar * tempVShader = vShaderString.c_str();

 

Make sure "tempVShader" has a valid string.

char  vsbuffer[512];
glGetShaderInfoLog( vertexShader, 512, NULL, vsbuffer );
logs << vsbuffer;

 

Make sure "vsbuffer" has valid data and is NULL terminated.

const GLchar * tempFShader = fShaderString.c_str();

 

Check "tempFShader" is valid.


char  fsbuffer[512];
glGetShaderInfoLog( fragmentShader, 512, NULL, fsbuffer );
logs << fsbuffer;

 

 

Make sure "fsbuffer" has valid data and is NULL terminated.

Share this post


Link to post
Share on other sites

And to be totally safe, logging should be used as follows, and after the call to glCompileShader()

GLint retParam;
glGetShaderiv(m_openGLID, GL_COMPILE_STATUS, &retParam);
if(retParam != GL_TRUE) 
{
	GLint errorMsgLen = 0;
	glGetShaderiv(m_openGLID, GL_INFO_LOG_LENGTH, &errorMsgLen);
	if (errorMsgLen > 0)
	{
		GLsizei charsWritten = 0;
		GLchar *errorMsg = new GLchar[errorMsgLen];
		glGetShaderInfoLog(m_openGLID, errorMsgLen, &charsWritten, errorMsg);

                /*Do something with errorMsg*/
	}
}
Edited by Nyssa

Share this post


Link to post
Share on other sites
I have in console and logs that both shaders loaded successfully and program loaded successfully but still have this same error. Maybe i made something wrong with creating window. Edited by Dark Engineer

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.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!