MCPcopy Create free account
hub / github.com/ZDoom/Raze / BuildVertexBuffer

Method BuildVertexBuffer

source/common/models/models_md2.cpp:287–328  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

285//===========================================================================
286
287void FDMDModel::BuildVertexBuffer(FModelRenderer *renderer)
288{
289 if (!GetVertexBuffer(renderer->GetType()))
290 {
291 LoadGeometry();
292
293 int VertexBufferSize = info.numFrames * lodInfo[0].numTriangles * 3;
294 unsigned int vindex = 0;
295
296 auto vbuf = renderer->CreateVertexBuffer(false, info.numFrames == 1);
297 SetVertexBuffer(renderer->GetType(), vbuf);
298
299 FModelVertex *vertptr = vbuf->LockVertexBuffer(VertexBufferSize);
300
301 for (int i = 0; i < info.numFrames; i++)
302 {
303 DMDModelVertex *vert = framevtx[i].vertices;
304 DMDModelVertex *norm = framevtx[i].normals;
305
306 frames[i].vindex = vindex;
307
308 FTriangle *tri = lods[0].triangles;
309
310 for (int ii = 0; ii < lodInfo[0].numTriangles; ii++)
311 {
312 for (int j = 0; j < 3; j++)
313 {
314
315 int ti = tri->textureIndices[j];
316 int vi = tri->vertexIndices[j];
317
318 FModelVertex *bvert = &vertptr[vindex++];
319 bvert->Set(vert[vi].xyz[0], vert[vi].xyz[1], vert[vi].xyz[2], (float)texCoords[ti].s / info.skinWidth, (float)texCoords[ti].t / info.skinHeight);
320 bvert->SetNormal(norm[vi].xyz[0], norm[vi].xyz[1], norm[vi].xyz[2]);
321 }
322 tri++;
323 }
324 }
325 vbuf->UnlockVertexBuffer();
326 UnloadGeometry();
327 }
328}
329
330//===========================================================================
331//

Callers 2

doprecacheFunction · 0.45
DrawSpriteMethod · 0.45

Calls 6

LockVertexBufferMethod · 0.80
UnlockVertexBufferMethod · 0.80
GetTypeMethod · 0.45
CreateVertexBufferMethod · 0.45
SetMethod · 0.45
SetNormalMethod · 0.45

Tested by

no test coverage detected