MCPcopy Create free account
hub / github.com/TombEngine/TombEngine / DrawMesh

Method DrawMesh

TombEngine/Renderer/RendererDraw.cpp:3374–3470  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3372 }
3373
3374 void Renderer::DrawMesh(RendererItem* itemToDraw, RendererMesh* mesh, RendererObjectType type, int boneIndex, bool skinned, RenderView& view, RendererPass rendererPass)
3375 {
3376 if (rendererPass == RendererPass::CollectTransparentFaces)
3377 {
3378 for (auto& bucket : mesh->Buckets)
3379 {
3380 if (bucket.NumVertices == 0)
3381 continue;
3382
3383 auto blendMode = GetBlendModeFromAlpha(bucket.BlendMode, itemToDraw->Color.w);
3384
3385 if (IsSortedBlendMode(blendMode))
3386 {
3387 for (int p = 0; p < bucket.Polygons.size(); p++)
3388 {
3389 auto center = Vector3::Transform(bucket.Polygons[p].Centre, itemToDraw->InterpolatedAnimTransforms[boneIndex] * itemToDraw->InterpolatedWorld);
3390 int dist = Vector3::Distance(center, Camera.pos.ToVector3());
3391
3392 auto object = RendererSortableObject{};
3393 object.ObjectType = type;
3394 object.Centre = center;
3395 object.Distance = dist;
3396 object.Skinned = skinned;
3397 object.BlendMode = blendMode;
3398 object.Bucket = &bucket;
3399 object.Item = itemToDraw;
3400 object.LightMode = mesh->LightMode;
3401 object.Polygon = &bucket.Polygons[p];
3402
3403 view.TransparentObjectsToDraw.push_back(object);
3404 }
3405 }
3406 }
3407 }
3408 else
3409 {
3410 bool bindTextureAndMaterialsRequired = true;
3411
3412 for (int animated = 0; animated < 2; animated++)
3413 {
3414 for (auto& bucket : mesh->Buckets)
3415 {
3416 if ((animated == 1) ^ bucket.Animated || bucket.NumVertices == 0)
3417 {
3418 continue;
3419 }
3420
3421 // HACK: waterfalls have a hardcoded step
3422 // We bind non animated textures in this case because the engine calculates at runtime the scroll effect
3423 // TODO: in the future uniform this thing
3424 if (IsWaterfall(itemToDraw->ObjectID) && animated == 1)
3425 continue;
3426
3427 auto blendMode = GetBlendModeFromAlpha(bucket.BlendMode, itemToDraw->Color.w);
3428
3429 if (rendererPass == RendererPass::ShadowMap)
3430 {
3431 SetBlendMode(BlendMode::Opaque);

Callers

nothing calls this directly

Calls 3

sizeMethod · 0.45
ToVector3Method · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected