// ***********************************************************************
// ***********************************************************************
//
// Print out the information log for a program object
//
static void printProgramInfoLog(GLuint program) {
	
    int infologLength = 0;
    int charsWritten  = 0;
    GLchar *infoLog;

    printOpenGLError();  // Check for OpenGL errors

    glGetProgramiv(program, GL_INFO_LOG_LENGTH, &infologLength);

    printOpenGLError();  // Check for OpenGL errors

    if (infologLength > 0)
    {
        infoLog = (GLchar *)malloc(infologLength);
        if (infoLog == NULL)
        {
            printf("ERROR: Could not allocate InfoLog buffer\n");
            exit(1);
        }
        glGetProgramInfoLog(program, infologLength, &charsWritten, infoLog);
        printf("Program InfoLog:\n%s\n\n", infoLog);
        free(infoLog);
    }
    printOpenGLError();  // Check for OpenGL errors
}
Example #2
0
static void DS_Flush()
{
    glUseProgram(DS_Shader);

    glUniform2f(DS_ScreenSize, Game_Width, Game_Height);

    glEnableVertexAttribArray(DS_Attribute_Pos);
    glEnableVertexAttribArray(DS_Attribute_Color);

    glVertexAttribPointer(DS_Attribute_Pos, 3,
                          GL_FLOAT, false,
                          0, DS_Vertices);
    glVertexAttribPointer(DS_Attribute_Color, 4,
                          GL_FLOAT, false,
                          0, DS_VerticesColor);

    glDrawArrays(GL_TRIANGLES, 0, DS_Vertices_Count);
    printOpenGLError();
    glDisableVertexAttribArray(DS_Attribute_Pos);
    glDisableVertexAttribArray(DS_Attribute_Color);

    glUseProgram(0);

    printOpenGLError();

    DS_Vertices_Count = 0;
}
Example #3
0
/////////////////////////////////////////////////////////////////////////////
// Print out the information log for a shader object.
/////////////////////////////////////////////////////////////////////////////
static void printShaderInfoLog( GLuint shader )
{
    int infologLength = 0;
    int charsWritten  = 0;
    GLchar *infoLog;

    printOpenGLError();  // Check for OpenGL errors.

    glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infologLength);

    printOpenGLError();  // Check for OpenGL errors.

    if (infologLength > 0)
    {
        infoLog = (GLchar *)malloc(infologLength);
        if (infoLog == NULL)
        {
            printf("ERROR: Could not allocate InfoLog buffer.\n");
            exit(1);
        }
        glGetShaderInfoLog(shader, infologLength, &charsWritten, infoLog);
        if (strlen(infoLog) > 0) printf("Shader InfoLog:\n%s\n\n", infoLog);
        free(infoLog);
    }
    printOpenGLError();  // Check for OpenGL errors.
}
Example #4
0
void Obj3D::CreateVBO()
{
    Vertex cubeVerts[] =
    {
        // Front face, bot left CW
        { { -.5f, -.5f,  .5f, 1 }, { 0, 0, 1, 1 } },
        { { -.5f,  .5f,  .5f, 1 }, { 1, 0, 0, 1 } },
        { {  .5f,  .5f,  .5f, 1 }, { 0, 1, 0, 1 } },
        { {  .5f, -.5f,  .5f, 1 }, { 1, 1, 0, 1 } },
        // Back, bot left clockwise
        { { -.5f, -.5f, -.5f, 1 }, { 1, 1, 1, 1 } },
        { { -.5f,  .5f, -.5f, 1 }, { 1, 0, 0, 1 } },
        { {  .5f,  .5f, -.5f, 1 }, { 1, 0, 1, 1 } },
        { {  .5f, -.5f, -.5f, 1 }, { 0, 0, 1, 1 } }
    };

    // defines the order to draw vertices in
    GLuint cubeIndices[] = {
        0,2,1,  0,3,2,
        4,3,0,  4,7,3,
        4,1,5,  4,0,1,
        3,6,2,  3,7,6,
        1,6,5,  1,2,6,
        7,5,6,  7,4,5
    };

    glUseProgram(m_renderInfo.ProgramId);

    // Vertex array object (creates a place to store vertices)
    glGenVertexArrays(1, &m_renderInfo.VaoId);
    glBindVertexArray(m_renderInfo.VaoId);
    printOpenGLError();

    // Enables vertex shader attributes for use
    glEnableVertexAttribArray(0);
    glEnableVertexAttribArray(1);

    // creates a buffer object to transfer vertices data to vertex array
    // then buffers the data
    glGenBuffers(1, &m_renderInfo.VboId);
    glBindBuffer(GL_ARRAY_BUFFER, m_renderInfo.VboId);
    glBufferData(GL_ARRAY_BUFFER, sizeof(cubeVerts), cubeVerts, GL_STATIC_DRAW);
    printOpenGLError();

    // defines the data we just transferred to the gpu
    glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, sizeof(cubeVerts[0]), (GLvoid*)0);
    glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, sizeof(cubeVerts[0]),
                          (GLvoid*)sizeof(cubeVerts[0].Position));
    printOpenGLError();

    // Determines the draw order of the vertices we transferred to gpu
    glGenBuffers(1, &m_renderInfo.IndexBufferId);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_renderInfo.IndexBufferId);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(cubeIndices), cubeIndices, GL_STATIC_DRAW);
    printOpenGLError();

    // Detaches vertex array
    glBindVertexArray(0);
    glUseProgram(0);
}
Example #5
0
void XGLShader::printInfoLog(GLhandleARB obj)
{
    int infologLength = 0;
    int charsWritten  = 0;
    GLcharARB *infoLog;

    printOpenGLError();  // Check for OpenGL errors

    glGetObjectParameterivARB(obj, GL_OBJECT_INFO_LOG_LENGTH_ARB,
                              (GLint*)&infologLength);
    printOpenGLError();  // Check for OpenGL errors

    if (infologLength > 0)
    {
        infoLog = (GLcharARB*)malloc(infologLength);
        if (infoLog == NULL)
        {
            printf("ERROR: Could not allocate InfoLog buffer\n");
            exit(1);
        }
        glGetInfoLogARB(obj, infologLength, (GLint*)&charsWritten, infoLog);
        printf("InfoLog:\n%s\n\n", infoLog);
        free(infoLog);
    }
    printOpenGLError();  // Check for OpenGL errors
}
Example #6
0
	void GLTexture::release()
	{
		printOpenGLError();
		if(m_id > 0)
			glDeleteTextures(1, &m_id );
		printOpenGLError();
	}
Example #7
0
/* Print out the information log for a program object */
static void
printProgramInfoLog (GLuint program)
{
	GLint     infologLength = 0;
	GLint     charsWritten  = 0;
	char *infoLog;

	printOpenGLError ();  // Check for OpenGL errors
	glGetProgramiv (program, GL_INFO_LOG_LENGTH, &infologLength);
	printOpenGLError ();  // Check for OpenGL errors

	if (infologLength > 0)
    {
		infoLog = new char [infologLength];
		if (infoLog == NULL)
        {
			debugOut( "ERROR: Could not allocate InfoLog buffer");
			return;
        }
		glGetProgramInfoLog (program, infologLength, &charsWritten, infoLog);
		debugOut( "Program InfoLog:\n%s\n\n", infoLog);
		delete[] infoLog;
    }
	printOpenGLError ();  // Check for OpenGL errors
}
Example #8
0
void play(void)
{
    updateAnim();

    printOpenGLError();
    glutPostRedisplay();
    printOpenGLError();
}
Example #9
0
// On successful return, the returned program object ID can be 
// used to install the program as part of current state 
// using glUseProgram(). Example:
//
//     GLuint prog = makeShaderProgram( vertShaderStr, fragShaderStr,
//                                      myBindAttribLocFunc );
//     if ( prog != 0 ) 
//     {
//         glUseProgram( prog );
//
//         // Set values of uniform variables only 
//         // after the prog has become current.
//         glUniform3f( getUniLoc(prog, "LightPosition"), 10.0, 10.0, 15.0 );
//         printOpenGLError();
//         glUniform1f( getUniLoc(prog, "Density"), 16.0 );
//         printOpenGLError();
//     }
// 
// Use glUseProgram(0) to restore the original vertex processing 
// and fragement processing fixed functionalities.
//
/////////////////////////////////////////////////////////////////////////////
GLuint makeShaderProgram( const GLchar *vertShaderSrcStr, 
						  const GLchar *fragShaderSrcStr,
						  void (*bindAttribLocFunc)( GLuint progObj ) )
{
	GLuint vShader = 0, fShader = 0, prog = 0;  // handles to objects.
	GLint  vCompiled, fCompiled;  // status values.
	GLint  linked;

	// Create and compile the vertex shader object.
	if ( vertShaderSrcStr != NULL )
	{
		vShader = glCreateShader(GL_VERTEX_SHADER);
		glShaderSource(vShader, 1, &vertShaderSrcStr, NULL);
		glCompileShader(vShader);
		printOpenGLError();  // Check for OpenGL errors.
		glGetShaderiv(vShader, GL_COMPILE_STATUS, &vCompiled);
		printShaderInfoLog(vShader);
		if (!vCompiled ) return 0;
	}

	// Create and compile the fragment shader object.
	if ( fragShaderSrcStr != NULL )
	{
		fShader = glCreateShader(GL_FRAGMENT_SHADER);
		glShaderSource(fShader, 1, &fragShaderSrcStr, NULL);
		glCompileShader(fShader);
		printOpenGLError();  // Check for OpenGL errors.
		glGetShaderiv(fShader, GL_COMPILE_STATUS, &fCompiled);
		printShaderInfoLog(fShader);
		if (!fCompiled ) return 0;
	}

	// Create a program object and attach the two compiled shaders.
	prog = glCreateProgram();
	if ( vertShaderSrcStr != NULL ) glAttachShader(prog, vShader);
	if ( fragShaderSrcStr != NULL ) glAttachShader(prog, fShader);

	// Flag shaders for deletion. 
	// They will only be actually deleted when the program object is deleted.
	glDeleteShader(vShader);
	glDeleteShader(fShader);

	// If bindAttribLocFunc != NULL, then
	// use a user-provided function to assign generic attribute 
	// locations/indicses to generic attribute names,
	// otherwise, just let the linker do the assignment automatically.
	if ( bindAttribLocFunc != NULL ) bindAttribLocFunc( prog );

	// Link the program object.
	glLinkProgram(prog);
    printOpenGLError();  // Check for OpenGL errors.
	glGetProgramiv(prog, GL_LINK_STATUS, &linked);
    printProgramInfoLog(prog);

	if (!linked) return 0;

	return prog;
} 
// ***********************************************************************
// ***********************************************************************
int installShaders(	const GLchar *shVertex,
					const GLchar *shFragment,
					const int id) {

    GLint  vertCompiled;
    GLint  fragCompiled;    // status values

    // Create a vertex shader object and a fragment shader object

    shaderVS = glCreateShader(GL_VERTEX_SHADER);
    shaderFS = glCreateShader(GL_FRAGMENT_SHADER);

    // Load source code strings into shaders

    glShaderSource(shaderVS, 1, &shVertex, NULL);
    glShaderSource(shaderFS, 1, &shFragment, NULL);

    // Compile the vertex shader, and print out
    // the compiler log file.

    glCompileShader(shaderVS);
    printOpenGLError();  // Check for OpenGL errors
    glGetShaderiv(shaderVS, GL_COMPILE_STATUS, &vertCompiled);
    printShaderInfoLog(shaderVS);

    // Compile the fragment shader, and print out
    // the compiler log file.

    glCompileShader(shaderFS);
    printOpenGLError();  // Check for OpenGL errors
    glGetShaderiv(shaderFS, GL_COMPILE_STATUS, &fragCompiled);
    printShaderInfoLog(shaderFS);

    if (!vertCompiled || !fragCompiled)
        return 0;

    // Create a program object and attach the two compiled shaders

    shaderProg[id] = glCreateProgram();
    glAttachShader(shaderProg[id], shaderVS);
    glAttachShader(shaderProg[id], shaderFS);

    // Link the program object and print out the info log

    glLinkProgram(shaderProg[id]);
    printOpenGLError();  // Check for OpenGL errors
    glGetProgramiv(shaderProg[id], GL_LINK_STATUS, &linked);
    printProgramInfoLog(shaderProg[id]);

    if (!linked)
        return 0;

    // Install program object as part of current state

    glUseProgram(shaderProg[id]);

    return 1;
}
Example #11
0
int buildShaders (const char *vertexShader, const char *fragmentShader)
{
	GLuint VS, FS, prog;
	GLint vertCompiled, fragCompiled;
	GLint linked;

	// Create Shader Objects
	VS = glCreateShader(GL_VERTEX_SHADER);
	FS = glCreateShader(GL_FRAGMENT_SHADER);

	// Load source code strings into shaders
	glShaderSource(VS, 1, &vertexShader, NULL);
	glShaderSource(FS, 1, &fragmentShader, NULL);

	debugOut("Compiling vertex shader... \n");

	// Compile vertex shader and print log
	glCompileShader(VS);
	printOpenGLError();
	glGetShaderiv(VS, GL_COMPILE_STATUS, &vertCompiled);
	printShaderInfoLog (VS);

	debugOut("\nCompiling fragment shader... \n");

	// Compile fragment shader and print log
	glCompileShader(FS);
	printOpenGLError();
	glGetShaderiv(FS, GL_COMPILE_STATUS, &fragCompiled);
	printShaderInfoLog (FS);

	if (!vertCompiled || !fragCompiled)
		return 0;

	debugOut( "\nShaders compiled. \n");


	// Create a program object and attach the two compiled shaders
	prog = glCreateProgram();
	glAttachShader(prog, VS);
	glAttachShader(prog, FS);

	// Clean up
	glDeleteShader (VS);
	glDeleteShader (FS);

	// Link the program and print log
	glLinkProgram(prog);
	printOpenGLError();
	glGetProgramiv(prog, GL_LINK_STATUS, &linked);
	printProgramInfoLog(prog);

	if (!linked)
		return 0;

	debugOut("Shader program linked. \n");

	return prog;
}
Example #12
0
static void LoadShaders()
{
    log_info("Initializing shaders");
    DS_Shader = Shader_LoadDefault();
    printOpenGLError();

    if(!glIsProgram(DS_Shader))
    {
        log_err("Android Default Shader didn't succeed in creating");
        goto error;
    }

    DS_Attribute_Pos = glGetAttribLocation(DS_Shader, "vPosition");
    DS_Attribute_Color = glGetAttribLocation(DS_Shader, "Color");

    DS_ScreenSize = glGetUniformLocation(DS_Shader, "ScreenSize");
    printOpenGLError();

    IS_Shader = Shader_LoadImage();

    IS_Attribute_Pos = glGetAttribLocation(IS_Shader, "a_position");
    IS_Attribute_Text = glGetAttribLocation(IS_Shader, "a_texCoord");

    IS_Uniform_ScreenSize = glGetUniformLocation(IS_Shader, "ScreenSize");
    IS_Shader_uni2 = glGetUniformLocation(IS_Shader, "ColorBlend");

    FS_Shader = Shader_loadCustom("attribute vec3 vertex;\n"
                                          "attribute vec2 coords;\n"
                                          "uniform vec2 ScreenSize;\n"
                                          "varying vec2 TexCoords;\n"
                                          "void main()\n"
                                          "{\n"
                                          "gl_Position = vec4(vertex.x/ScreenSize.x*2.0-1.0, vertex.y/ScreenSize.y*2.0-1.0, vertex.z / 10.0, 1.0);\n"
                                          "TexCoords = coords;\n"
                                          "}\n "
                                          "\n ",
                                  "precision mediump float;\n"
                                          "varying vec2 TexCoords;\n"
                                          "uniform sampler2D text;\n"
                                          "uniform vec4 textColor;\n"
                                          "void main()\n"
                                          "{\n"
                                          "vec4 sampled = vec4(1.0, 1.0, 1.0, texture2D(text, TexCoords).a);\n"
                                          "gl_FragColor = textColor * sampled;\n"
                                          "}\n ");

    FS_Shader_Attrib = glGetAttribLocation(FS_Shader, "vertex");
    FS_Shader_Attrib2 = glGetAttribLocation(FS_Shader, "coords");

    FS_Shader_uni = glGetUniformLocation(FS_Shader, "ScreenSize");
    FS_Shader_uni2 = glGetUniformLocation(FS_Shader, "textColor");

    log_info("Done loading shader");

    return;
    error: Application_Error(); return;
}
Example #13
0
bool Shader::SetShaderFile(char* sVSFileName, char* sFSFileName)
{
	if (glIsProgram(m_Program))
	{
		CleanUp();
	}
	if (!ReadVertextShader(sVSFileName) || !ReadFragmentShader(sFSFileName))
	{
		return false;
	}
	GLint vertCompiled, fragCompiled;			//状态值
	GLint linked;
	//创建shader对象
	m_Vert = glCreateShader(GL_VERTEX_SHADER);
	m_Frag = glCreateShader(GL_FRAGMENT_SHADER);

	const GLchar *vv = m_VertexShader;
	const GLchar *ff = m_FragmentShader;
	//添加shader
	glShaderSource(m_Vert,1,&vv,NULL);
	glShaderSource(m_Frag,1,&ff,NULL);

	//编译shader
	glCompileShader(m_Vert);
	printOpenGLError(); //检查OpenGL错误
	//glGetObjectParameterivARB(m_Vert, GL_OBJECT_COMPILE_STATUS_ARB, &vertCompiled);
	glGetShaderiv(m_Vert, GL_COMPILE_STATUS, &vertCompiled);
	printShaderInfoLog(m_Vert);
	glCompileShader(m_Frag);
	printOpenGLError(); //检查OpenGL错误
	//glGetObjectParameterivARB(m_Frag, GL_OBJECT_COMPILE_STATUS_ARB, &fragCompiled);
	glGetShaderiv(m_Frag, GL_COMPILE_STATUS, &fragCompiled);
	printShaderInfoLog(m_Frag); 

	if (!vertCompiled || !fragCompiled)
		return false;

	//创建程序对象
	m_Program = glCreateProgram();

	//绑定shader到程序对象
	glAttachShader(m_Program,m_Vert);
	glAttachShader(m_Program,m_Frag);	

	//链接程序
	glLinkProgram(m_Program);
	printOpenGLError(); //检查OpenGL错误
	//glGetObjectParameterivARB(m_Program, GL_OBJECT_COMPILE_STATUS_ARB, &linked);
	glGetProgramiv(m_Program, GL_LINK_STATUS, &linked);  
	printProgramInfoLog(m_Program);

	if (!linked)
		return false; 
	UseShader(true);				
	return true;
}
Example #14
0
void Obj3D::DestroyShaders()
{
    glDetachShader(m_renderInfo.ProgramId, m_renderInfo.FragmentShaderId);
    glDetachShader(m_renderInfo.ProgramId, m_renderInfo.VertexShaderId);
    printOpenGLError();

    glDeleteShader(m_renderInfo.FragmentShaderId);
    glDeleteShader(m_renderInfo.VertexShaderId);
    printOpenGLError();

    glDeleteProgram(m_renderInfo.ProgramId);
    printOpenGLError();
}
Example #15
0
	void QglviewerRenderer::updateMatrix()
	{
		if(_pParent != NULL)
		{
			Matrix4f view, proj;
			/*GLdouble m[4][4], p[4][4];
			this->camera()->getProjectionMatrix(m[0]);
			this->camera()->getModelViewMatrix(p[0]);
			for(int y = 0; y < 4; ++y)
			{
			for(int x = 0; x < 4; ++x)
			{
			view[y][x] = m[y][x];
			proj[y][x] = p[y][x];
			}
			}*/

			glMatrixMode (GL_PROJECTION);
			glGetFloatv(GL_PROJECTION_MATRIX , &(proj[0][0]));
			printOpenGLError ();
			glMatrixMode(GL_MODELVIEW);
			glGetFloatv(GL_MODELVIEW_MATRIX ,&(view[0][0]));

			_pParent->updateModelViewMatrix(&view, &proj);
		}
	}
Example #16
0
GLuint 
#else
unsigned int
#endif
createGLSLProgram(const char *vp_code,const char *fp_code)
{
	
	// create program
#ifdef _WIN32
	GLuint vp,fp;
	int id;
#else
	GLhandle vp,fp;
	GLhandle id;
#endif
//	id = glCreateProgramObjectARB();
printOpenGLError();
	id = glCreateProgram();
	// if vertex program code is given, compile it
	if (vp_code) {
		vp=loadGLSLShader(vp_code,GL_VERTEX_SHADER);
		glAttachShader(id,vp);
	}
	// if fragment program code is given, compile it
	if (fp_code) {
		fp=loadGLSLShader(fp_code,GL_FRAGMENT_SHADER);
		glAttachShader(id,fp);
	}
	// link compiled shaders
	glLinkProgram(id);
	// check link success
	GLint linked;
/*
	glGetObjectParameteriv(id,GL_OBJECT_LINK_STATUS_, &linked);
	if (!linked) {
		// there was an error => display
		GLint maxLength;
		glGetObjectParameteriv(id,GL_OBJECT_INFO_LOG_LENGTH_, &maxLength);
		GLchar *infoLog=new GLchar[maxLength+1];
		glGetInfoLog(id, maxLength, (GLsizei*)NULL, infoLog);
		fprintf(stderr,"\n\n**** GLSL program failed to link ****\n%s",infoLog);
		delete [](infoLog);
		// exit on error
		exit (0);
	}
*/
	// free compiled shaders (they are now embbeded into the program)
/*
	if (vp_code) {
		glDeleteObjectARB(vp);
	}
	if (fp_code) {
		glDeleteObjectARB(fp);
	}
*/
	// set as current program
	glUseProgram(id);
	// done, return program id
	return (id);
}
Example #17
0
	void GLTexture::draw()
	{
		use();
		glPushAttrib(GL_VIEWPORT_BIT);
		glViewport(0,0, m_width, m_height);
		glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
		glMatrixMode (GL_PROJECTION);
		glPushMatrix();
		glLoadIdentity ();
		glMatrixMode (GL_MODELVIEW);
		glPushMatrix();
		glLoadIdentity();

		glBegin(GL_QUADS);
		glTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0f, -1.0f);
		glTexCoord2f(1.0f, 0.0f); glVertex2f( 1.0f, -1.0f);
		glTexCoord2f(1.0f, 1.0f); glVertex2f( 1.0f,  1.0f);
		glTexCoord2f(0.0f, 1.0f); glVertex2f(-1.0f,  1.0f);
		glEnd();

		glMatrixMode (GL_PROJECTION);
		glPopMatrix();
		glMatrixMode (GL_MODELVIEW);
		glPopMatrix();
		glPopAttrib();
		unUse();
		printOpenGLError();
	}
