MCPcopy
hub / github.com/EngoEngine/engo / generateBufferContent

Method generateBufferContent

common/render_shaders_default.go:345–398  ·  view source on GitHub ↗
(ren *RenderComponent, space *SpaceComponent, buffer []float32)

Source from the content-addressed store, hash-verified

343}
344
345func (s *basicShader) generateBufferContent(ren *RenderComponent, space *SpaceComponent, buffer []float32) bool {
346 // We shouldn't use SpaceComponent to get width/height, because this usually already contains the Scale (which
347 // is being added elsewhere, so we don't want to over-do it)
348 w := ren.Drawable.Width()
349 h := ren.Drawable.Height()
350
351 tint := colorToFloat32(ren.Color)
352
353 u, v, u2, v2 := ren.Drawable.View()
354
355 if ren.Repeat != NoRepeat {
356 u2 = space.Width / (ren.Drawable.Width() * ren.Scale.X)
357 w *= u2
358 v2 = space.Width / (ren.Drawable.Height() * ren.Scale.Y)
359 h *= v2
360 }
361
362 var changed bool
363
364 //setBufferValue(buffer, 0, 0, &changed)
365 //setBufferValue(buffer, 1, 0, &changed)
366 setBufferValue(buffer, 2, u, &changed)
367 setBufferValue(buffer, 3, v, &changed)
368 setBufferValue(buffer, 4, tint, &changed)
369
370 setBufferValue(buffer, 5, w, &changed)
371 //setBufferValue(buffer, 6, 0, &changed)
372 setBufferValue(buffer, 7, u2, &changed)
373 setBufferValue(buffer, 8, v, &changed)
374 setBufferValue(buffer, 9, tint, &changed)
375
376 setBufferValue(buffer, 10, w, &changed)
377 setBufferValue(buffer, 11, h, &changed)
378 setBufferValue(buffer, 12, u2, &changed)
379 setBufferValue(buffer, 13, v2, &changed)
380 setBufferValue(buffer, 14, tint, &changed)
381
382 //setBufferValue(buffer, 15, 0, &changed)
383 setBufferValue(buffer, 16, h, &changed)
384 setBufferValue(buffer, 17, u, &changed)
385 setBufferValue(buffer, 18, v2, &changed)
386 setBufferValue(buffer, 19, tint, &changed)
387
388 // Since each sprite in the batch has a different transform, we can't just send the model matrix into
389 // the shader and let the GPU take care of it. Instead, we need to multiply the current sprite's model matrix
390 // with the position component for each vertex of the current sprite on the CPU, and send the transformed
391 // positions to the shader directly.
392 modelMatrix := s.makeModelMatrix(ren, space)
393 s.multModel(modelMatrix, buffer[:2])
394 s.multModel(modelMatrix, buffer[5:7])
395 s.multModel(modelMatrix, buffer[10:12])
396 s.multModel(modelMatrix, buffer[15:17])
397 return changed
398}
399
400func (s *basicShader) multModel(m *engo.Matrix, v []float32) {
401 tmp := engo.MultiplyMatrixVector(m, v)

Callers 1

updateBufferMethod · 0.95

Calls 7

makeModelMatrixMethod · 0.95
multModelMethod · 0.95
colorToFloat32Function · 0.85
setBufferValueFunction · 0.85
WidthMethod · 0.65
HeightMethod · 0.65
ViewMethod · 0.65

Tested by

no test coverage detected