[ create a new paste ] login | about

Link: http://codepad.org/K5GrgTiz    [ raw code | fork ]

C, pasted on Jun 18:
#include "glm/glm.hpp"
#include "glm/gtc/matrix_transform.hpp"
#include "glm/gtc/type_ptr.hpp"

#include "LogicalEngine.hpp"

LogicalEngine::LogicalEngine() : wnd(800, 600, "Hello World"), vertices_buffer(2)
{
	shaders_init();

	///

	glClearColor(1.0f, 0.4f, 0.5f, 1.0f);
	glEnable(GL_DEPTH_TEST);

	GLfloat V[3 * 4] = {
		0.0f, 0.0f, 1.0f,
		0.0f, 1.0f, 1.0f,
		1.0f, 1.0f, 1.0f,
		1.0f, 0.0f, 1.0f
	};

	GLfloat P[3 * 4] = {
		1.0f, 1.0f, 1.0f,
		1.0f, 1.0f, 1.0f,
		1.0f, 1.0f, 1.0f,
		1.0f, 1.0f, 1.0f,
	};

	Vertices & vbuff = vertices_buffer.get_vertices_ref(0);

	vbuff.add_vertices_data(V);
	pos_loc = glGetAttribLocation(program1.get_program_id(), "inPos");
	glVertexAttribPointer(pos_loc, 3, GL_FLOAT, GL_FALSE, 0, NULL);

	Vertices & pbuff = vertices_buffer.get_vertices_ref(1);
	pbuff.add_vertices_data(P);
	col_loc = glGetAttribLocation(program1.get_program_id(), "inCol");
	glVertexAttribPointer(col_loc, 3, GL_FLOAT, GL_FALSE, 0, NULL);

	matrix_projection = glGetUniformLocation(program1.get_program_id(), "mp");
	matrix_model = glGetUniformLocation(program1.get_program_id(), "mm");
	matrix_view = glGetUniformLocation(program1.get_program_id(), "mv");
}

void LogicalEngine::shaders_init()
{
	Shader shader1 = Shader::prepare_shader("test.vertex.glsl", GL_VERTEX_SHADER);
	Shader shader2 = Shader::prepare_shader("test.fragment.glsl", GL_FRAGMENT_SHADER);

	program1.attach_shader(shader1, "vertex1");
	program1.attach_shader(shader2, "fragment1");

	if(!(shader1.compile() && shader2.compile()))
	{
		exit(1);
	}

	program1.do_linking();
}

void LogicalEngine::main_loop()
{
	sf::Event evt;
	while(wnd.IsOpened())
	{
		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
		glClearDepth(1.0f);

		glm::mat4 Projection = glm::perspective(60.0f, 4.0f/3.0f, -0.1f, 7.0f);
		glm::mat4 View = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -5.f));
		glm::mat4 Model = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));

		glEnableVertexAttribArray(pos_loc);
		glEnableVertexAttribArray(col_loc);
		program1.use();

		glUniformMatrix4fv(matrix_projection, 1, GL_FALSE, glm::value_ptr(Projection));
		glUniformMatrix4fv(matrix_view, 1, GL_FALSE, glm::value_ptr(View));
		glUniformMatrix4fv(matrix_model, 1, GL_FALSE, glm::value_ptr(Model));

		glDrawArrays(GL_QUADS, 0, 4);

		ShaderProgram::use_no_program();
		glDisableVertexAttribArray(col_loc);
		glDisableVertexAttribArray(pos_loc);

		while(wnd.GetEvent(evt))
		{
			switch(evt.Type)
			{
			case sf::Event::Closed:
				exit(0);
			case sf::Event::Resized:
				glViewport(0, 0, evt.Size.Width, evt.Size.Height);
				break;
			default:
				break;
			}
		}

		glFlush();
		wnd.Display();
		sf::Sleep(0.5f);
	}
}

LogicalEngine::~LogicalEngine()
{

}

//// SHADER:


#version 150

in vec4 inPos;
in vec4 inCol;

uniform mat4x4 mm;
uniform mat4x4 mp;
uniform mat4x4 mv;

out vec4 color;

void main(void)
{
	gl_Position = mp * mm * mv * inPos;
	//gl_Position = inPos;
	color = inCol;
}


Create a new paste based on this one


Comments: