MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/PhysX / render

Method render

physx/samples/sampleframework/renderer/src/Renderer.cpp:294–412  ·  view source on GitHub ↗

renders the current scene to the offscreen buffers. empties the render queue when done.

Source from the content-addressed store, hash-verified

292
293// renders the current scene to the offscreen buffers. empties the render queue when done.
294void Renderer::render(const physx::PxMat44 &eye, const RendererProjection &proj, RendererTarget *target, bool depthOnly)
295{
296 PX_PROFILE_ZONE("Renderer_render",0);
297 const PxU32 numLights = (PxU32)m_visibleLights.size();
298 if(target)
299 {
300 target->bind();
301 }
302 // TODO: Sort meshes by material..
303 ScopedRender renderSection(*this);
304 if(renderSection)
305 {
306 if(!depthOnly)
307 {
308 // YOU CAN PASS THE PROJECTION MATIX RIGHT INTO THIS FUNCTION!
309 // TODO: Get rid of this.
310 if (m_screenSpaceMeshes.size())
311 {
312 physx::PxMat44 id = physx::PxMat44(PxIdentity);
313 bindViewProj(id, RendererProjection(-1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f)); //TODO: pass screen space matrices
314 renderMeshes(m_screenSpaceMeshes, RendererMaterial::PASS_UNLIT); //render screen space stuff first so stuff we occlude doesn't waste time on shading.
315 }
316 }
317
318 sortMeshes(eye);
319
320 if(depthOnly)
321 {
322 PX_PROFILE_ZONE("Renderer_render_depthOnly",0);
323 bindAmbientState(RendererColor(0,0,0,255));
324 bindViewProj(eye, proj);
325 renderMeshes(m_visibleLitMeshes, RendererMaterial::PASS_DEPTH);
326 renderMeshes(m_visibleUnlitMeshes, RendererMaterial::PASS_DEPTH);
327 }
328 else if(numLights > RENDERER_DEFERRED_THRESHOLD)
329 {
330 PX_PROFILE_ZONE("Renderer_render_deferred",0);
331 bindDeferredState();
332 bindViewProj(eye, proj);
333 renderMeshes(m_visibleLitMeshes, RendererMaterial::PASS_UNLIT);
334 renderMeshes(m_visibleUnlitMeshes, RendererMaterial::PASS_UNLIT);
335 renderMeshes(m_visibleLitTransparentMeshes, RendererMaterial::PASS_UNLIT);
336 renderDeferredLights();
337 }
338 else if(numLights > 0)
339 {
340 PX_PROFILE_ZONE("Renderer_render_lit",0);
341 bindAmbientState(m_ambientColor);
342 bindFogState(m_fogColor, m_fogDistance);
343 bindViewProj(eye, proj);
344
345#if RENDERER_ENABLE_SINGLE_PASS_LIGHTING
346 for(PxU32 i=0; i<numLights; i++)
347 {
348 m_visibleLights[i]->bind(i);
349 }
350 renderMeshes(m_visibleLitMeshes, m_visibleLights[0]->getPass());
351 for(PxU32 i=0; i<numLights; i++)

Callers 1

renderMeshesMethod · 0.45

Calls 8

getPassMethod · 0.80
PxMat44Class · 0.50
RendererProjectionClass · 0.50
RendererColorClass · 0.50
sizeMethod · 0.45
bindMethod · 0.45
unbindMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected