bean
This commit is contained in:
@@ -19,6 +19,9 @@ layout(location = 7) in flat uint quadDebug;
|
|||||||
#endif
|
#endif
|
||||||
layout(location = 0) out vec4 outColour;
|
layout(location = 0) out vec4 outColour;
|
||||||
|
|
||||||
|
|
||||||
|
#import <voxy:lod/gl46/bindings.glsl>
|
||||||
|
|
||||||
vec4 uint2vec4RGBA(uint colour) {
|
vec4 uint2vec4RGBA(uint colour) {
|
||||||
return vec4((uvec4(colour)>>uvec4(24,16,8,0))&uvec4(0xFF))/255.0;
|
return vec4((uvec4(colour)>>uvec4(24,16,8,0))&uvec4(0xFF))/255.0;
|
||||||
}
|
}
|
||||||
@@ -40,12 +43,12 @@ vec4 computeColour(vec4 colour) {
|
|||||||
if (useTinting() && abs(colour.r-colour.g) < 0.02f && abs(colour.g-colour.b) < 0.02f) {
|
if (useTinting() && abs(colour.r-colour.g) < 0.02f && abs(colour.g-colour.b) < 0.02f) {
|
||||||
colour *= uint2vec4RGBA(interData.z).yzwx;
|
colour *= uint2vec4RGBA(interData.z).yzwx;
|
||||||
}
|
}
|
||||||
return (colour * uint2vec4RGBA(interData.y)) + vec4(0,0,0,float(interData.w&0xFFu)/255);
|
return (colour * uint2vec4RGBA(interData.y)) + uint2vec4RGBA(interData.w);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint getFace() {
|
uint getFace() {
|
||||||
return (interData.w>>8)&7u;
|
return (interData.w)&7u;
|
||||||
}
|
}
|
||||||
|
|
||||||
vec2 getBaseUV() {
|
vec2 getBaseUV() {
|
||||||
@@ -89,7 +92,9 @@ void main() {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
outColour = computeColour(colour);
|
colour = computeColour(colour);
|
||||||
|
|
||||||
|
outColour = colour;
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG_RENDER
|
#ifdef DEBUG_RENDER
|
||||||
|
|||||||
@@ -26,11 +26,10 @@ void setSizeAndFlags(uint modelId, uint _flags, ivec2 quadSize) {
|
|||||||
interData.x = (modelId<<16) | _flags | (uint(quadSize.x-1)<<8) | (uint(quadSize.y-1)<<12);
|
interData.x = (modelId<<16) | _flags | (uint(quadSize.x-1)<<8) | (uint(quadSize.y-1)<<12);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setTintingAndExtra(vec4 _tinting, uint _conditionalTinting, uint alphaAddin, uint face) {
|
void setTintingAndExtra(vec4 _tinting, uint _conditionalTinting, uint addin) {
|
||||||
uint packedData = alphaAddin|(face<<8);
|
|
||||||
interData.y = packVec4(_tinting);
|
interData.y = packVec4(_tinting);
|
||||||
interData.z = _conditionalTinting;
|
interData.z = _conditionalTinting;
|
||||||
interData.w = packedData;
|
interData.w = addin;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_RENDER
|
#ifdef DEBUG_RENDER
|
||||||
@@ -113,6 +112,24 @@ void main() {
|
|||||||
|
|
||||||
ivec2 quadSize = extractSize(quad);
|
ivec2 quadSize = extractSize(quad);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
vec4 faceSize = getFaceSize(faceData);
|
||||||
|
|
||||||
|
vec2 cQuadSize = (faceSize.yw + quadSize - 1) * vec2((cornerIdx>>1)&1, cornerIdx&1);
|
||||||
|
uv = faceSize.xz + cQuadSize;
|
||||||
|
|
||||||
|
vec3 cornerPos = extractPos(quad);
|
||||||
|
float depthOffset = extractFaceIndentation(faceData);
|
||||||
|
cornerPos += swizzelDataAxis(face>>1, vec3(faceSize.xz, mix(depthOffset, 1-depthOffset, float(face&1u))));
|
||||||
|
|
||||||
|
vec3 origin = vec3(((extractLoDPosition(encPos)<<lodLevel) - baseSectionPos)<<5);
|
||||||
|
vec3 pointPos = (cornerPos+swizzelDataAxis(face>>1,vec3(cQuadSize,0)))*(1<<lodLevel)+origin;
|
||||||
|
gl_Position = MVP*vec4(pointPos, 1.0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (cornerIdx == 1) //Only if we are the provoking vertex
|
if (cornerIdx == 1) //Only if we are the provoking vertex
|
||||||
{
|
{
|
||||||
//Generate tinting and flag data
|
//Generate tinting and flag data
|
||||||
@@ -138,7 +155,7 @@ void main() {
|
|||||||
conditionalTinting = tintColour;
|
conditionalTinting = tintColour;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint alphaAddin = 0;
|
uint addin = 0;
|
||||||
if (!isTranslucent) {
|
if (!isTranslucent) {
|
||||||
tinting.w = 0.0;
|
tinting.w = 0.0;
|
||||||
//Encode the face, the lod level and
|
//Encode the face, the lod level and
|
||||||
@@ -146,7 +163,7 @@ void main() {
|
|||||||
encodedData |= face;
|
encodedData |= face;
|
||||||
encodedData |= (lodLevel<<3);
|
encodedData |= (lodLevel<<3);
|
||||||
encodedData |= uint(hasAO)<<6;
|
encodedData |= uint(hasAO)<<6;
|
||||||
alphaAddin = encodedData;
|
addin = encodedData;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Apply face tint
|
//Apply face tint
|
||||||
@@ -163,21 +180,9 @@ void main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setSizeAndFlags(modelId, flags, quadSize);
|
setSizeAndFlags(modelId, flags, quadSize);
|
||||||
setTintingAndExtra(tinting, conditionalTinting, alphaAddin, face);
|
setTintingAndExtra(tinting, conditionalTinting, addin);
|
||||||
}
|
}
|
||||||
|
|
||||||
vec4 faceSize = getFaceSize(faceData);
|
|
||||||
|
|
||||||
vec2 cQuadSize = (faceSize.yw + quadSize - 1) * vec2((cornerIdx>>1)&1, cornerIdx&1);
|
|
||||||
uv = faceSize.xz + cQuadSize;
|
|
||||||
|
|
||||||
vec3 cornerPos = extractPos(quad);
|
|
||||||
float depthOffset = extractFaceIndentation(faceData);
|
|
||||||
cornerPos += swizzelDataAxis(face>>1, vec3(faceSize.xz, mix(depthOffset, 1-depthOffset, float(face&1u))));
|
|
||||||
|
|
||||||
|
|
||||||
vec3 origin = vec3(((extractLoDPosition(encPos)<<lodLevel) - baseSectionPos)<<5);
|
|
||||||
gl_Position = MVP*vec4((cornerPos+swizzelDataAxis(face>>1,vec3(cQuadSize,0)))*(1<<lodLevel)+origin, 1.0);
|
|
||||||
|
|
||||||
#ifdef DEBUG_RENDER
|
#ifdef DEBUG_RENDER
|
||||||
quadDebug = lodLevel;
|
quadDebug = lodLevel;
|
||||||
|
|||||||
Reference in New Issue
Block a user