Example #1
0
int main()
{
    Game game(800, 600, "Hello World", false);
    Shader shader;
    shader.Load("./res/shader");
    Mesh mesh;
    /*const GLfloat vertices[] = {
        -0.5f,  0.5f, 1.0f, 1.0f, 0.0f, 0.0f, // Top-left
        0.5f,  0.5f, 1.0f, 0.0f, 1.0f, 0.0f, // Top-right
        0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 1.0f, // Bottom-right
        -0.5f, -0.5f, 1.0f, 1.0f, 1.0f, 1.0f  // Bottom-left
    };*/
    Vertex vertices[] = { Vertex(glm::vec3(-0.5, 0.5, 1.0), glm::vec3(0.0, 1.0, 0.0)),
                            Vertex(glm::vec3(0.5, 0.5, 1.0), glm::vec3(1.0, 1.0, 0.0)),
                            Vertex(glm::vec3(0.5, -0.5, 1.0), glm::vec3(0.0, 0.0, 1.0)),
                            Vertex(glm::vec3(-0.5, -0.5, 1.0), glm::vec3(0.0, 0.0, 0.0)), };
    ///setup element array buffer
    GLuint elements[] = {
        0, 1, 2,
        2, 3, 0,
    };

    GLuint ebo;
    glGenBuffers(1, &ebo);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER,
        sizeof(elements), elements, GL_STATIC_DRAW);

    cout << "Shader programID is: " << shader.GetProgramID() << endl;
    mesh.Init(&vertices[0], 4, shader.GetProgramID());
    GLenum errCode;
    const GLubyte* errString;
    errCode = glGetError();
    if (errCode != GL_NO_ERROR)
    {
        cout << "GL error code: " << errCode << endl;
        ofstream ofs;
        ofs.open("glerror.txt");
        ofs << errCode << endl;
        ofs.close();
    }
    if(glIsProgram(shader.GetProgramID()) == GL_FALSE)
    {
        cout << "The program with id " << shader.GetProgramID() << " does not exist." << endl;
    }
    else
    {
        cout << "Shader with program id " << shader.GetProgramID() << " has been created." << endl;
    }

    float counter = 0.0f;

    while(!game.isClosed)
    {
        game.PollInput();

        game.GetWindow()->r = sinf(counter);
        game.GetWindow()->g = cosf(counter);
        game.GetWindow()->b = cosf(counter);

        game.Update();

        counter += 0.01f;
        if(counter >= 360.0f)
        {
            counter = 0.0f;
        }
    }
    glDeleteShader(shader.GetProgramID());
    game.Quit();
    return 0;
}
Example #2
0
int main()
{
	// Init GLFW
	glfwInit();
	
	// Create a GLFWwindow object that we can use for GLFW's functions
	Window window = Window(WIDTH, HEIGHT, TITLE);
	window.DefineViewport();

	//glfwSetInputMode(window.getWindowPtr(), GLFW_CURSOR, GLFW_CURSOR_DISABLED);			
	/// ^(Maybe use this later)

	// Callback functions
	glfwSetKeyCallback(window.getWindowPtr() , key_callback);

	// Init GLEW
	glewExperimental = GL_TRUE;
	glewInit();

	// Enable alpha channel transparency
	glEnable(GL_BLEND);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

	// Load and compile shaders to a program
	Shader ShaderProgram = Shader("../deps/shaders/shadervert.vs", "../deps/shaders/shaderfrag.fs");

	// Load explosion graphics
	extern_Explosion.Init(ShaderProgram.GetProgramID());

	// Load texture/Game objects
	Texture2D texture_background1 = Texture2D("../deps/textures/backgroundSpace_01.1.png", PNG_RGB);
	SpriteMap Background = SpriteMap(texture_background1, 1.0f, 1.0f, glm::vec3(0.0f, 0.0f, 0.0f), 1.0f, BACKGROUND);

	Player PlayerShip;
	PlayerShip.Init(moveSpeed);

	Enemy Enemies;
	Enemies.Init();

	// Projection matrix: ortho for 2D
	glm::mat4 proj = glm::ortho(0, window.getWidth(), 0, window.getHeight());


	// Game loop
	while (!window.ShouldClose())
	{
		double startFrame = glfwGetTime();  ///< for FPS limiting

		// Check if any events have been activiated and call callback function (via GLFW)
		glfwPollEvents();

		// Clear the colorbuffer
		glClearColor(0.6f, 0.8f, 0.8f, 1.0f);
		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

		/*	   Drawing	    */

		ShaderProgram.Use();

		// Background position and drawing calculations - just identity matrix
		glm::mat4 model;
		GLint modelLoc = glGetUniformLocation(ShaderProgram.GetProgramID(), "model");
		glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));

		Background.BackgroundScroll(scrollSpeed);
		Background.Draw();

		Collision::EnemyHit(&PlayerShip, &Enemies);
		Collision::PlayerHit(&PlayerShip, &Enemies);
		Collision::ShipsCollide(&PlayerShip, &Enemies);

		PlayerShip.Move(keys);
		PlayerShip.AddShots(keys);
		PlayerShip.Draw(ShaderProgram.GetProgramID());
		
		Enemies.Move();
		Enemies.Shoot(PlayerShip.GetPosition());
		Enemies.Draw(ShaderProgram.GetProgramID());

		extern_Explosion.Draw();

		// FPS Calculation/Limiting
		float fps = CalculateFPS();
		static int printFPS = 0;
		if (printFPS == 100) {
			Enemies.Add(EN_0, PlayerShip.GetPosition());
			Enemies.Add(EN_1, PlayerShip.GetPosition());
			std::cout << fps << std::endl;
			printFPS = 0;
		} else {
			printFPS++;
		}
		
		
		LimitFPS(FPS, startFrame);
		
		if (PlayerShip.GetLives() <= 0)
		{
			window.Close();
		}

		// Swap the screen buffers
		window.SwapBuffers();
	}

	Background.Delete();
	PlayerShip.Delete();
	Enemies.DeleteAll();
	extern_Explosion.DeleteAll();

	// Close GLFW
	glfwTerminate();
	return 0;
}
void PickingRenderer::_RenderMesh( BasicObject* tempObject )
{
	Transform* cameraTransform	=	_renderingCamera->transform;
	Camera* cameraComponent		=	_renderingCamera->camera;
	Material* material			=	tempObject->meshDrawing->GetMaterial();
	Mesh* mesh					=	tempObject->meshDrawing->GetMesh();

	if ( material == NULL || mesh == NULL )		return;

	Shader* shader				=	material->GetShader();

	uint programID = shader->GetProgramID( E_ShadingType::Picking );
	_gl->glUseProgram( programID );

	_gl->glBindBuffer( GL_ARRAY_BUFFER,			mesh->GetVertexBufferID() );
	_gl->glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, mesh->GetIndexBufferID() );


	_gl->glEnableVertexAttribArray(0);
    _gl->glVertexAttribPointer( 0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid *) (offsetof(Vertex, position)) );


	int worldLoc			= shader->GetUniformLocation( E_ShadingType::Picking, "ME3D_world" );
    int viewLoc				= shader->GetUniformLocation( E_ShadingType::Picking, "ME3D_view" );
    int projectionLoc		= shader->GetUniformLocation( E_ShadingType::Picking, "ME3D_projection" );
    int scaleMatLoc			= shader->GetUniformLocation( E_ShadingType::Picking, "ME3D_scaleMat" );
    int rotationMatLoc		= shader->GetUniformLocation( E_ShadingType::Picking, "ME3D_rotationMat" );
    int positionMatLoc		= shader->GetUniformLocation( E_ShadingType::Picking, "ME3D_positionMat" );
	int camRotationMatLoc	= shader->GetUniformLocation( E_ShadingType::Picking, "ME3D_camRotationMat" );

	int objectIndexLoc		= shader->GetUniformLocation( E_ShadingType::Picking, "ME3D_uniqueIndex" );

	Matrix4 worldMatrix			= tempObject->transform->GetWorldMatrix();
	Matrix4 viewMatrix			= cameraTransform->GetViewMatrix();
	Matrix4 projectionMatrix	= cameraComponent->GetProjectionMatrix();
	Matrix4 scaleMatrix			= tempObject->transform->GetScaleMatrix();
	Matrix4 rotationMatrix		= tempObject->transform->GetRotationMatrix();
	Matrix4 positionMatrix		= tempObject->transform->GetPositionMatrix();
	Matrix4 camRotationMatrix	= cameraTransform->GetRotationMatrix();

	_gl->glUniformMatrix4fv	( worldLoc,				1, GL_FALSE, worldMatrix.GetValuePtr() );
	_gl->glUniformMatrix4fv	( viewLoc,				1, GL_FALSE, viewMatrix.GetValuePtr() );
	_gl->glUniformMatrix4fv	( projectionLoc,		1, GL_FALSE, projectionMatrix.GetValuePtr() );
	_gl->glUniformMatrix4fv	( scaleMatLoc,			1, GL_FALSE, scaleMatrix.GetValuePtr() );
	_gl->glUniformMatrix4fv	( rotationMatLoc,		1, GL_FALSE, rotationMatrix.GetValuePtr() );
	_gl->glUniformMatrix4fv	( positionMatLoc,		1, GL_FALSE, positionMatrix.GetValuePtr() );
	_gl->glUniformMatrix4fv	( camRotationMatLoc,	1, GL_FALSE, camRotationMatrix.GetValuePtr() );

	_gl->glUniform1i		( objectIndexLoc, tempObject->uniqueIndex );
	

	if ( material->IsWireframe() )
	{
		_gl->glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
		_gl->glLineWidth( material->GetLineWidth() );
		_gl->glDisable( GL_CULL_FACE );
	}
	else
	{
		_gl->glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );

		if ( material->GetFaceCulling() == E_FaceCulling::CULL_NONE )
		{
			_gl->glDisable( GL_CULL_FACE );
		}
		else 
		{
			_gl->glEnable(GL_CULL_FACE);

			if ( material->GetFaceCulling() == E_FaceCulling::CULL_BACK )
				_gl->glCullFace( GL_BACK );
			if ( material->GetFaceCulling() == E_FaceCulling::CULL_FRONT )
				_gl->glCullFace( GL_FRONT );
		}
	}


	if ( mesh->GetMeshType() == E_MeshType::POLYGON )
		_gl->glDrawElements( GL_TRIANGLES, mesh->GetNumIndices(), GL_UNSIGNED_INT, 0 );
	else
		_gl->glDrawElements( GL_LINES, mesh->GetNumIndices(), GL_UNSIGNED_INT, 0 );

	// unbind
	_gl->glBindBuffer( GL_ARRAY_BUFFER, 0 );
	_gl->glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 );
	_gl->glUseProgram( 0 );
}