Ejemplo n.º 1
0
Archivo: main.cpp Proyecto: c-day/Warp
void RenderIntoBuffer(FrameBufferObject fbo, GLuint handle) 
{
	fbo.Bind();
	glDisable(GL_DEPTH_TEST);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(-fbo.size.x/2, fbo.size.x/2, -fbo.size.y/2, fbo.size.y/2, 1, 10);

	if (sh_vertices.size() == 0)
	{
		for (float i = -1.0; i <= 1.0; i += 0.01f)
		{
			for (float j = -1.0; j <= 1.0; j += 0.01f )
			{
				sh_vertices.push_back(glm::vec2( j, i ));
				sh_vertices.push_back(glm::vec2( j + 0.01, i ));
				sh_vertices.push_back(glm::vec2( j + 0.01, i + 0.01));
				sh_vertices.push_back(glm::vec2( j, i + 0.01));

				tex_vertices.push_back(glm::vec2( (j+1)/2.0f, (i+1)/2.0f ));
				tex_vertices.push_back(glm::vec2( ((j + 0.01)+1)/2.0f, (i+1)/2.0f ));
				tex_vertices.push_back(glm::vec2( ((j + 0.01)+1)/2.0f, ((i + 0.01)+1)/2.0f));
				tex_vertices.push_back(glm::vec2( (j+1)/2.0f, ((i + 0.01)+1)/2.0f));
				//Uncomment the code below to see the vertices
				/*
				cout << "Vertex Coords: " << i << ", " << j << " - ";
				cout << i + 0.01 << ", " << j << " - ";
				cout << i + 0.01 << ", " << j + 0.01 << " - ";
				cout << i << ", " << j + 0.01 << endl;
				//*/
			}
		}

		glGenBuffers(1, &vertex_coordinate_handle);
		assert(vertex_coordinate_handle != (GLuint) -1);
		glBindBuffer(GL_ARRAY_BUFFER, vertex_coordinate_handle);
		glBufferData(GL_ARRAY_BUFFER, sh_vertices.size() * sizeof(glm::vec2), &sh_vertices[0], GL_STATIC_DRAW);

		glGenBuffers(1, &tex_coord_handle);
		assert(tex_coord_handle != (GLuint) -1);
		glBindBuffer(GL_ARRAY_BUFFER, tex_coord_handle);
		glBufferData(GL_ARRAY_BUFFER, tex_vertices.size() * sizeof(glm::vec2), &tex_vertices[0], GL_STATIC_DRAW);

		glGenVertexArrays(1, &vertex_array_handle);
		glBindVertexArray(vertex_array_handle);
		glEnableVertexAttribArray(0);
		glEnableVertexAttribArray(1);

		glBindBuffer(GL_ARRAY_BUFFER, vertex_coordinate_handle);
		glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, (GLubyte *) NULL);
		glBindBuffer(GL_ARRAY_BUFFER, tex_coord_handle);
		glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, (GLubyte *) NULL);

		glBindVertexArray(0);
		glBindBuffer(GL_ARRAY_BUFFER, 0);
	}
	
	shader.Use();
	glUniform2i(shader.size_handle, fbo.size.x, fbo.size.y);
	glUniform2f(shader.mouse_handle, mouse.x, mouse.y);
	glUniform2f(shader.mouse_start_handle, mouse_start.x, mouse_start.y);

	glBindTexture(GL_TEXTURE_2D, handle);
	glUniform1i(shader.image_handle, GL_TEXTURE0 + handle);

	glViewport(0, 0, fbo.size.x, fbo.size.y);

	glClearColor(0, 0, 0.5, 0);
	glClear(GL_COLOR_BUFFER_BIT);

	assert(vertex_array_handle != (GLuint) -1);
	glBindVertexArray(vertex_array_handle);
	glDrawArrays(GL_QUADS, 0, (GLsizei) sh_vertices.size());

	glBindVertexArray(0);
	glUseProgram(0);
	glEnable(GL_DEPTH_TEST);
	fbo.Unbind();
}
Ejemplo n.º 2
0
void RenderIntoFrameBuffer()
{
	float time = float(glutGet(GLUT_ELAPSED_TIME)) / 1000.0f;

	fbo.Bind();
	glClearColor(0.1f, 0.1f, 0.1f, 0.0f);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glPushAttrib(GL_VIEWPORT_BIT | GL_TRANSFORM_BIT);
	glMatrixMode(GL_PROJECTION);
	glPushMatrix();
	glLoadIdentity();
	gluPerspective(20, double(fbo.size.x) / double(fbo.size.y), 1, 10);
	glViewport(0, 0, fbo.size.x, fbo.size.y);
	glMatrixMode(GL_MODELVIEW);
	glPushMatrix();
	glLoadIdentity();
	gluLookAt(0, 0, 5.5, 0, 0, 0, 0, 1, 0);
	glRotatef(-time * 60.0f, 1.0f, 1.0f, 0.0f);
	Axes();
	glBegin(GL_TRIANGLES);
	glColor3f(1.0f, 0.0f, 0.0f);
	glVertex2f(0.0f, 0.5f);
	glColor3f(0.0f, 1.0f, 0.0f);
	glVertex2f(-0.5f, -0.5f);
	glColor3f(0.0f, 0.0f, 1.0f);
	glVertex2f(0.5f, -0.5f);
	glEnd();
	glPopMatrix();
	glMatrixMode(GL_PROJECTION);
	glPopMatrix();
	glPopAttrib();
	fbo.Unbind();

	fbo.Bind(1);
	glClearColor(0.1f, 0.1f, 0.1f, 0.0f);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glPushAttrib(GL_VIEWPORT_BIT | GL_TRANSFORM_BIT);
	glMatrixMode(GL_PROJECTION);
	glPushMatrix();
	glLoadIdentity();
	gluPerspective(20, double(fbo.size.x) / double(fbo.size.y), 1, 10);
	glViewport(0, 0, fbo.size.x, fbo.size.y);
	glMatrixMode(GL_MODELVIEW);
	glPushMatrix();
	glLoadIdentity();
	gluLookAt(0, 0, 5.5, 0, 0, 0, 0, 1, 0);
	glRotatef(-time * 60.0f, 1.0f, 1.0f, 0.0f);
	Axes();
	glBegin(GL_TRIANGLES);
	glColor3f(1.0f, 1.0f, 0.0f);
	glVertex2f(0.0f, 0.5f);
	glColor3f(0.0f, 1.0f, 1.0f);
	glVertex2f(-0.5f, -0.5f);
	glColor3f(1.0f, 0.0f, 1.0f);
	glVertex2f(0.5f, -0.5f);
	glEnd();
	glPopMatrix();
	glMatrixMode(GL_PROJECTION);
	glPopMatrix();
	glPopAttrib();
	fbo.Unbind();
}