mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2025-02-07 02:34:58 +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_vertexPos;
|
||||||
/*const*/ vec4 flw_vertexColor;
|
/*const*/ vec4 flw_vertexColor;
|
||||||
/*const*/ vec2 flw_vertexTexCoord;
|
/*const*/ vec2 flw_vertexTexCoord;
|
||||||
|
@ -14,6 +16,8 @@
|
||||||
|
|
||||||
/*const*/ vec4 flw_sampleColor;
|
/*const*/ vec4 flw_sampleColor;
|
||||||
|
|
||||||
|
/*const*/ FlwMaterial flw_material;
|
||||||
|
|
||||||
vec4 flw_fragColor;
|
vec4 flw_fragColor;
|
||||||
ivec2 flw_fragOverlay;
|
ivec2 flw_fragOverlay;
|
||||||
vec2 flw_fragLight;
|
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_vertexPos;
|
||||||
vec4 flw_vertexColor;
|
vec4 flw_vertexColor;
|
||||||
vec2 flw_vertexTexCoord;
|
vec2 flw_vertexTexCoord;
|
||||||
|
@ -12,6 +14,8 @@ vec4 flw_var1;
|
||||||
vec4 flw_var2;
|
vec4 flw_var2;
|
||||||
vec4 flw_var3;
|
vec4 flw_var3;
|
||||||
|
|
||||||
|
/*const*/ FlwMaterial flw_material;
|
||||||
|
|
||||||
// To be implemented by the layout shader.
|
// To be implemented by the layout shader.
|
||||||
void flw_layoutVertex();
|
void flw_layoutVertex();
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
// API
|
// API
|
||||||
// ------------------------------------------
|
// ------------------------------------------
|
||||||
|
|
||||||
|
#include "flywheel:api/material.glsl"
|
||||||
|
|
||||||
in vec4 flw_vertexPos;
|
in vec4 flw_vertexPos;
|
||||||
in vec4 flw_vertexColor;
|
in vec4 flw_vertexColor;
|
||||||
in vec2 flw_vertexTexCoord;
|
in vec2 flw_vertexTexCoord;
|
||||||
|
@ -21,6 +23,8 @@ vec4 flw_fragColor;
|
||||||
ivec2 flw_fragOverlay;
|
ivec2 flw_fragOverlay;
|
||||||
vec2 flw_fragLight;
|
vec2 flw_fragLight;
|
||||||
|
|
||||||
|
FlwMaterial flw_material;
|
||||||
|
|
||||||
vec4 flw_fogFilter(vec4 color);
|
vec4 flw_fogFilter(vec4 color);
|
||||||
|
|
||||||
bool flw_discardPredicate(vec4 finalColor);
|
bool flw_discardPredicate(vec4 finalColor);
|
||||||
|
@ -34,6 +38,5 @@ void flw_contextFragment();
|
||||||
// ------------------------------------------
|
// ------------------------------------------
|
||||||
|
|
||||||
uint _flw_materialFragmentID;
|
uint _flw_materialFragmentID;
|
||||||
uint _flw_packedMaterialProperties;
|
|
||||||
|
|
||||||
// ------------------------------------------
|
// ------------------------------------------
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
// API
|
// API
|
||||||
// ------------------------------------------
|
// ------------------------------------------
|
||||||
|
|
||||||
|
#include "flywheel:api/material.glsl"
|
||||||
|
|
||||||
out vec4 flw_vertexPos;
|
out vec4 flw_vertexPos;
|
||||||
out vec4 flw_vertexColor;
|
out vec4 flw_vertexColor;
|
||||||
out vec2 flw_vertexTexCoord;
|
out vec2 flw_vertexTexCoord;
|
||||||
|
@ -15,6 +17,8 @@ out vec4 flw_var1;
|
||||||
out vec4 flw_var2;
|
out vec4 flw_var2;
|
||||||
out vec4 flw_var3;
|
out vec4 flw_var3;
|
||||||
|
|
||||||
|
FlwMaterial flw_material;
|
||||||
|
|
||||||
void flw_layoutVertex();
|
void flw_layoutVertex();
|
||||||
void flw_initVertex();
|
void flw_initVertex();
|
||||||
void flw_instanceVertex(FlwInstance i);
|
void flw_instanceVertex(FlwInstance i);
|
||||||
|
@ -27,7 +31,6 @@ void flw_contextVertex();
|
||||||
|
|
||||||
uint _flw_materialVertexID;
|
uint _flw_materialVertexID;
|
||||||
uint _flw_materialFragmentID;
|
uint _flw_materialFragmentID;
|
||||||
uint _flw_packedMaterialProperties;
|
|
||||||
|
|
||||||
FlwInstance _flw_unpackInstance(FlwPackedInstance i);
|
FlwInstance _flw_unpackInstance(FlwPackedInstance i);
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
#include "flywheel:internal/indirect/api/fragment.glsl"
|
#include "flywheel:internal/indirect/api/fragment.glsl"
|
||||||
|
#include "flywheel:internal/material.glsl"
|
||||||
|
|
||||||
flat in uvec2 _flw_material;
|
flat in uvec2 _flw_material;
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
_flw_materialFragmentID = _flw_material.x;
|
_flw_materialFragmentID = _flw_material.x;
|
||||||
_flw_packedMaterialProperties = _flw_material.y;
|
|
||||||
|
_flw_unpackMaterial(_flw_material.y, flw_material);
|
||||||
|
|
||||||
flw_initFragment();
|
flw_initFragment();
|
||||||
flw_materialFragment();
|
flw_materialFragment();
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "flywheel:internal/indirect/api/vertex.glsl"
|
#include "flywheel:internal/indirect/api/vertex.glsl"
|
||||||
#include "flywheel:internal/indirect/mesh.glsl"
|
#include "flywheel:internal/indirect/mesh.glsl"
|
||||||
|
#include "flywheel:internal/material.glsl"
|
||||||
|
|
||||||
flat out uvec2 _flw_material;
|
flat out uvec2 _flw_material;
|
||||||
|
|
||||||
|
@ -27,9 +28,10 @@ void main() {
|
||||||
|
|
||||||
_flw_materialVertexID = drawCommands[batchID].vertexMaterialID;
|
_flw_materialVertexID = drawCommands[batchID].vertexMaterialID;
|
||||||
_flw_materialFragmentID = drawCommands[batchID].fragmentMaterialID;
|
_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_layoutVertex();
|
||||||
flw_initVertex();
|
flw_initVertex();
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
// API
|
// API
|
||||||
// -----------------------------------------
|
// -----------------------------------------
|
||||||
|
#include "flywheel:api/material.glsl"
|
||||||
|
|
||||||
in vec4 flw_vertexPos;
|
in vec4 flw_vertexPos;
|
||||||
in vec4 flw_vertexColor;
|
in vec4 flw_vertexColor;
|
||||||
in vec2 flw_vertexTexCoord;
|
in vec2 flw_vertexTexCoord;
|
||||||
|
@ -20,6 +22,8 @@ vec4 flw_fragColor;
|
||||||
ivec2 flw_fragOverlay;
|
ivec2 flw_fragOverlay;
|
||||||
vec2 flw_fragLight;
|
vec2 flw_fragLight;
|
||||||
|
|
||||||
|
FlwMaterial flw_material;
|
||||||
|
|
||||||
vec4 flw_fogFilter(vec4 color);
|
vec4 flw_fogFilter(vec4 color);
|
||||||
|
|
||||||
bool flw_discardPredicate(vec4 finalColor);
|
bool flw_discardPredicate(vec4 finalColor);
|
||||||
|
@ -34,7 +38,6 @@ void flw_contextFragment();
|
||||||
|
|
||||||
uint _flw_materialVertexID;
|
uint _flw_materialVertexID;
|
||||||
uint _flw_materialFragmentID;
|
uint _flw_materialFragmentID;
|
||||||
uint _flw_packedMaterialProperties;
|
|
||||||
|
|
||||||
uniform uvec3 _flw_material_instancing;
|
uniform uvec3 _flw_material_instancing;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
// API
|
// API
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
|
#include "flywheel:api/material.glsl"
|
||||||
|
|
||||||
out vec4 flw_vertexPos;
|
out vec4 flw_vertexPos;
|
||||||
out vec4 flw_vertexColor;
|
out vec4 flw_vertexColor;
|
||||||
out vec2 flw_vertexTexCoord;
|
out vec2 flw_vertexTexCoord;
|
||||||
|
@ -14,6 +16,8 @@ out vec4 flw_var1;
|
||||||
out vec4 flw_var2;
|
out vec4 flw_var2;
|
||||||
out vec4 flw_var3;
|
out vec4 flw_var3;
|
||||||
|
|
||||||
|
FlwMaterial flw_material;
|
||||||
|
|
||||||
void flw_layoutVertex();
|
void flw_layoutVertex();
|
||||||
void flw_initVertex();
|
void flw_initVertex();
|
||||||
void flw_instanceVertex(FlwInstance i);
|
void flw_instanceVertex(FlwInstance i);
|
||||||
|
@ -26,7 +30,6 @@ void flw_contextVertex();
|
||||||
|
|
||||||
uint _flw_materialVertexID;
|
uint _flw_materialVertexID;
|
||||||
uint _flw_materialFragmentID;
|
uint _flw_materialFragmentID;
|
||||||
uint _flw_packedMaterialProperties;
|
|
||||||
|
|
||||||
FlwInstance _flw_unpackInstance();
|
FlwInstance _flw_unpackInstance();
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
#include "flywheel:internal/instancing/api/fragment.glsl"
|
#include "flywheel:internal/instancing/api/fragment.glsl"
|
||||||
|
#include "flywheel:internal/material.glsl"
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
_flw_materialVertexID = _flw_material_instancing.x;
|
_flw_materialVertexID = _flw_material_instancing.x;
|
||||||
_flw_materialFragmentID = _flw_material_instancing.y;
|
_flw_materialFragmentID = _flw_material_instancing.y;
|
||||||
_flw_packedMaterialProperties = _flw_material_instancing.z;
|
|
||||||
|
_flw_unpackMaterial(_flw_material_instancing.z, flw_material);
|
||||||
|
|
||||||
flw_initFragment();
|
flw_initFragment();
|
||||||
flw_materialFragment();
|
flw_materialFragment();
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
#include "flywheel:internal/instancing/api/vertex.glsl"
|
#include "flywheel:internal/instancing/api/vertex.glsl"
|
||||||
|
#include "flywheel:internal/material.glsl"
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
_flw_materialVertexID = _flw_material_instancing.x;
|
_flw_materialVertexID = _flw_material_instancing.x;
|
||||||
_flw_materialFragmentID = _flw_material_instancing.y;
|
_flw_materialFragmentID = _flw_material_instancing.y;
|
||||||
_flw_packedMaterialProperties = _flw_material_instancing.z;
|
|
||||||
|
_flw_unpackMaterial(_flw_material_instancing.z, flw_material);
|
||||||
|
|
||||||
FlwInstance i = _flw_unpackInstance();
|
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