Serious-Engine/Sources/Engine/Graphics/Vertex.h
2016-03-11 15:57:17 +02:00

117 lines
1.9 KiB
C

/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */
#ifndef SE_INCL_VERTEX_H
#define SE_INCL_VERTEX_H
#ifdef PRAGMA_ONCE
#pragma once
#endif
struct GFXVertex3
{
FLOAT x,y,z;
};
struct GFXNormal3
{
FLOAT nx,ny,nz;
};
struct GFXTexCoord
{
union {
struct { FLOAT u,v; };
struct { FLOAT s,t; };
};
};
struct GFXTexCoord4
{
FLOAT s,t,r,q;
};
struct GFXColor
{
union {
struct { UBYTE r,g,b,a; };
struct { ULONG abgr; }; // reverse order - use ByteSwap()!
};
GFXColor() {};
GFXColor( COLOR col) {
_asm mov ecx,dword ptr [this]
_asm mov eax,dword ptr [col]
_asm bswap eax
_asm mov dword ptr [ecx],eax
}
__forceinline void Set( COLOR col) {
_asm mov ecx,dword ptr [this]
_asm mov eax,dword ptr [col]
_asm bswap eax
_asm mov dword ptr [ecx],eax
}
void MultiplyRGBA( const GFXColor &col1, const GFXColor &col2) {
r = (ULONG(col1.r)*col2.r)>>8;
g = (ULONG(col1.g)*col2.g)>>8;
b = (ULONG(col1.b)*col2.b)>>8;
a = (ULONG(col1.a)*col2.a)>>8;
}
void MultiplyRGB( const GFXColor &col1, const GFXColor &col2) {
r = (ULONG(col1.r)*col2.r)>>8;
g = (ULONG(col1.g)*col2.g)>>8;
b = (ULONG(col1.b)*col2.b)>>8;
}
void MultiplyRGBCopyA1( const GFXColor &col1, const GFXColor &col2) {
r = (ULONG(col1.r)*col2.r)>>8;
g = (ULONG(col1.g)*col2.g)>>8;
b = (ULONG(col1.b)*col2.b)>>8;
a = col1.a;
}
void AttenuateRGB( ULONG ulA) {
r = (ULONG(r)*ulA)>>8;
g = (ULONG(g)*ulA)>>8;
b = (ULONG(b)*ulA)>>8;
}
void AttenuateA( ULONG ulA) {
a = (ULONG(a)*ulA)>>8;
}
};
#define GFXVertex GFXVertex4
struct GFXVertex4
{
GFXVertex4()
{
}
FLOAT x,y,z;
union {
struct { struct GFXColor col; };
struct { SLONG shade; };
};
};
#define GFXNormal GFXNormal4
struct GFXNormal4
{
FLOAT nx,ny,nz;
ULONG ul;
};
#endif /* include-once check. */