Supermodel/Src/Graphics/New3D/PolyHeader.h

164 lines
5.5 KiB
C
Raw Normal View History

#ifndef _POLY_HEADER_H_
#define _POLY_HEADER_H_
#include "Types.h"
namespace New3D {
/*
Polygon Data
0x00:
2016-05-06 15:00:12 +00:00
xxxxxx-- -------- -------- -------- Specular
------x- -------- -------- -------- Clockwise winding
-------x xxxxxxxx xxxxxx-- -------- Polygon number (not always present)
-------- -------- ------xx -------- Discard
2016-05-06 15:00:12 +00:00
-------- -------- -------- x------- Enable specular
-------- -------- -------- -x------ 0 = Triangle, 1 = Quad
2016-05-06 15:00:12 +00:00
-------- -------- -------- --x----- Poly is points
-------- -------- -------- ---x---- Anti-aliasing
-------- -------- -------- ----x--- Vertex 3 shared from previous polygon
-------- -------- -------- -----x-- Vertex 2 shared from previous polygon
-------- -------- -------- ------x- Vertex 1 shared from previous polygon
-------- -------- -------- -------x Vertex 0 shared from previous polygon
0x01:
xxxxxxxx xxxxxxxx xxxxxxxx-------- Polygon normal X coordinate(2.22 fixed point)
2016-05-06 15:00:12 +00:00
-------- -------- -------- x------- Edge on translucency (i guess anti-aliasing)
-------- -------- -------- -x------ UV scale (0 = 13.3, 1 = 16.0)
2016-04-29 23:03:46 +00:00
-------- -------- -------- --x----- Fixed shading (seems to only be enabled if lighting is enabled)
-------- -------- -------- ---x---- 1 = Double-sided polygon
2016-05-05 00:01:17 +00:00
-------- -------- -------- ----x--- 1 = smooth shading, 0 = flat shading
-------- -------- -------- -----x-- If set, this is the last polygon
-------- -------- -------- ------x- Poly color, 1 = RGB, 0 = color table
2016-05-06 15:00:12 +00:00
-------- -------- -------- -------x No los return ?
0x02:
xxxxxxxx xxxxxxxx xxxxxxxx -------- Polygon normal Y coordinate(2.22 fixed point)
2016-05-06 15:00:12 +00:00
-------- -------- -------- xxx----- Microtexture texture number 0-7
-------- -------- -------- ---x---- Microtexture enabled
-------- -------- -------- ----xx-- Microtexture min lod
-------- -------- -------- ------x- Texture U mirror enable
-------- -------- -------- -------x Texture V mirror enable
0x03:
xxxxxxxx xxxxxxxx xxxxxxxx -------- Polygon normal Z coordinate(2.22 fixed point)
2016-05-06 15:00:12 +00:00
-------- -------- -------- x------- X wrap smoothing
-------- -------- -------- -x------ Y wrap smoothing
-------- -------- -------- --xxx--- Texture width(in 8 - pixel tiles)
-------- -------- -------- -----xxx Texture height(in 8 - pixel tiles)
0x04:
2016-05-28 20:33:10 +00:00
xxxxxxxx xxxxxxxx xxxxxxxx -------- Color (RGB888 or two 12-bit indexes, sensor color and color)
-------- -------- -------- x------- Translator map enable ? (Seems to be some 4/5bit colour format. Max observed value=16)
-------- -------- -------- -x------ Texture page
2016-04-27 16:42:31 +00:00
-------- -------- -------- ---xxxxx Upper 5 bits of texture U coordinate
0x05 :
2016-05-28 20:33:10 +00:00
xxxxxxxx xxxxxxxx xxxxxxxx -------- Texture NP ?
-------- -------- -------- x------- Low bit of texture U coordinate
-------- -------- -------- ---xxxxx Low 5 bits of texture V coordinate
0x06:
x------- -------- -------- -------- Alpha testing / contour
2016-05-06 15:00:12 +00:00
-xxxxxxx -------- -------- -------- Translator map offset?
-------- xxxxxx-- -------- -------- Polygon transparency 0-32
2016-05-09 16:53:12 +00:00
-------- ------x- -------- -------- Translucency pattern select (stipple alpha) - not sure if used?
-------- -------x -------- -------- 1 = disable lighting
-------- -------- xxxxx--- -------- Polygon light modifier(Amount that a luminous polygon will burn through fog. Valid range is 0.0 to 1.0. 0.0 is completely fogged; 1.0 has no fog.)
-------- -------- -----x-- -------- Texture enable
-------- -------- ------xx x------- Texture format
2016-05-09 16:53:12 +00:00
-------- -------- -------- -xx----- Shininess
-------- -------- -------- ---x---- High priority
-------- -------- -------- ----x--- Layered polygon
-------- -------- -------- -----xxx Translucency mode
*/
class PolyHeader
{
public:
PolyHeader();
PolyHeader(UINT32* h);
void operator =(const UINT32* h);
UINT32* StartOfData();
bool NextPoly();
int NumPolysTotal(); // could be quads or triangles
int NumTrianglesTotal();
//header 0
2016-05-06 15:00:12 +00:00
bool SpecularEnabled();
float SpecularValue();
bool Clockwise();
int PolyNumber();
bool Discard(); // both bits
bool Discard1(); // bit 1 only
bool Discard2(); // bit 2 only
int NumVerts();
int NumSharedVerts();
bool SharedVertex(int vertex);
//header 1
void FaceNormal(float n[3]);
float UVScale();
bool DoubleSided();
bool LastPoly();
bool PolyColor(); // if false uses LUT from ram
2016-04-29 23:03:46 +00:00
bool FixedShading();
2016-05-05 00:01:17 +00:00
bool SmoothShading();
bool NoLosReturn(); // no line of sight return (still not exactly how sure this attribute is used yet)
//header 2
bool TexUMirror();
bool TexVMirror();
2016-05-04 00:35:07 +00:00
bool MicroTexture();
int MicroTextureID();
int MicroTextureMinLOD(); // basically how many times it repeats compared to the base texture (i assume)
// header 3
int TexWidth();
int TexHeight();
2016-05-07 18:57:06 +00:00
bool TexSmoothU();
bool TexSmoothV();
//header 4
void Color(UINT8& r, UINT8& g, UINT8& b);
int ColorIndex();
int SensorColorIndex();
bool TranslatorMap();
int Page();
// header 5
int X();
int Y();
//header 6
bool Layered();
bool HighPriority();
2016-05-15 16:24:49 +00:00
float Shininess();
int TexFormat();
bool TexEnabled();
bool LightEnabled();
bool AlphaTest();
UINT8 Transparency(); // 0-255
bool PolyAlpha();
bool TextureAlpha();
bool Luminous();
float LightModifier();
int TranslatorMapOffset();
2018-05-24 20:13:15 +00:00
bool TranslucencyPatternSelect();
// misc
UINT64 Hash(); // make a unique hash for sorting by state
//=============
UINT32* header;
//=============
};
} // New3D
#endif