Example #18
0
void buffer_object::set_attrib_pointer(int index, int components, GLuint Type)
{
    bind(GL_ARRAY_BUFFER_ARB);
    glVertexAttribPointer(index, components, Type, GL_FALSE, 0, BUFFER_OFFSET(0));
    //unbind();
    printOpenGLError();
}
Example #19
0
void Window_Create(struct Window **Window, char *Title, int Width, int Height)
{
	log_info("Creating Window");

	if (*Window == NULL)
		(*Window) = malloc(sizeof(struct Window));

	check_mem((*Window));

	(*Window)->WINDOW_TITLE = Title;
	(*Window)->WINDOW_WIDTH = Width;
	(*Window)->WINDOW_HEIGHT = Height;
	Game_Width = Width;
	Game_Height = Height;

	(*Window)->Running = true;

	printOpenGLError();

	log_info("Window has been created");

	return;

	error: Window_Free(Window);
	Application_Error();
	return;
}
Example #20
0
void buffer_object::set_normal_pointer(GLuint Type)
{
    bind(GL_ARRAY_BUFFER_ARB);
    glNormalPointer(Type, 0, BUFFER_OFFSET(0));
    //unbind();
    printOpenGLError();
}
Example #21
0
void buffer_object::set_color_pointer(int components, GLuint Type)
{
    bind(GL_ARRAY_BUFFER_ARB);
    glColorPointer(components, Type, 0, BUFFER_OFFSET(0));
    //unbind();
    printOpenGLError();
}
Example #22
0
int main( int argc, char **argv )
{
    int success = 0;
    GLcharARB *VertexShaderSource, *FragmentShaderSource;

    int error = 0;

    if (Args(argc, argv) == FALSE)
        exit(0);

    glutInit( &argc, argv );
    glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE );
    glutInitWindowSize(500, 500);
    window = glutCreateWindow( "Fire and Smoke" );

    glutIdleFunc( play );
    glutDisplayFunc( display );
    glutKeyboardFunc( key );
    glutReshapeFunc( reshape );

    printOpenGLError();

    if ( !isExtensionSupported( "GL_ARB_shader_objects" )   ||
         !isExtensionSupported( "GL_ARB_fragment_shader" )  ||
         !isExtensionSupported( "GL_ARB_vertex_shader" )    ||
         !isExtensionSupported( "GL_ARB_shading_language_100" ) )
    {
        printf("OpenGL Shading Language extensions not available\n" );
        return 1;
    }

    if( error )
    {
        printf( "ERROR from wglGetProcAddress\n" );
    }

    createPoints( numParticles );

    glDepthFunc( GL_LESS );
    glEnable( GL_DEPTH_TEST );
	glClearColor( 0.0f, 0.67f, 0.94f, 1.0f );

	ParticleTime = 0.0f;

    readShaderSource( "smoke", &VertexShaderSource, &FragmentShaderSource );
    success = installParticleShaders( VertexShaderSource, FragmentShaderSource );

    if ( success )
	{
		glutMainLoop();
	}
	else
	{
		printf( "Error installing particle shaders" );
		scanf( "%d", ParticleTime );
	}

    return 0;
}
Example #23
0
void Obj3D::DestroyVBO()
{
    UnbindForRender();
    glDeleteBuffers(1, &m_renderInfo.IndexBufferId);
    glDeleteBuffers(1, &m_renderInfo.VboId);
    glDeleteVertexArrays(1, &m_renderInfo.VaoId);
    printOpenGLError();
}
Example #24
0
void Scene::draw()
{
    glClearColor(0.2f, 0.0f, 0.0f, 0.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    
	glBindBuffer(GL_ARRAY_BUFFER, _vertexBufferObject);    
    glEnableVertexAttribArray(0);
	glEnableVertexAttribArray(1);
	glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
	glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, (void*)48);

	glDrawArrays(GL_TRIANGLES, 0, 3);
    printOpenGLError();
    
	glDisableVertexAttribArray(0);
    printOpenGLError();
}
Example #25
0
void Shader::install(const GLchar *vert_source, const GLchar *frag_source)
{
    GLuint vertexShader, fragmentShader;
    GLint compiled, linked;

    program = glCreateProgram();

    // Compile vertex shader
    vertexShader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertexShader, 1, &vert_source, NULL);
    glCompileShader(vertexShader);
    printOpenGLError();
    glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &compiled);
    printShaderInfoLog(vertexShader);

    if (!compiled) {
        printf("Error compiling the shader %s", vert_source);
        exit(EXIT_FAILURE);
    }

    glAttachShader(program, vertexShader);

    // Compile fragment shader if there is one
    if (frag_source != NULL) {
        fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
        glShaderSource(fragmentShader, 1, &frag_source, NULL);

        glCompileShader(fragmentShader);
        printOpenGLError();
        glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &compiled);
        printShaderInfoLog(fragmentShader);

        if (!compiled) {
            printf("Error compiling the shader %s", frag_source);
            exit(EXIT_FAILURE);
        }

        glAttachShader(program, fragmentShader);
    }


    glLinkProgram(program);
    printOpenGLError();
    glGetProgramiv(program, GL_LINK_STATUS, &linked);
    printProgramInfoLog(program);
}
Example #26
0
static void FS_Flush() {
    printOpenGLError();

    glUseProgram(FS_Shader);
    glUniform2f(FS_Shader_uni, Game_Width, Game_Height);

    glEnableVertexAttribArray(FS_Shader_Attrib);
    glEnableVertexAttribArray(FS_Shader_Attrib2);

    glActiveTexture(GL_TEXTURE0);

    for (int i = 0; i < FS_Texture_Count; i++) {
        glBindTexture(GL_TEXTURE_2D, FS_Font_Image[i]);
        // Update content of VBO memory
        struct Vector4f Color = Vector4_Create(-1, -1, -1, -1);

        for (int j = 0; j < FS_Vertices_Count[i]; j += 4) {
            if (Color.x != FS_Color[i][j].x || Color.y != FS_Color[i][j].y
                || Color.z != FS_Color[i][j].z
                || Color.w != FS_Color[i][j].w) {
                Color = FS_Color[i][j];
                glUniform4f(FS_Shader_uni2, Color.x, Color.y, Color.z, Color.w);
            }
            IS_Vector[0] = FS_Vertices[i][j];
            IS_Vector[1] = FS_Vertices[i][j + 1];
            IS_Vector[2] = FS_Vertices[i][j + 2];
            IS_Vector[3] = FS_Vertices[i][j + 2];
            IS_Vector[4] = FS_Vertices[i][j];
            IS_Vector[5] = FS_Vertices[i][j + 3];

            glVertexAttribPointer(FS_Shader_Attrib, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), IS_Vector);
            glVertexAttribPointer(FS_Shader_Attrib2, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), &IS_Vector[0].w);

            // Render quad
            glDrawArrays(GL_TRIANGLES, 0, 6);
        }
    }
    glBindTexture(GL_TEXTURE_2D, 0);
    glUseProgram(0);
    FS_Texture_Count = 0;

    glDisableVertexAttribArray(FS_Shader_Attrib);
    glDisableVertexAttribArray(FS_Shader_Attrib2);

    printOpenGLError();
}
Example #27
0
GLint Shader::getUniLoc(GLuint program, const GLchar *name)
{
	GLint loc;
	loc = glGetUniformLocation(program, name);
	if (loc == -1)
		printf("uniform variates %s undefined! \n", name);
	printOpenGLError(); // Check for OpenGL errors
	return loc;
} 
Example #28
0
void Scene::init()
{
    _shaderProgram = createShaderProgramWithFilenames("VertexColors.vert", "VertexColors.frag");
    glUseProgram(_shaderProgram);
    printOpenGLError();
    
    // Initialize Vertex Buffer
    glGenBuffers(1, &_vertexBufferObject);
    
	glBindBuffer(GL_ARRAY_BUFFER, _vertexBufferObject);
	glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);
	glBindBuffer(GL_ARRAY_BUFFER, 0);
    printOpenGLError();
    
    // Vertex array object
    glGenVertexArrays(1, &_vertexArrayObject);
	glBindVertexArray(_vertexArrayObject);
    printOpenGLError();
}
Example #29
0
void GLWidget::initializeGL() {
	// upload texture
	glEnable(GL_TEXTURE_2D);
	glDisable(GL_DEPTH_TEST);	
	glEnable(GL_POLYGON_SMOOTH);	
	glClearColor(1.0, 0, 1.0, 0);
	_tex.create(_im->_image.data);	

	printOpenGLError();
}
Example #30
0
static void IS_Flush() {
    glUseProgram(IS_Shader);
    glUniform2f(IS_Uniform_ScreenSize, Game_Width, Game_Height);

    glEnableVertexAttribArray(IS_Attribute_Pos);
    glEnableVertexAttribArray(IS_Attribute_Text);

    for (int TextureID = 0; TextureID < IS_Texture_Count; TextureID++) {
        glBindTexture(GL_TEXTURE_2D, IS_Texture[TextureID]);
        struct Vector4f Blend = { -2, -2, -2, -2 };
        for (int i = 0; i < IS_Vertices_Count[TextureID]; i += 4) {
            IS_Vector[0] = IS_Vertices[TextureID][i];
            IS_Vector[1] = IS_Vertices[TextureID][i + 1];
            IS_Vector[2] = IS_Vertices[TextureID][i + 2];
            IS_Vector[3] = IS_Vertices[TextureID][i + 2];
            IS_Vector[4] = IS_Vertices[TextureID][i];
            IS_Vector[5] = IS_Vertices[TextureID][i + 3];
            glVertexAttribPointer(IS_Attribute_Pos, 3, GL_FLOAT, GL_FALSE, sizeof(struct Vector5f), IS_Vector);
            glVertexAttribPointer(IS_Attribute_Text, 2, GL_FLOAT, GL_FALSE, sizeof(struct Vector5f), &IS_Vector[0].w);

            if (Blend.x != IS_Blending[TextureID][i].x
                || Blend.y != IS_Blending[TextureID][i].y
                || Blend.z != IS_Blending[TextureID][i].z
                || Blend.w != IS_Blending[TextureID][i].w) {printOpenGLError();
                glUniform4f(IS_Shader_uni2, IS_Blending[TextureID][i].x,
                            IS_Blending[TextureID][i].y,
                            IS_Blending[TextureID][i].z,
                            IS_Blending[TextureID][i].w);printOpenGLError();
                Blend = IS_Blending[TextureID][i];
            }

            glDrawArrays(GL_TRIANGLES, 0, 6);
        }
    }

    glDisableVertexAttribArray(IS_Attribute_Pos);
    glDisableVertexAttribArray(IS_Attribute_Text);

    printOpenGLError();

    IS_Texture_Count = 0;
}