-
Notifications
You must be signed in to change notification settings - Fork 2
Vanilla Render Modes
raffclar edited this page Jun 9, 2022
·
1 revision
Black & White was developed using direct3d version 7. This API was fully fixed function and rendering was done by changing states on the hardware. See Getting frame captures of Vanilla Black and White for a guide on how to capture a frame for analysis.
Internally, a material is represented with the following data structure.
enum RENDER_MODE {
RENDER_MODE_SMOOTH = 0x0,
RENDER_MODE_SMOOTH_ALPHA = 0x1,
RENDER_MODE_TEXTURED = 0x2,
RENDER_MODE_TEXTURED_ALPHA = 0x3,
RENDER_MODE_ALPHA_TEXTURED = 0x4,
RENDER_MODE_ALPHA_TEXTURED_ALPHA = 0x5,
RENDER_MODE_ALPHA_TEXTURED_ALPHA_NZ = 0x6,
RENDER_MODE_SMOOTH_ALPHA_NZ = 0x7,
RENDER_MODE_TEXTURED_ALPHA_NZ = 0x8,
RENDER_MODE_TEXTURED_CHROMA = 0x9,
RENDER_MODE_ALPHA_TEXTURED_ALPHA_ADDITIVE_CHROMA = 0xa,
RENDER_MODE_ALPHA_TEXTURED_ALPHA_ADDITIVE_CHROMA_NZ = 0xb,
RENDER_MODE_ALPHA_TEXTURED_ALPHA_ADDITIVE = 0xc,
RENDER_MODE_ALPHA_TEXTURED_ALPHA_ADDITIVE_NZ = 0xd,
RENDER_MODE_TEXTURED_CHROMA_ALPHA = 0xf,
RENDER_MODE_TEXTURED_CHROMA_ALPHA_NZ = 0x10,
RENDER_MODE_CHROMA_JUST_Z = 0x12,
};
struct LH3DColor {
uint8_t b;
uint8_t g;
uint8_t r;
uint8_t a;
};
struct LH3DMaterial {
enum RENDER_MODE render_mode; // 4 bytes
uint8_t alpha_ref;
uint8_t cull_mode;
struct LH3DTexture* texture;
struct LH3DColor color;
};
Based on different rendering modes, the graphics engine will draw meshes with different shading configurations, what we would now call a fragment or pixel shader.
The configurations for the different modes are as follows:
Rendering Mode | Alpha Blend | Src Blend | Dest Blend | Alpha Test | Z Write | Alpha Ref | Input Configuration |
---|---|---|---|---|---|---|---|
Smooth | FALSE | One | One | FALSE | TRUE | N/A | 2 |
Smooth Alpha | TRUE | Src Alpha | 1 - Src Alpha | FALSE | TRUE | N/A | N/A |
Smooth Alpha (NZ) | TRUE | Src Alpha | 1 - Src Alpha | FALSE | FALSE | N/A | N/A |
Textured | FALSE | One | One | FALSE | TRUE | N/A | 2 |
Textured Alpha | TRUE | Src Alpha | 1 - Src Alpha | FALSE | TRUE | N/A | 4 |
Textured Alpha (NZ) | TRUE | Src Alpha | 1 - Src Alpha | FALSE | FALSE | N/A | 4 |
Alpha Textured | TRUE | Src Alpha | 1 - Src Alpha | FALSE | TRUE | N/A | 2 |
Alpha Textured Alpha | TRUE | Src Alpha | 1 - Src Alpha | FALSE | TRUE | N/A | 4 |
Alpha Textured Alpha (NZ) | TRUE | Src Alpha | 1 - Src Alpha | FALSE | FALSE | N/A | 4 |
Chroma Just Z | TRUE | Src Alpha | One | TRUE | TRUE | Material, Global Alpha | 2 |
Textured Chroma | TRUE | Src Alpha | 1 - Src Alpha | TRUE | TRUE | Material, Global Alpha, Global Color | 2 |
Textured Chroma Alpha | TRUE | Src Alpha | 1 - Src Alpha | TRUE | TRUE | Material, Global Alpha, Global Color | 4 |
Textured Chroma Alpha (NZ) | TRUE | Src Alpha | 1 - Src Alpha | TRUE | FALSE | Material, Global Alpha | 4 |
Alpha Textured Alpha Additive | TRUE | Src Alpha | One | FALSE | TRUE | N/A | 4 |
Alpha Textured Alpha Additive (NZ) | TRUE | Src Alpha | One | FALSE | FALSE | N/A | 4 |
Alpha Textured Alpha Additive Chroma | TRUE | Src Alpha | One | TRUE | TRUE | Material, Global Alpha | 4 |
Alpha Textured Alpha Additive Chroma (NZ) | TRUE | Src Alpha | One | TRUE | FALSE | Material, Global Alpha | 4 |
With the input configurations being:
Input Configuration | Color Op | Color 1 | Color 2 | Alpha Op | Alpha 1 | Alpha 2 |
---|---|---|---|---|---|---|
2 | Modulate | Texture | Diffuse | Select Arg 1 | Texture | N/A |
4 | Modulate | Texture | Diffuse | Modulate | Texture | Diffuse |