void TBRendererGL::BeginPaint(int render_target_w, int render_target_h)
{
#ifdef TB_RUNTIME_DEBUG_INFO
	dbg_bitmap_validations = 0;
#endif

	TBRendererBatcher::BeginPaint(render_target_w, render_target_h);

	g_current_texture = (GLuint)-1;
	g_current_batch = nullptr;

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	Ortho2D(0, (GLfloat)render_target_w, (GLfloat)render_target_h, 0);
	glMatrixMode(GL_MODELVIEW);
	glViewport(0, 0, render_target_w, render_target_h);
	glScissor(0, 0, render_target_w, render_target_h);

	glEnable(GL_BLEND);
	glEnable(GL_TEXTURE_2D);
	glDisable(GL_DEPTH_TEST);
	glEnable(GL_SCISSOR_TEST);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

	glEnableClientState(GL_COLOR_ARRAY);
	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
	glEnableClientState(GL_VERTEX_ARRAY);
}
Exemple #2
0
void MainWindow::OnDisplay()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	m_rc->PushModelView();
		gun->Draw();

		camera.ApplyTransform(m_rc);
		skybox->Draw();

		static int viewLoc = mainShader->GetUniformLocation("View");
		Matrix44f view = m_rc->GetModelView();
		mainShader->Use();
		glUniformMatrix4fv(viewLoc, 1, FALSE, view.data);

		int drawCalls = sponza->Draw();
		WCHAR buf[20] = L"";
		StringCchPrintfW(buf, 20, L"Meshes: %d", drawCalls);
		text->SetText(buf);
		
		glEnable(GL_BLEND);
		glDisable(GL_CULL_FACE);
	
		if (fShowMuzzleFlash) {
			m_rc->PushModelView();
				m_rc->SetModelView(Matrix44f::Identity());
				muzzle_flash->Draw();
			m_rc->PopModelView();
		}

		m_rc->PushModelView();
		m_rc->PushProjection();
			float viewport[4] = { };
			glGetFloatv(GL_VIEWPORT, viewport);
			m_rc->SetProjection(Ortho2D(0, viewport[2], viewport[3], 0));
			m_rc->SetModelView(Matrix44f::Identity());

			crosshair->location = Vector3f(viewport[2]*0.5f, viewport[3]*0.5f, 0);
			crosshair->Draw();
		m_rc->PopModelView();
		m_rc->PopProjection();

		glEnable(GL_CULL_FACE);
		glDisable(GL_BLEND);

		text->Draw(10, 10);
	m_rc->PopModelView();
}
Exemple #3
0
void Text2D::Draw(int x, int y)
{
	glEnable(GL_BLEND);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	font->fontTexture.Bind();

	rc->PushProjection();
	rc->PushModelView();

	float viewport[4] = { };
	glGetFloatv(GL_VIEWPORT, viewport);
	rc->SetProjection(Ortho2D(0, viewport[2], viewport[3], 0));
	rc->SetModelView(Translate((float)x, (float)y, 0));
	
	if (!GLEW_ARB_shader_objects)
		drawFixed(x, y);
	else
	{
		glEnableVertexAttribArray(AttribsLocations.Vertex);
		glEnableVertexAttribArray(AttribsLocations.TexCoord);

		prog->Use();
		prog->Uniform("Color", 1, font.color.data);

		vertices.AttribPointer(AttribsLocations.Vertex, 3, GL_FLOAT);
		texCoords.AttribPointer(AttribsLocations.TexCoord, 2, GL_FLOAT);
		vertices.DrawArrays(GL_TRIANGLES, 0, numVerts);

		glDisableVertexAttribArray(AttribsLocations.Vertex);
		glDisableVertexAttribArray(AttribsLocations.TexCoord);
	}
	
	glDisable(GL_BLEND);
	rc->PopModelView();
	rc->PopProjection();
}
Exemple #4
0
void MainWindow::OnDisplay()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	m_rc->PushModelView();
		mainShader->Uniform("Mode", 1);
		gun->Draw();

		camera.ApplyTransform(m_rc);
		skybox->Draw();		

		Matrix44f view = m_rc->GetModelView();
		mainShader->UniformMatrix("View", 1, false, view.data);

		mainShader->Uniform("Mode", 3);
		for (int i = 0; i < numTargets; i++)
			targets[i].model->Draw();

		terrainShader->Use();
		terrainShader->UniformMatrix("View", 1, false, view.data);
		tex_ground->Bind();
		tex_grass->Bind();
		tex_rocks->Bind();
		terrain->Draw();

		glEnable(GL_BLEND);
		glDisable(GL_CULL_FACE);

		glEnableVertexAttribArray(bottomPosLoc);
		glEnableVertexAttribArray(topPosLoc);
		glVertexAttribDivisor(bottomPosLoc, 1);
		glVertexAttribDivisor(topPosLoc, 1);
		grass_pos[0]->AttribPointer(bottomPosLoc, 3, GL_FLOAT);
		grass_pos[1]->AttribPointer(topPosLoc, 3, GL_FLOAT);
		grassShader->Use();
		grass_mesh->DrawInstanced(grassInstanceCount);
		glVertexAttribDivisor(bottomPosLoc, 0);
		glVertexAttribDivisor(topPosLoc, 0);
		glDisableVertexAttribArray(bottomPosLoc);
		glDisableVertexAttribArray(topPosLoc);

		if (fShowMuzzleFlash) {
			m_rc->PushModelView();
				m_rc->SetModelView(Matrix44f::Identity());
				mainShader->Uniform("Mode", 2);
				muzzle_flash->Draw();
			m_rc->PopModelView();
		}

		m_rc->PushModelView();
		m_rc->PushProjection();
			float viewport[4] = { };
			glGetFloatv(GL_VIEWPORT, viewport);
			m_rc->SetProjection(Ortho2D(0, viewport[2], viewport[3], 0));
			m_rc->SetModelView(Matrix44f::Identity());

			mainShader->Uniform("Mode", 2);
			crosshair->location = Vector3f(viewport[2]*0.5f, viewport[3]*0.5f, 0);
			crosshair->Draw();
		m_rc->PopModelView();
		m_rc->PopProjection();

		glEnable(GL_CULL_FACE);
		glDisable(GL_BLEND);
	m_rc->PopModelView();
}