Esempio n. 1
0
void OctreeRenderer::render(RenderArgs::RenderMode renderMode,
                            RenderArgs::RenderSide renderSide,
                            RenderArgs::DebugFlags renderDebugFlags) {
    RenderArgs args(this, _viewFrustum, getSizeScale(), getBoundaryLevelAdjust(),
                    renderMode, renderSide, renderDebugFlags);
    if (_tree) {
        _tree->lockForRead();
        _tree->recurseTreeWithOperation(renderOperation, &args);
        _tree->unlock();
    }
    _meshesConsidered = args._meshesConsidered;
    _meshesRendered = args._meshesRendered;
    _meshesOutOfView = args._meshesOutOfView;
    _meshesTooSmall = args._meshesTooSmall;

    _elementsTouched = args._elementsTouched;
    _itemsRendered = args._itemsRendered;
    _itemsOutOfView = args._itemsOutOfView;
    _itemsTooSmall = args._itemsTooSmall;

    _materialSwitches = args._materialSwitches;
    _trianglesRendered = args._trianglesRendered;
    _quadsRendered = args._quadsRendered;

    _translucentMeshPartsRendered = args._translucentMeshPartsRendered;
    _opaqueMeshPartsRendered = args._opaqueMeshPartsRendered;

}
Esempio n. 2
0
DeferredVisualUpdate SpriteVisual::update(ScreenTransform const& trans, Vector2 const& pos) {
	const float sizeScale = getSizeScale();
	float upperX = pos.x() - m_size.x() * 0.5f * sizeScale;
	float upperY = pos.y() - m_size.y() * 0.5f * sizeScale;

	float lowerX = pos.x() + m_size.x() * 0.5f * sizeScale;
	float lowerY = pos.y() + m_size.y() * 0.5f * sizeScale;

	trans.quadToScreen(upperX, upperY, lowerX, lowerY, isIngame());
	// first vertex of first trig

	// todo: can also be computed once and stored with the visual, or percompute the 1 / max
	// * 1.2f because we want a 20 percent buffer, because 1.0 is "reserved" for gui objects and text
	const float zVal = LayerTools::computeZ(getPriority());

	//VertexBufferArray * vtxBuffer = &m_vertexBuffer;

	// can be executed on the render thread, if needed
	auto lmdUpdate = [ upperX, upperY, lowerX, lowerY, zVal ] ( VisualBase * vb )
	{
		SpriteVisual * sv = static_cast<SpriteVisual *> ( vb );

		sv->m_vertexBuffer[0] = upperX;
		sv->m_vertexBuffer[1] = -lowerY;
		sv->m_vertexBuffer[2] = zVal;
		// second vertex of first trig
			sv->m_vertexBuffer[3] = lowerX;
			sv->m_vertexBuffer[4] = -lowerY;
			sv->m_vertexBuffer[5] = zVal;
			// third vertex of first trig
			sv->m_vertexBuffer[6] = lowerX;
			sv->m_vertexBuffer[7] = -upperY;
			sv->m_vertexBuffer[8] = zVal;
			// first ( and only ) vertex of second trig
			sv->m_vertexBuffer[9] = upperX;
			sv->m_vertexBuffer[10] = -upperY;
			sv->m_vertexBuffer[11] = zVal;
		};

	lmdUpdate(this);

	return lmdUpdate;
}