Example #1
0
TextureRec Atlas1D_TexRec(TextureLoc texLoc, Int32 uCount, Int32* index) {
	*index  = Atlas1D_Index(texLoc);
	Int32 y = Atlas1D_RowId(texLoc);

	/* Adjust coords to be slightly inside - fixes issues with AMD/ATI cards. */
	TextureRec rec;
	rec.U1 = 0.0f; 
	rec.V1 = y * Atlas1D_InvTileSize;
	rec.U2 = (uCount - 1) + UV2_Scale;
	rec.V2 = rec.V1 + UV2_Scale * Atlas1D_InvTileSize;
	return rec;
}
Example #2
0
void Drawer_YMin(int count, PackedCol col, TextureLoc texLoc, VertexP3fT2fC4b** vertices) {
	VertexP3fT2fC4b* ptr = *vertices; VertexP3fT2fC4b v;

	float vOrigin = Atlas1D_RowId(texLoc) * Atlas1D.InvTileSize;
	float u1 = Drawer.MinBB.X;
	float u2 = (count - 1) + Drawer.MaxBB.X * UV2_Scale;
	float v1 = vOrigin + Drawer.MinBB.Z * Atlas1D.InvTileSize;
	float v2 = vOrigin + Drawer.MaxBB.Z * Atlas1D.InvTileSize * UV2_Scale;

	ApplyTint;
	v.Y = Drawer.Y1; v.Col = col;

	v.X = Drawer.X2 + (count - 1); v.Z = Drawer.Z2; v.U = u2; v.V = v2; *ptr++ = v;
	v.X = Drawer.X1;                                v.U = u1;           *ptr++ = v;
	v.Z = Drawer.Z1;                                          v.V = v1; *ptr++ = v;
	v.X = Drawer.X2 + (count - 1);                  v.U = u2;           *ptr++ = v;
	*vertices = ptr;
}
Example #3
0
static void Builder_DrawSprite(Int32 count) {
	TextureLoc texLoc = Block_GetTexLoc(Builder_Block, FACE_XMAX);
	Int32 i = Atlas1D_Index(texLoc);
	Real32 vOrigin = Atlas1D_RowId(texLoc) * Atlas1D_InvTileSize;
	Real32 X = (Real32)Builder_X, Y = (Real32)Builder_Y, Z = (Real32)Builder_Z;

#define u1 0.0f
#define u2 UV2_Scale
	Real32 x1 = (Real32)X + 2.50f / 16.0f, y1 = (Real32)Y,        z1 = (Real32)Z + 2.50f / 16.0f;
	Real32 x2 = (Real32)X + 13.5f / 16.0f, y2 = (Real32)Y + 1.0f, z2 = (Real32)Z + 13.5f / 16.0f;
	Real32 v1 = vOrigin, v2 = vOrigin + Atlas1D_InvTileSize * UV2_Scale;

	UInt8 offsetType = Block_SpriteOffset[Builder_Block];
	if (offsetType >= 6 && offsetType <= 7) {
		Random_SetSeed(&spriteRng, (Builder_X + 1217 * Builder_Z) & 0x7fffffff);
		Real32 valX = Random_Range(&spriteRng, -3, 3 + 1) / 16.0f;
		Real32 valY = Random_Range(&spriteRng, 0,  3 + 1) / 16.0f;
		Real32 valZ = Random_Range(&spriteRng, -3, 3 + 1) / 16.0f;

#define stretch 1.7f / 16.0f
		x1 += valX - stretch; x2 += valX + stretch;
		z1 += valZ - stretch; z2 += valZ + stretch;
		if (offsetType == 7) { y1 -= valY; y2 -= valY; }
	}
	
	Builder1DPart* part = &Builder_Parts[i];
	PackedCol white = PACKEDCOL_WHITE;
	PackedCol col = Builder_FullBright ? white : Lighting_Col_Sprite_Fast(Builder_X, Builder_Y, Builder_Z);
	Block_Tint(col, Builder_Block);
	VertexP3fT2fC4b v; v.Col = col;

	/* Draw Z axis */
	Int32 index = part->sOffset;
	v.X = x1; v.Y = y1; v.Z = z1; v.U = u2; v.V = v2; Builder_Vertices[index + 0] = v;
	          v.Y = y2;                     v.V = v1; Builder_Vertices[index + 1] = v;
	v.X = x2;           v.Z = z2; v.U = u1;           Builder_Vertices[index + 2] = v;
	          v.Y = y1;                     v.V = v2; Builder_Vertices[index + 3] = v;

	/* Draw Z axis mirrored */
	index += part->sAdvance;
	v.X = x2; v.Y = y1; v.Z = z2; v.U = u2;           Builder_Vertices[index + 0] = v;
	          v.Y = y2;                     v.V = v1; Builder_Vertices[index + 1] = v;
	v.X = x1;           v.Z = z1; v.U = u1;           Builder_Vertices[index + 2] = v;
	          v.Y = y1;                     v.V = v2; Builder_Vertices[index + 3] = v;

	/* Draw X axis */
	index += part->sAdvance;
	v.X = x1; v.Y = y1; v.Z = z2; v.U = u2;           Builder_Vertices[index + 0] = v;
	          v.Y = y2;                     v.V = v1; Builder_Vertices[index + 1] = v;
	v.X = x2;           v.Z = z1; v.U = u1;           Builder_Vertices[index + 2] = v;
	          v.Y = y1;                     v.V = v2; Builder_Vertices[index + 3] = v;

	/* Draw X axis mirrored */
	index += part->sAdvance;
	v.X = x2; v.Y = y1; v.Z = z1; v.U = u2;           Builder_Vertices[index + 0] = v;
	          v.Y = y2;                     v.V = v1; Builder_Vertices[index + 1] = v;
	v.X = x1;           v.Z = z2; v.U = u1;           Builder_Vertices[index + 2] = v;
	          v.Y = y1;                     v.V = v2; Builder_Vertices[index + 3] = v;

	part->sOffset += 4;
}