- Forked from Godot Engine 4.7-dev (MIT License) - Rebranded to AeThex Engine with cyan/purple theme - Added AI-powered development assistant module - Integrated Claude API for code completion & error fixing - Custom hexagon logo and branding - Multi-platform CI/CD (Windows, Linux, macOS) - Built Linux editor binary (151MB) - Complete source code with all customizations Tech Stack: - C++ game engine core - AI Module: Claude 3.5 Sonnet integration - Build: SCons, 14K+ source files - License: MIT (Godot) + Custom (AeThex features) Ready for Windows build via GitHub Actions!
121 lines
2.6 KiB
GLSL
121 lines
2.6 KiB
GLSL
/* clang-format off */
|
|
|
|
#[modes]
|
|
|
|
mode_default =
|
|
|
|
#[specializations]
|
|
|
|
USE_OUTPUT1 = true
|
|
USE_OUTPUT2 = true
|
|
USE_OUTPUT3 = true
|
|
|
|
#[vertex]
|
|
|
|
layout(location = 0) in vec2 vertex_attrib;
|
|
|
|
uniform vec2 offset;
|
|
uniform vec2 size;
|
|
|
|
out vec2 uv;
|
|
|
|
void main() {
|
|
uv = vertex_attrib * 0.5 + 0.5;
|
|
// This math scales the Vertex Attribute Quad to match the Rect the user passed in, based on Offset & Size
|
|
gl_Position = vec4( (offset * 2.0 - 1.0) + (size * (vertex_attrib + 1.0)), 1.0, 1.0);
|
|
}
|
|
|
|
#[fragment]
|
|
|
|
uniform sampler2D source0; // texunit:0
|
|
|
|
uniform sampler2D source1; // texunit:-1
|
|
|
|
uniform sampler2D source2; // texunit:-2
|
|
|
|
uniform sampler2D source3; // texunit:-3
|
|
|
|
#define OUTPUT0_SRGB uint(1)
|
|
#define OUTPUT1_SRGB uint(2)
|
|
#define OUTPUT2_SRGB uint(4)
|
|
#define OUTPUT3_SRGB uint(8)
|
|
|
|
uniform uint convert_to_srgb;
|
|
uniform vec4 modulate;
|
|
uniform float time;
|
|
|
|
in vec2 uv;
|
|
|
|
layout (location = 0) out vec4 out_color0;
|
|
|
|
#ifdef USE_OUTPUT1
|
|
layout (location = 1) out vec4 out_color1;
|
|
#endif
|
|
|
|
#ifdef USE_OUTPUT2
|
|
layout (location = 2) out vec4 out_color2;
|
|
#endif
|
|
|
|
#ifdef USE_OUTPUT3
|
|
layout (location = 3) out vec4 out_color3;
|
|
#endif
|
|
|
|
// This needs to be outside clang-format so the ubo comment is in the right place
|
|
#ifdef MATERIAL_UNIFORMS_USED
|
|
layout(std140) uniform MaterialUniforms{ //ubo:0
|
|
|
|
#MATERIAL_UNIFORMS
|
|
|
|
};
|
|
#endif
|
|
|
|
#GLOBALS
|
|
|
|
vec3 linear_to_srgb(vec3 color) {
|
|
// If going to srgb, clamp from 0 to 1.
|
|
color = clamp(color, vec3(0.0), vec3(1.0));
|
|
const vec3 a = vec3(0.055f);
|
|
return mix((vec3(1.0f) + a) * pow(color.rgb, vec3(1.0f / 2.4f)) - a, 12.92f * color.rgb, lessThan(color.rgb, vec3(0.0031308f)));
|
|
}
|
|
|
|
void main() {
|
|
// Handles the case where user code uses extra outputs, but extra output targets were not bound
|
|
vec4 color0 = vec4(0.0, 0.0, 0.0, 1.0);
|
|
vec4 color1 = vec4(0.0, 0.0, 0.0, 1.0);
|
|
vec4 color2 = vec4(0.0, 0.0, 0.0, 1.0);
|
|
vec4 color3 = vec4(0.0, 0.0, 0.0, 1.0);
|
|
|
|
#CODE : BLIT
|
|
|
|
// Discards extra outputs if extra output targets were not bound
|
|
out_color0 = color0;
|
|
|
|
#ifdef USE_OUTPUT1
|
|
out_color1 = color1;
|
|
#endif
|
|
#ifdef USE_OUTPUT2
|
|
out_color2 = color2;
|
|
#endif
|
|
#ifdef USE_OUTPUT3
|
|
out_color3 = color3;
|
|
#endif
|
|
|
|
if (bool(convert_to_srgb & OUTPUT0_SRGB)) {
|
|
out_color0.rgb = linear_to_srgb(out_color0.rgb); // Regular linear -> SRGB conversion.
|
|
}
|
|
#ifdef USE_OUTPUT1
|
|
if (bool(convert_to_srgb & OUTPUT1_SRGB)) {
|
|
out_color1.rgb = linear_to_srgb(out_color1.rgb);
|
|
}
|
|
#endif
|
|
#ifdef USE_OUTPUT2
|
|
if (bool(convert_to_srgb & OUTPUT2_SRGB)) {
|
|
out_color2.rgb = linear_to_srgb(out_color2.rgb);
|
|
}
|
|
#endif
|
|
#ifdef USE_OUTPUT3
|
|
if (bool(convert_to_srgb & OUTPUT3_SRGB)) {
|
|
out_color3.rgb = linear_to_srgb(out_color3.rgb);
|
|
}
|
|
#endif
|
|
}
|