MCPcopy Create free account
hub / github.com/defold/defold / CreateParticleRenderContext

Function CreateParticleRenderContext

engine/particle/src/particle.cpp:1922–1974  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1920 }
1921
1922 static void CreateParticleRenderContext(Instance* instance, Emitter* emitter, dmParticleDDF::Emitter* ddf, float dt, ParticleRenderContext& render_context)
1923 {
1924 const AnimationData& anim_data = emitter->m_AnimationData;
1925
1926 float unit_width = 1.0f;
1927 float unit_height = 1.0f;
1928 if (anim_data.m_TileWidth > anim_data.m_TileHeight)
1929 {
1930 unit_height = anim_data.m_TileHeight / (float)anim_data.m_TileWidth;
1931 }
1932 else if (anim_data.m_TileHeight > 0)
1933 {
1934 unit_width = anim_data.m_TileWidth / (float)anim_data.m_TileHeight;
1935 }
1936
1937 dmVMath::Point3 scaled_pivot = mulPerElem(ddf->m_Pivot, dmVMath::Point3(unit_width, unit_height, 1.0f));
1938 render_context.m_PivotTransform = dmTransform::Transform(Vector3(scaled_pivot), dmVMath::Quat::identity(), 1.0f);
1939 render_context.m_EmissionTransform.SetIdentity();
1940 if (ddf->m_Space == EMISSION_SPACE_EMITTER)
1941 {
1942 render_context.m_EmissionTransform = instance->m_WorldTransform;
1943 }
1944 render_context.m_BaseHalfWidth = unit_width * 0.5f;
1945 render_context.m_BaseHalfHeight = unit_height * 0.5f;
1946 render_context.m_HalfDt = dt * 0.5f;
1947
1948 render_context.m_StartTile = anim_data.m_StartTile;
1949 uint32_t end_tile = anim_data.m_EndTile;
1950 if (anim_data.m_TexCoords == 0x0)
1951 {
1952 render_context.m_StartTile = 0;
1953 end_tile = 1;
1954 }
1955
1956 render_context.m_Interval = end_tile - render_context.m_StartTile;
1957 render_context.m_TileCount = render_context.m_Interval;
1958
1959 const AnimPlayback playback = anim_data.m_Playback;
1960 render_context.m_AnimPlaying = playback != ANIM_PLAYBACK_NONE && render_context.m_TileCount > 1;
1961 render_context.m_AnimAutoSize = (ddf->m_SizeMode == SIZE_MODE_AUTO) && (anim_data.m_TexDims != 0x0) && render_context.m_AnimPlaying;
1962 render_context.m_AnimOnce = playback == ANIM_PLAYBACK_ONCE_FORWARD || playback == ANIM_PLAYBACK_ONCE_BACKWARD || playback == ANIM_PLAYBACK_ONCE_PINGPONG;
1963 render_context.m_AnimBackward = playback == ANIM_PLAYBACK_ONCE_BACKWARD || playback == ANIM_PLAYBACK_LOOP_BACKWARD;
1964
1965 if (playback == ANIM_PLAYBACK_ONCE_PINGPONG || playback == ANIM_PLAYBACK_LOOP_PINGPONG)
1966 {
1967 render_context.m_TileCount = dmMath::Max(1u, render_context.m_TileCount * 2 - 2);
1968 }
1969
1970 if (render_context.m_TileCount > 0)
1971 {
1972 render_context.m_InvAnimLength = anim_data.m_FPS / (float)render_context.m_TileCount;
1973 }
1974 }
1975
1976 static void UpdateParticleRenderState(Particle& particle, const AnimationData& anim_data, const ParticleRenderContext& render_context)
1977 {

Callers 1

UpdateEmitterRenderStateFunction · 0.85

Calls 7

identityFunction · 0.85
mulPerElemFunction · 0.50
Point3Class · 0.50
TransformClass · 0.50
Vector3Class · 0.50
MaxFunction · 0.50
SetIdentityMethod · 0.45

Tested by

no test coverage detected