Ejemplo n.º 1
0
	inline void Renderer::Render(Camera* camera, Scene* scene) {
		
		if (p_surface == NULL || camera == NULL) return;

		if (m_width != p_surface->w || m_height != p_surface->h) {
			m_width = p_surface->w;
			m_height = p_surface->h;
			SetViewport(0.0f, 0.0f, m_width, m_height);

			if (camera->autoUpdate) {
				camera->Set(m_width, m_height);
				camera->Update();
			}
		}

		SetClearColor(camera->background, 1.0f);
		ClearCanvas(m_clearColor, m_clearDepth, m_clearStencil);
		
		if (scene == NULL) return;
		uint32 i, il;
		
		Array<Sprite*>* sprites = scene->GetComponents<Sprite>();
		if (sprites != NULL) {
			for (i = 0, il = sprites->Length(); i < il; i++) {
				Sprite* sprite = (*sprites)[i];
				GameObject* gameObject = sprite->GetGameObject();
				if (gameObject == NULL) continue;
				Transform* transform = gameObject->GetComponent<Transform>();
				if (transform == NULL) continue;
				
				transform->UpdateMatrices(camera->view);
				m_RenderSprite(camera, sprite, transform);
			}
		}
		
		Array<MeshFilter*>* meshFilters = scene->GetComponents<MeshFilter>();
		if (meshFilters != NULL) {
			for (i = 0, il = meshFilters->Length(); i < il; i++) {
				MeshFilter* meshFilter = (*meshFilters)[i];
				GameObject* gameObject = meshFilter->GetGameObject();
				if (gameObject == NULL) continue;
				Transform* transform = gameObject->GetComponent<Transform>();
				if (transform == NULL) continue;
				
				transform->UpdateMatrices(camera->view);
				m_RenderMeshFilter(camera, meshFilter, transform);
			}
		}
	}