Exemplo n.º 1
0
bool RenderObject::render() {
	// Objektänderungen validieren
	validateObject();

	// Falls das Objekt nicht sichtbar ist, muss gar nichts gezeichnet werden
	if (!_visible)
		return true;

	// Falls notwendig, wird die Renderreihenfolge der Kinderobjekte aktualisiert.
	if (_childChanged) {
		sortRenderObjects();
		_childChanged = false;
	}

	// Objekt zeichnen.
	doRender();

	// Dann müssen die Kinder gezeichnet werden
	RENDEROBJECT_ITER it = _children.begin();
	for (; it != _children.end(); ++it)
		if (!(*it)->render())
			return false;

	return true;
}
Exemplo n.º 2
0
bool RenderObject::updateObjectState() {
	// Falls sich das Objekt verändert hat, muss der interne Zustand neu berechnet werden und evtl. Update-Regions für den nächsten Frame
	// registriert werden.
	if ((calcBoundingBox() != _oldBbox) ||
	        (_visible != _oldVisible) ||
	        (_x != _oldX) ||
	        (_y != _oldY) ||
	        (_z != _oldZ) ||
	        _refreshForced) {
		// Renderrang des Objektes neu bestimmen, da sich dieser verändert haben könnte
		if (_parentPtr.isValid())
			_parentPtr->signalChildChange();

		// Die Bounding-Box neu berechnen und Update-Regions registrieren.
		updateBoxes();

		// Änderungen Validieren
		validateObject();
	}

	// Dann muss der Objektstatus der Kinder aktualisiert werden.
	RENDEROBJECT_ITER it = _children.begin();
	for (; it != _children.end(); ++it)
		if (!(*it)->updateObjectState())
			return false;

	return true;
}
Exemplo n.º 3
0
void RenderObject::preRender(RenderObjectQueue *renderQueue) {
	// Objektänderungen validieren
	validateObject();

	if (!_visible)
		return;

	// Falls notwendig, wird die Renderreihenfolge der Kinderobjekte aktualisiert.
	if (_childChanged) {
		sortRenderObjects();
		_childChanged = false;
	}

	renderQueue->add(this);

	RENDEROBJECT_ITER it = _children.begin();
	for (; it != _children.end(); ++it)
		(*it)->preRender(renderQueue);

}