📄 gosvertexmanipulation.hpp
字号:
//===========================================================================//
// Copyright (C) Microsoft Corporation. All rights reserved. //
//===========================================================================//
//#if !defined(MLR_GOSVERTEXMANIPULATION_HPP)
extern bool PerspectiveMode;
#define FCR_TRICK 0
#ifdef I_SAY_YES_TO_MULTI_TEXTURE
#define VERTEX_STRUCT_SIZE 0x28 // (sizeof(GOSVertex2UV))
#define VERTEX_STRUCT_SIZEx2 0x50 // (sizeof(GOSVertex2UV))
#else
#define VERTEX_STRUCT_SIZE 0x20 // (sizeof(GOSVertex))
#define VERTEX_STRUCT_SIZEx2 0x40 //(sizeof(GOSVertex))
#endif
// copies vertex data into rasterizer format
inline bool GOSCopyData (
#ifdef I_SAY_YES_TO_MULTI_TEXTURE
GOSVertex2UV *gos_vertices,
#else
GOSVertex *gos_vertices,
#endif
const Stuff::Vector4D *coords,
#ifdef I_SAY_YES_TO_COLOR
#ifdef I_SAY_YES_TO_DWORD_COLOR
const DWORD *colors,
#else // I_SAY_YES_TO_DWORD_COLOR
const Stuff::RGBAColor *colors,
#endif // I_SAY_YES_TO_DWORD_COLOR
#endif // I_SAY_YES_TO_COLOR
#ifdef I_SAY_YES_TO_TEXTURE
#ifdef I_SAY_YES_TO_MULTI_TEXTURE
const Vector2DScalar *texCoords1,
const Vector2DScalar *texCoords2,
#else
const Vector2DScalar *texCoords,
#endif
#endif
int _offset
#if FOG_HACK
, int foggy = 1
#endif // FOG_HACK
)
{
//Changed for MC2 due to Perspective and Parallel mode BOTH supported
if (PerspectiveMode)
{
gos_vertices[0].rhw = 1.0f;
if (fabs(coords[_offset].w) > Stuff::SMALL)
gos_vertices[0].rhw = 1.0f / coords[_offset].w;
gos_vertices[0].x = coords[_offset].x * gos_vertices[0].rhw;
gos_vertices[0].y = coords[_offset].y * gos_vertices[0].rhw;
gos_vertices[0].z = coords[_offset].z * gos_vertices[0].rhw;
gos_vertices[0].rhw = (float)fabs(gos_vertices[0].rhw);
gos_vertices[0].x = gos_vertices[0].x*ViewportScalars::MulX + ViewportScalars::AddX;
gos_vertices[0].y = gos_vertices[0].y*ViewportScalars::MulY + ViewportScalars::AddY;
}
else
{
gos_vertices[0].rhw = 0.000001f;
gos_vertices[0].x = (1.0f - coords[_offset].x);
gos_vertices[0].y = (1.0f - coords[_offset].y);
gos_vertices[0].z = coords[_offset].z;
gos_vertices[0].x = gos_vertices[0].x*ViewportScalars::MulX + ViewportScalars::AddX;
gos_vertices[0].y = gos_vertices[0].y*ViewportScalars::MulY + ViewportScalars::AddY;
}
#ifdef I_SAY_YES_TO_COLOR
#ifdef I_SAY_YES_TO_DWORD_COLOR
gos_vertices[0].argb = colors[_offset];
#else // I_SAY_YES_TO_DWORD_COLOR
gos_vertices[0].argb = GOSCopyColor(&colors[_offset]);
#endif // I_SAY_YES_TO_DWORD_COLOR
#else // I_SAY_YES_TO_COLOR
gos_vertices[0].argb = 0xffffffff;
#endif // I_SAY_YES_TO_COLOR
*((BYTE *)&gos_vertices[0].frgb + 3) = 0xff;
#ifdef I_SAY_YES_TO_TEXTURE
#ifdef I_SAY_YES_TO_MULTI_TEXTURE
gos_vertices[0].u1 = texCoords1[_offset][0];
gos_vertices[0].v1 = texCoords1[_offset][1];
gos_vertices[0].u2 = texCoords2[_offset][0];
gos_vertices[0].v2 = texCoords2[_offset][1];
#else // I_SAY_YES_TO_MULTI_TEXTURE
gos_vertices[0].u = texCoords[_offset][0];
gos_vertices[0].v = texCoords[_offset][1];
#endif // I_SAY_YES_TO_MULTI_TEXTURE
#else // I_SAY_YES_TO_TEXTURE
#ifdef I_SAY_YES_TO_MULTI_TEXTURE
gos_vertices[0].u1 = 0.0f;
gos_vertices[0].v1 = 0.0f;
gos_vertices[0].u2 = 0.0f;
gos_vertices[0].v2 = 0.0f;
#else // I_SAY_YES_TO_MULTI_TEXTURE
gos_vertices[0].u = 0.0f;
gos_vertices[0].v = 0.0f;
#endif // I_SAY_YES_TO_MULTI_TEXTURE
#endif // I_SAY_YES_TO_TEXTURE
return true;
}
// copies 3 vertex data into rasterizer format
inline bool GOSCopyTriangleData (
#ifdef I_SAY_YES_TO_MULTI_TEXTURE
GOSVertex2UV *gos_vertices,
#else // I_SAY_YES_TO_MULTI_TEXTURE
GOSVertex *gos_vertices,
#endif // I_SAY_YES_TO_MULTI_TEXTURE
const Stuff::Vector4D *coords,
#ifdef I_SAY_YES_TO_COLOR
#ifdef I_SAY_YES_TO_DWORD_COLOR
const DWORD *colors,
#else // I_SAY_YES_TO_DWORD_COLOR
const Stuff::RGBAColor *colors,
#endif // I_SAY_YES_TO_DWORD_COLOR
#endif // I_SAY_YES_TO_COLOR
#ifdef I_SAY_YES_TO_TEXTURE
#ifdef I_SAY_YES_TO_MULTI_TEXTURE
const Vector2DScalar *texCoords1,
const Vector2DScalar *texCoords2,
#else // I_SAY_YES_TO_MULTI_TEXTURE
const Vector2DScalar *texCoords,
#endif // I_SAY_YES_TO_MULTI_TEXTURE
#endif // I_SAY_YES_TO_TEXTURE
int offset0, int offset1, int offset2
#if FOG_HACK
, int foggy = 1
#endif // FOG_HACK
)
{
//Changed for MC2 due to Perspective and Parallel mode BOTH supported
if (PerspectiveMode)
{
gos_vertices[0].rhw = 1.0f;
if (fabs(coords[offset0].w) > Stuff::SMALL)
gos_vertices[0].rhw = 1.0f / coords[offset0].w;
gos_vertices[0].x = coords[offset0].x * gos_vertices[0].rhw;
gos_vertices[0].y = coords[offset0].y * gos_vertices[0].rhw;
gos_vertices[0].z = coords[offset0].z * gos_vertices[0].rhw;
gos_vertices[0].rhw = (float)fabs(gos_vertices[0].rhw);
gos_vertices[1].rhw = 1.0f;
if (fabs(coords[offset1].w) > Stuff::SMALL)
gos_vertices[1].rhw = 1.0f / coords[offset1].w;
gos_vertices[1].x = coords[offset1].x * gos_vertices[1].rhw;
gos_vertices[1].y = coords[offset1].y * gos_vertices[1].rhw;
gos_vertices[1].z = coords[offset1].z * gos_vertices[1].rhw;
gos_vertices[1].rhw = (float)fabs(gos_vertices[1].rhw);
gos_vertices[2].rhw = 1.0f;
if (fabs(coords[offset2].w) > Stuff::SMALL)
gos_vertices[2].rhw = 1.0f / coords[offset2].w;
gos_vertices[2].x = coords[offset2].x * gos_vertices[2].rhw;
gos_vertices[2].y = coords[offset2].y * gos_vertices[2].rhw;
gos_vertices[2].z = coords[offset2].z * gos_vertices[2].rhw;
gos_vertices[2].rhw = (float)fabs(gos_vertices[2].rhw);
gos_vertices[0].x = gos_vertices[0].x*ViewportScalars::MulX + ViewportScalars::AddX;
gos_vertices[0].y = gos_vertices[0].y*ViewportScalars::MulY + ViewportScalars::AddY;
gos_vertices[1].x = gos_vertices[1].x*ViewportScalars::MulX + ViewportScalars::AddX;
gos_vertices[1].y = gos_vertices[1].y*ViewportScalars::MulY + ViewportScalars::AddY;
gos_vertices[2].x = gos_vertices[2].x*ViewportScalars::MulX + ViewportScalars::AddX;
gos_vertices[2].y = gos_vertices[2].y*ViewportScalars::MulY + ViewportScalars::AddY;
}
else
{
gos_vertices[0].rhw = gos_vertices[1].rhw = gos_vertices[2].rhw = 0.000001f;
gos_vertices[0].x = 1.0f - coords[offset0].x;
gos_vertices[0].y = 1.0f - coords[offset0].y;
gos_vertices[0].z = coords[offset0].z;
gos_vertices[1].x = 1.0f - coords[offset1].x;
gos_vertices[1].y = 1.0f - coords[offset1].y;
gos_vertices[1].z = coords[offset0].z;
gos_vertices[2].x = 1.0f - coords[offset2].x;
gos_vertices[2].y = 1.0f - coords[offset2].y;
gos_vertices[2].z = coords[offset0].z;
gos_vertices[0].x = gos_vertices[0].x*ViewportScalars::MulX + ViewportScalars::AddX;
gos_vertices[0].y = gos_vertices[0].y*ViewportScalars::MulY + ViewportScalars::AddY;
gos_vertices[1].x = gos_vertices[1].x*ViewportScalars::MulX + ViewportScalars::AddX;
gos_vertices[1].y = gos_vertices[1].y*ViewportScalars::MulY + ViewportScalars::AddY;
gos_vertices[2].x = gos_vertices[2].x*ViewportScalars::MulX + ViewportScalars::AddX;
gos_vertices[2].y = gos_vertices[2].y*ViewportScalars::MulY + ViewportScalars::AddY;
}
#ifdef I_SAY_YES_TO_COLOR
#ifdef I_SAY_YES_TO_DWORD_COLOR
gos_vertices[0].argb = colors[offset0];
gos_vertices[1].argb = colors[offset1];
gos_vertices[2].argb = colors[offset2];
#else // I_SAY_YES_TO_DWORD_COLOR
gos_vertices[0].argb = GOSCopyColor(&colors[offset0]);
gos_vertices[1].argb = GOSCopyColor(&colors[offset1]);
gos_vertices[2].argb = GOSCopyColor(&colors[offset2]);
#endif // I_SAY_YES_TO_DWORD_COLOR
#else
gos_vertices[0].argb = 0xffffffff;
gos_vertices[1].argb = 0xffffffff;
gos_vertices[2].argb = 0xffffffff;
#endif // I_SAY_YES_TO_COLOR
*((BYTE *)&gos_vertices[0].frgb + 3) = 0xff;
*((BYTE *)&gos_vertices[1].frgb + 3) = 0xff;
*((BYTE *)&gos_vertices[2].frgb + 3) = 0xff;
#ifdef I_SAY_YES_TO_TEXTURE
#ifdef I_SAY_YES_TO_MULTI_TEXTURE
gos_vertices[0].u1 = texCoords1[offset0][0];
gos_vertices[0].v1 = texCoords1[offset0][1];
gos_vertices[1].u1 = texCoords1[offset1][0];
gos_vertices[1].v1 = texCoords1[offset1][1];
gos_vertices[2].u1 = texCoords1[offset2][0];
gos_vertices[2].v1 = texCoords1[offset2][1];
gos_vertices[0].u2 = texCoords2[offset0][0];
gos_vertices[0].v2 = texCoords2[offset0][1];
gos_vertices[1].u2 = texCoords2[offset1][0];
gos_vertices[1].v2 = texCoords2[offset1][1];
gos_vertices[2].u2 = texCoords2[offset2][0];
gos_vertices[2].v2 = texCoords2[offset2][1];
#else // I_SAY_YES_TO_MULTI_TEXTURE
gos_vertices[0].u = texCoords[offset0][0];
gos_vertices[0].v = texCoords[offset0][1];
gos_vertices[1].u = texCoords[offset1][0];
gos_vertices[1].v = texCoords[offset1][1];
gos_vertices[2].u = texCoords[offset2][0];
gos_vertices[2].v = texCoords[offset2][1];
#endif // I_SAY_YES_TO_MULTI_TEXTURE
#else // I_SAY_YES_TO_TEXTURE
#ifdef I_SAY_YES_TO_MULTI_TEXTURE
gos_vertices1[0].u = 0.0f;
gos_vertices1[0].v = 0.0f;
gos_vertices1[1].u = 0.0f;
gos_vertices1[1].v = 0.0f;
gos_vertices1[2].u = 0.0f;
gos_vertices1[2].v = 0.0f;
gos_vertices2[0].u = 0.0f;
gos_vertices2[0].v = 0.0f;
gos_vertices2[1].u = 0.0f;
gos_vertices2[1].v = 0.0f;
gos_vertices2[2].u = 0.0f;
gos_vertices2[2].v = 0.0f;
#else // I_SAY_YES_TO_MULTI_TEXTURE
gos_vertices[0].u = 0.0f;
gos_vertices[0].v = 0.0f;
gos_vertices[1].u = 0.0f;
gos_vertices[1].v = 0.0f;
gos_vertices[2].u = 0.0f;
gos_vertices[2].v = 0.0f;
#endif // I_SAY_YES_TO_MULTI_TEXTURE
#endif // I_SAY_YES_TO_TEXTURE
return true;
}
#undef VERTEX_STRUCT_SIZE
#undef VERTEX_STRUCT_SIZEx2
//#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -