Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ RenderBatch()

unsafe void Terraria.Graphics.TileBatch.RenderBatch ( Texture2D texture,
SpriteData[] sprites,
int offset,
int count )
inlineprivate

Definition at line 281 of file TileBatch.cs.

282 {
283 _graphicsDevice.Textures[0] = texture;
284 float num = 1f / (float)texture.Width;
285 float num2 = 1f / (float)texture.Height;
286 while (count > 0)
287 {
289 int num3 = count;
290 if (num3 > 2048 - _vertexBufferPosition)
291 {
292 num3 = 2048 - _vertexBufferPosition;
293 if (num3 < 256)
294 {
296 options = SetDataOptions.Discard;
297 num3 = count;
298 if (num3 > 2048)
299 {
300 num3 = 2048;
301 }
302 }
303 }
304 fixed (SpriteData* ptr = &sprites[offset])
305 {
306 fixed (VertexPositionColorTexture* ptr3 = &_vertices[0])
307 {
308 SpriteData* ptr2 = ptr;
309 VertexPositionColorTexture* ptr4 = ptr3;
310 for (int i = 0; i < num3; i++)
311 {
312 float num4;
313 float num5;
314 if (ptr2->Rotation != 0f)
315 {
316 num4 = (float)Math.Cos(ptr2->Rotation);
317 num5 = (float)Math.Sin(ptr2->Rotation);
318 }
319 else
320 {
321 num4 = 1f;
322 num5 = 0f;
323 }
324 float num6 = ptr2->Origin.X / ptr2->Source.Z;
325 float num7 = ptr2->Origin.Y / ptr2->Source.W;
326 ptr4->Color = ptr2->Colors.TopLeftColor;
327 ptr4[1].Color = ptr2->Colors.TopRightColor;
328 ptr4[2].Color = ptr2->Colors.BottomRightColor;
329 ptr4[3].Color = ptr2->Colors.BottomLeftColor;
330 for (int j = 0; j < 4; j++)
331 {
332 float num8 = CORNER_OFFSET_X[j];
333 float num9 = CORNER_OFFSET_Y[j];
334 float num10 = (num8 - num6) * ptr2->Destination.Z;
335 float num11 = (num9 - num7) * ptr2->Destination.W;
336 float x = ptr2->Destination.X + num10 * num4 - num11 * num5;
337 float y = ptr2->Destination.Y + num10 * num5 + num11 * num4;
338 if ((ptr2->Effects & SpriteEffects.FlipVertically) != 0)
339 {
340 num9 = 1f - num9;
341 }
342 if ((ptr2->Effects & SpriteEffects.FlipHorizontally) != 0)
343 {
344 num8 = 1f - num8;
345 }
346 ptr4->Position.X = x;
347 ptr4->Position.Y = y;
348 ptr4->Position.Z = 0f;
349 ptr4->TextureCoordinate.X = (ptr2->Source.X + num8 * ptr2->Source.Z) * num;
350 ptr4->TextureCoordinate.Y = (ptr2->Source.Y + num9 * ptr2->Source.W) * num2;
351 ptr4++;
352 }
353 ptr2++;
354 }
355 }
356 }
357 int offsetInBytes = _vertexBufferPosition * sizeof(VertexPositionColorTexture) * 4;
358 _vertexBuffer.SetData(offsetInBytes, _vertices, 0, num3 * 4, sizeof(VertexPositionColorTexture), options);
359 int minVertexIndex = _vertexBufferPosition * 4;
360 int numVertices = num3 * 4;
362 int primitiveCount = num3 * 2;
363 _graphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, minVertexIndex, numVertices, startIndex, primitiveCount);
364 _vertexBufferPosition += num3;
365 offset += num3;
366 count -= num3;
367 }
368 }
unsafe void DrawIndexedPrimitives(PrimitiveType primitiveType, int baseVertex, int minVertexIndex, int numVertices, int startIndex, int primitiveCount)
static double Cos(double d)
static double Sin(double a)
DynamicVertexBuffer _vertexBuffer
Definition TileBatch.cs:42
static readonly float[] CORNER_OFFSET_Y
Definition TileBatch.cs:26
GraphicsDevice _graphicsDevice
Definition TileBatch.cs:28
VertexPositionColorTexture[] _vertices
Definition TileBatch.cs:48
static readonly float[] CORNER_OFFSET_X
Definition TileBatch.cs:24

References Terraria.Graphics.TileBatch._graphicsDevice, Terraria.Graphics.TileBatch._vertexBuffer, Terraria.Graphics.TileBatch._vertexBufferPosition, Terraria.Graphics.TileBatch._vertices, Terraria.Graphics.VertexColors.BottomLeftColor, Terraria.Graphics.VertexColors.BottomRightColor, Microsoft.Xna.Framework.Graphics.VertexPositionColorTexture.Color, Terraria.Graphics.TileBatch.SpriteData.Colors, Terraria.Graphics.TileBatch.CORNER_OFFSET_X, Terraria.Graphics.TileBatch.CORNER_OFFSET_Y, System.Math.Cos(), System.count, Terraria.Graphics.TileBatch.SpriteData.Destination, Microsoft.Xna.Framework.Graphics.GraphicsDevice.DrawIndexedPrimitives(), Terraria.Graphics.TileBatch.SpriteData.Effects, Microsoft.Xna.Framework.Graphics.Texture2D.Height, System.offset, System.options, Terraria.Graphics.TileBatch.SpriteData.Origin, Microsoft.Xna.Framework.Graphics.VertexPositionColorTexture.Position, Terraria.Graphics.TileBatch.SpriteData.Rotation, System.Math.Sin(), Terraria.Graphics.TileBatch.SpriteData.Source, System.startIndex, Microsoft.Xna.Framework.Graphics.VertexPositionColorTexture.TextureCoordinate, Microsoft.Xna.Framework.Graphics.GraphicsDevice.Textures, Terraria.Graphics.VertexColors.TopLeftColor, Terraria.Graphics.VertexColors.TopRightColor, Microsoft.Xna.Framework.Vector4.W, Microsoft.Xna.Framework.Graphics.Texture2D.Width, Microsoft.Xna.Framework.Vector2.X, Microsoft.Xna.Framework.Vector3.X, Microsoft.Xna.Framework.Vector4.X, Microsoft.Xna.Framework.Vector2.Y, Microsoft.Xna.Framework.Vector3.Y, Microsoft.Xna.Framework.Vector4.Y, Microsoft.Xna.Framework.Vector3.Z, and Microsoft.Xna.Framework.Vector4.Z.

Referenced by Terraria.Graphics.TileBatch.Flush().