mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2025-02-06 18:24:59 +01:00
Something is materializing
- Add flw_material struct to the shader api. - Initialized by the pipeline.
This commit is contained in:
parent
31ee65de30
commit
df49b1f25c
13 changed files with 97 additions and 68 deletions
|
@ -1,3 +1,5 @@
|
|||
#include "flywheel:api/material.glsl"
|
||||
|
||||
/*const*/ vec4 flw_vertexPos;
|
||||
/*const*/ vec4 flw_vertexColor;
|
||||
/*const*/ vec2 flw_vertexTexCoord;
|
||||
|
@ -14,6 +16,8 @@
|
|||
|
||||
/*const*/ vec4 flw_sampleColor;
|
||||
|
||||
/*const*/ FlwMaterial flw_material;
|
||||
|
||||
vec4 flw_fragColor;
|
||||
ivec2 flw_fragOverlay;
|
||||
vec2 flw_fragLight;
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
const uint FLW_FOG_LINEAR = 0u;
|
||||
const uint FLW_FOG_LINEAR_FADE = 1u;
|
||||
const uint FLW_FOG_NONE = 2u;
|
||||
|
||||
const uint FLW_TRANSPARENCY_OPAQUE = 0u;
|
||||
const uint FLW_TRANSPARENCY_ADDITIVE = 1u;
|
||||
const uint FLW_TRANSPARENCY_LIGHTING = 2u;
|
||||
const uint FLW_TRANSPARENCY_GLINT = 3u;
|
||||
const uint FLW_TRANSPARENCY_CRUMBLING = 4u;
|
||||
const uint FLW_TRANSPARENCY_TRANSLUCENT = 5u;
|
||||
|
||||
const uint FLW_CUTOUT_OFF = 0u;
|
||||
const uint FLW_CUTOUT_EPSILON = 1u;
|
||||
const uint FLW_CUTOUT_HALF = 2u;
|
||||
|
||||
const uint FLW_WRITE_MASK_BOTH = 0u;
|
||||
const uint FLW_WRITE_MASK_COLOR = 1u;
|
||||
const uint FLW_WRITE_MASK_DEPTH = 2u;
|
||||
|
||||
struct FlwMaterial {
|
||||
bool diffuse;
|
||||
bool lighting;
|
||||
bool blur;
|
||||
bool backfaceCull;
|
||||
bool polygonOffset;
|
||||
bool mip;
|
||||
|
||||
uint fog;
|
||||
uint transparency;
|
||||
uint cutout;
|
||||
uint writeMask;
|
||||
};
|
|
@ -1,3 +1,5 @@
|
|||
#include "flywheel:api/material.glsl"
|
||||
|
||||
vec4 flw_vertexPos;
|
||||
vec4 flw_vertexColor;
|
||||
vec2 flw_vertexTexCoord;
|
||||
|
@ -12,6 +14,8 @@ vec4 flw_var1;
|
|||
vec4 flw_var2;
|
||||
vec4 flw_var3;
|
||||
|
||||
/*const*/ FlwMaterial flw_material;
|
||||
|
||||
// To be implemented by the layout shader.
|
||||
void flw_layoutVertex();
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
// API
|
||||
// ------------------------------------------
|
||||
|
||||
#include "flywheel:api/material.glsl"
|
||||
|
||||
in vec4 flw_vertexPos;
|
||||
in vec4 flw_vertexColor;
|
||||
in vec2 flw_vertexTexCoord;
|
||||
|
@ -21,6 +23,8 @@ vec4 flw_fragColor;
|
|||
ivec2 flw_fragOverlay;
|
||||
vec2 flw_fragLight;
|
||||
|
||||
FlwMaterial flw_material;
|
||||
|
||||
vec4 flw_fogFilter(vec4 color);
|
||||
|
||||
bool flw_discardPredicate(vec4 finalColor);
|
||||
|
@ -34,6 +38,5 @@ void flw_contextFragment();
|
|||
// ------------------------------------------
|
||||
|
||||
uint _flw_materialFragmentID;
|
||||
uint _flw_packedMaterialProperties;
|
||||
|
||||
// ------------------------------------------
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
// API
|
||||
// ------------------------------------------
|
||||
|
||||
#include "flywheel:api/material.glsl"
|
||||
|
||||
out vec4 flw_vertexPos;
|
||||
out vec4 flw_vertexColor;
|
||||
out vec2 flw_vertexTexCoord;
|
||||
|
@ -15,6 +17,8 @@ out vec4 flw_var1;
|
|||
out vec4 flw_var2;
|
||||
out vec4 flw_var3;
|
||||
|
||||
FlwMaterial flw_material;
|
||||
|
||||
void flw_layoutVertex();
|
||||
void flw_initVertex();
|
||||
void flw_instanceVertex(FlwInstance i);
|
||||
|
@ -27,7 +31,6 @@ void flw_contextVertex();
|
|||
|
||||
uint _flw_materialVertexID;
|
||||
uint _flw_materialFragmentID;
|
||||
uint _flw_packedMaterialProperties;
|
||||
|
||||
FlwInstance _flw_unpackInstance(FlwPackedInstance i);
|
||||
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
#include "flywheel:internal/indirect/api/fragment.glsl"
|
||||
#include "flywheel:internal/material.glsl"
|
||||
|
||||
flat in uvec2 _flw_material;
|
||||
|
||||
void main() {
|
||||
_flw_materialFragmentID = _flw_material.x;
|
||||
_flw_packedMaterialProperties = _flw_material.y;
|
||||
|
||||
_flw_unpackMaterial(_flw_material.y, flw_material);
|
||||
|
||||
flw_initFragment();
|
||||
flw_materialFragment();
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "flywheel:internal/indirect/api/vertex.glsl"
|
||||
#include "flywheel:internal/indirect/mesh.glsl"
|
||||
#include "flywheel:internal/material.glsl"
|
||||
|
||||
flat out uvec2 _flw_material;
|
||||
|
||||
|
@ -27,9 +28,10 @@ void main() {
|
|||
|
||||
_flw_materialVertexID = drawCommands[batchID].vertexMaterialID;
|
||||
_flw_materialFragmentID = drawCommands[batchID].fragmentMaterialID;
|
||||
_flw_packedMaterialProperties = drawCommands[batchID].packedMaterialProperties;
|
||||
uint p = drawCommands[batchID].packedMaterialProperties;
|
||||
|
||||
_flw_material = uvec2(_flw_materialFragmentID, _flw_packedMaterialProperties);
|
||||
_flw_unpackMaterial(p, flw_material);
|
||||
_flw_material = uvec2(_flw_materialFragmentID, p);
|
||||
|
||||
flw_layoutVertex();
|
||||
flw_initVertex();
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
// API
|
||||
// -----------------------------------------
|
||||
#include "flywheel:api/material.glsl"
|
||||
|
||||
in vec4 flw_vertexPos;
|
||||
in vec4 flw_vertexColor;
|
||||
in vec2 flw_vertexTexCoord;
|
||||
|
@ -20,6 +22,8 @@ vec4 flw_fragColor;
|
|||
ivec2 flw_fragOverlay;
|
||||
vec2 flw_fragLight;
|
||||
|
||||
FlwMaterial flw_material;
|
||||
|
||||
vec4 flw_fogFilter(vec4 color);
|
||||
|
||||
bool flw_discardPredicate(vec4 finalColor);
|
||||
|
@ -34,7 +38,6 @@ void flw_contextFragment();
|
|||
|
||||
uint _flw_materialVertexID;
|
||||
uint _flw_materialFragmentID;
|
||||
uint _flw_packedMaterialProperties;
|
||||
|
||||
uniform uvec3 _flw_material_instancing;
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
// API
|
||||
// ------------------------------------
|
||||
#include "flywheel:api/material.glsl"
|
||||
|
||||
out vec4 flw_vertexPos;
|
||||
out vec4 flw_vertexColor;
|
||||
out vec2 flw_vertexTexCoord;
|
||||
|
@ -14,6 +16,8 @@ out vec4 flw_var1;
|
|||
out vec4 flw_var2;
|
||||
out vec4 flw_var3;
|
||||
|
||||
FlwMaterial flw_material;
|
||||
|
||||
void flw_layoutVertex();
|
||||
void flw_initVertex();
|
||||
void flw_instanceVertex(FlwInstance i);
|
||||
|
@ -26,7 +30,6 @@ void flw_contextVertex();
|
|||
|
||||
uint _flw_materialVertexID;
|
||||
uint _flw_materialFragmentID;
|
||||
uint _flw_packedMaterialProperties;
|
||||
|
||||
FlwInstance _flw_unpackInstance();
|
||||
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
#include "flywheel:internal/instancing/api/fragment.glsl"
|
||||
#include "flywheel:internal/material.glsl"
|
||||
|
||||
void main() {
|
||||
_flw_materialVertexID = _flw_material_instancing.x;
|
||||
_flw_materialFragmentID = _flw_material_instancing.y;
|
||||
_flw_packedMaterialProperties = _flw_material_instancing.z;
|
||||
|
||||
_flw_unpackMaterial(_flw_material_instancing.z, flw_material);
|
||||
|
||||
flw_initFragment();
|
||||
flw_materialFragment();
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
#include "flywheel:internal/instancing/api/vertex.glsl"
|
||||
#include "flywheel:internal/material.glsl"
|
||||
|
||||
void main() {
|
||||
_flw_materialVertexID = _flw_material_instancing.x;
|
||||
_flw_materialFragmentID = _flw_material_instancing.y;
|
||||
_flw_packedMaterialProperties = _flw_material_instancing.z;
|
||||
|
||||
_flw_unpackMaterial(_flw_material_instancing.z, flw_material);
|
||||
|
||||
FlwInstance i = _flw_unpackInstance();
|
||||
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
#include "flywheel:api/material.glsl"
|
||||
|
||||
// Packed format:
|
||||
// writeMask[2] | cutout[2] | transparency[3] | fog[2] | mip[1] | polygonOffset[1] | backfaceCull[1] | blur[1] | lighting[1] | diffuse[1]
|
||||
|
||||
const uint DIFFUSE_MASK = 1u;
|
||||
const uint LIGHTING_MASK = 1u << 1u;
|
||||
const uint BLUR_MASK = 1u << 2u;
|
||||
const uint BACKFACE_CULL_MASK = 1u << 3u;
|
||||
const uint POLYGON_OFFSET_MASK = 1u << 4u;
|
||||
const uint MIP_MASK = 1u << 5u;
|
||||
const uint FOG_MASK = 3u << 6u;
|
||||
const uint TRANSPARENCY_MASK = 7u << 8u;
|
||||
const uint CUTOUT_MASK = 3u << 11u;
|
||||
const uint WRITE_MASK_MASK = 3u << 13u;
|
||||
|
||||
void _flw_unpackMaterial(uint m, out FlwMaterial o) {
|
||||
o.diffuse = (m & DIFFUSE_MASK) != 0u;
|
||||
o.lighting = (m & LIGHTING_MASK) != 0u;
|
||||
o.blur = (m & BLUR_MASK) != 0u;
|
||||
o.backfaceCull = (m & BACKFACE_CULL_MASK) != 0u;
|
||||
o.polygonOffset = (m & POLYGON_OFFSET_MASK) != 0u;
|
||||
o.mip = (m & MIP_MASK) != 0u;
|
||||
o.fog = (m & FOG_MASK) >> 6;
|
||||
o.transparency = (m & TRANSPARENCY_MASK) >> 8;
|
||||
o.cutout = (m & CUTOUT_MASK) >> 11;
|
||||
o.writeMask = (m & WRITE_MASK_MASK) >> 13;
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
const uint LINEAR = 0;
|
||||
const uint LINEAR_FADE = 1;
|
||||
const uint NONE = 2;
|
||||
|
||||
const uint OPAQUE_TRANSPARENCY = 0;
|
||||
const uint ADDITIVE_TRANSPARENCY = 1;
|
||||
const uint LIGHTING_TRANSPARENCY = 2;
|
||||
const uint GLINT_TRANSPARENCY = 3;
|
||||
const uint CRUMBLING_TRANSPARENCY = 4;
|
||||
const uint TRANSLUCENT_TRANSPARENCY = 5;
|
||||
|
||||
const uint CUTOUT_OFF = 0;
|
||||
const uint CUTOUT_EPSILON = 1;
|
||||
const uint CUTOUT_HALF = 2;
|
||||
|
||||
const uint WRITE_MASK_BOTH = 0;
|
||||
const uint WRITE_MASK_COLOR = 1;
|
||||
const uint WRITE_MASK_DEPTH = 2;
|
||||
|
||||
struct Material {
|
||||
bool diffuse;
|
||||
bool lighting;
|
||||
bool blur;
|
||||
bool backfaceCull;
|
||||
bool polygonOffset;
|
||||
bool mip;
|
||||
|
||||
uint fog;
|
||||
uint transparency;
|
||||
uint cutout;
|
||||
uint writeMask;
|
||||
};
|
||||
|
||||
// Packed format:
|
||||
// writeMask[2] | cutout[2] | transparency[3] | fog[2] | mip[1] | polygonOffset[1] | backfaceCull[1] | blur[1] | lighting[1] | diffuse[1]
|
||||
|
||||
const uint DIFFUSE_MASK = 1;
|
||||
const uint LIGHTING_MASK = 1 << 1;
|
||||
const uint BLUR_MASK = 1 << 2;
|
||||
const uint BACKFACE_CULL_MASK = 1 << 3;
|
||||
const uint POLYGON_OFFSET_MASK = 1 << 4;
|
||||
const uint MIP_MASK = 1 << 5;
|
||||
const uint FOG_MASK = 3 << 6;
|
||||
const uint TRANSPARENCY_MASK = 7 << 8;
|
||||
const uint CUTOUT_MASK = 3 << 11;
|
||||
const uint WRITE_MASK_MASK = 3 << 13;
|
||||
|
||||
void unpackMaterial(uint m, out Material o) {
|
||||
o.diffuse = (m & DIFFUSE_MASK) != 0;
|
||||
o.lighting = (m & LIGHTING_MASK) != 0;
|
||||
o.blur = (m & BLUR_MASK) != 0;
|
||||
o.backfaceCull = (m & BACKFACE_CULL_MASK) != 0;
|
||||
o.polygonOffset = (m & POLYGON_OFFSET_MASK) != 0;
|
||||
o.mip = (m & MIP_MASK) != 0;
|
||||
o.fog = (m & FOG_MASK) >> 6;
|
||||
o.transparency = (m & TRANSPARENCY_MASK) >> 8;
|
||||
o.cutout = (m & CUTOUT_MASK) >> 11;
|
||||
o.writeMask = (m & WRITE_MASK_MASK) >> 13;
|
||||
}
|
Loading…
Reference in a new issue