fix some cleanup bugs

Signed-off-by: Slendi <slendi@socopon.com>
This commit is contained in:
2025-08-11 07:12:04 +03:00
parent ef96c51566
commit e3b2f44621
5 changed files with 34 additions and 76 deletions

View File

@@ -1,31 +0,0 @@
#version 100
precision mediump float;
// Input vertex attributes (from vertex shader)
varying vec3 fragPosition;
// Input uniform values
uniform samplerCube environmentMap;
uniform bool vflipped;
uniform bool doGamma;
void main()
{
// Fetch color from texture map
vec4 texelColor = vec4(0.0);
if (vflipped) texelColor = textureCube(environmentMap, vec3(fragPosition.x, -fragPosition.y, fragPosition.z));
else texelColor = textureCube(environmentMap, fragPosition);
vec3 color = vec3(texelColor.x, texelColor.y, texelColor.z);
if (doGamma) // Apply gamma correction
{
color = color/(color + vec3(1.0));
color = pow(color, vec3(1.0/2.2));
}
// Calculate final fragment color
gl_FragColor = vec4(color, 1.0);
}

View File

@@ -1,24 +0,0 @@
#version 100
// Input vertex attributes
attribute vec3 vertexPosition;
// Input uniform values
uniform mat4 matProjection;
uniform mat4 matView;
// Output vertex attributes (to fragment shader)
varying vec3 fragPosition;
void main()
{
// Calculate fragment position based on model transformations
fragPosition = vertexPosition;
// Remove translation from the view matrix
mat4 rotView = mat4(mat3(matView));
vec4 clipPos = matProjection*rotView*vec4(vertexPosition, 1.0);
// Calculate final vertex position
gl_Position = clipPos;
}

View File

@@ -159,7 +159,7 @@ int config_load_ref(lua_State *L, int idx, Config *out)
// ======== DEFAULTS ======== // ======== DEFAULTS ========
out->space.offset = (Vector3) { 0, 0, 0 }; out->space.offset = (Vector3) { 0, 0, 0 };
out->space.initial_center = (Vector3) { 0, 1, 0 }; out->space.initial_center = (Vector3) { 0, 0, 0 };
out->space.radius = 1.0f; out->space.radius = 1.0f;
out->space.window_scale = 0.001f; out->space.window_scale = 0.001f;
out->displays.hud.size = 720; out->displays.hud.size = 720;

View File

@@ -1508,7 +1508,7 @@ static bool init_xr(LunarWM *this)
XrReferenceSpaceCreateInfo const ci = { XrReferenceSpaceCreateInfo const ci = {
.type = XR_TYPE_REFERENCE_SPACE_CREATE_INFO, .type = XR_TYPE_REFERENCE_SPACE_CREATE_INFO,
.next = nullptr, .next = nullptr,
.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_STAGE, .referenceSpaceType = XR_REFERENCE_SPACE_TYPE_LOCAL,
.poseInReferenceSpace = { .orientation = { 0.0f, 0.0f, 0.0f, 1.0f }, .poseInReferenceSpace = { .orientation = { 0.0f, 0.0f, 0.0f, 1.0f },
.position = { 0.0f, 0.0f, 0.0f } }, .position = { 0.0f, 0.0f, 0.0f } },
}; };
@@ -1815,8 +1815,6 @@ static void cleanup_xr(LunarWM *this)
} }
if (this->xr.session != XR_NULL_HANDLE) { if (this->xr.session != XR_NULL_HANDLE) {
if (this->xr.session_running)
xrEndSession(this->xr.session);
xrDestroySession(this->xr.session); xrDestroySession(this->xr.session);
this->xr.session = XR_NULL_HANDLE; this->xr.session = XR_NULL_HANDLE;
this->xr.session_running = false; this->xr.session_running = false;
@@ -1841,6 +1839,16 @@ static void cleanup_wayland(LunarWM *this)
} }
if (this->wayland.xwayland) { if (this->wayland.xwayland) {
if (this->wayland.xwayland_new_surface.link.prev
|| this->wayland.xwayland_new_surface.link.next) {
wl_list_remove(&this->wayland.xwayland_new_surface.link);
this->wayland.xwayland_new_surface.notify = NULL;
}
if (this->wayland.xwayland_ready.link.prev
|| this->wayland.xwayland_ready.link.next) {
wl_list_remove(&this->wayland.xwayland_ready.link);
this->wayland.xwayland_ready.notify = NULL;
}
wlr_xwayland_destroy(this->wayland.xwayland); wlr_xwayland_destroy(this->wayland.xwayland);
this->wayland.xwayland = NULL; this->wayland.xwayland = NULL;
} }
@@ -2193,17 +2201,17 @@ void render_hud(LunarWM *this, float /*dt*/, int hud_size)
void render_3d(LunarWM *this, float /*dt*/) void render_3d(LunarWM *this, float /*dt*/)
{ {
Skybox_draw(this->renderer.skybox, (Vector3) { 0, 0, 0 }); Skybox_draw(this->renderer.skybox, this->renderer.center);
rlDisableBackfaceCulling(); // rlDisableBackfaceCulling();
for (size_t i = 0; i < vector_size(this->wayland.v_toplevels); i++) { for (size_t i = 0; i < vector_size(this->wayland.v_toplevels); i++) {
auto *tl = this->wayland.v_toplevels[i]; auto *tl = this->wayland.v_toplevels[i];
if (!tl || !tl->surface) if (!tl || !tl->surface)
continue; continue;
if (!LunarWM_Toplevel_update(tl)) // if (!LunarWM_Toplevel_update(tl))
continue; // continue;
DrawTexture3D(tl->rl_texture, DrawTexture3D(tl->rl_texture,
Vector3Add(this->renderer.center, Vector3Add(this->renderer.center,
@@ -2211,7 +2219,7 @@ void render_3d(LunarWM *this, float /*dt*/)
0, 0, this->cman->cfg.space.radius - 0.01 * (float)i }), 0, 0, this->cman->cfg.space.radius - 0.01 * (float)i }),
this->renderer.center, this->cman->cfg.space.window_scale, false); this->renderer.center, this->cman->cfg.space.window_scale, false);
} }
rlEnableBackfaceCulling(); // rlEnableBackfaceCulling();
for (int h = 0; h < 2; ++h) { for (int h = 0; h < 2; ++h) {
auto *hand_info = &this->xr.hands[h]; auto *hand_info = &this->xr.hands[h];
@@ -2356,7 +2364,8 @@ static bool render_layer(LunarWM *this, LunarWM_RenderLayerInfo *info, float dt)
rlSetMatrixViewOffsetStereo(view_off_r, view_off_l); rlSetMatrixViewOffsetStereo(view_off_r, view_off_l);
glViewport(0, 0, (GLsizei)eye_w * view_count, (GLsizei)eye_h); glViewport(0, 0, (GLsizei)eye_w * view_count, (GLsizei)eye_h);
ClearBackground((Color) { 0, 0, 10, 255 }); rlClearColor(0, 0, 10, 255);
rlClearScreenBuffers();
for (int i = 0; i < 1; i++) { for (int i = 0; i < 1; i++) {
XrTime const time = info->predicted_display_time; XrTime const time = info->predicted_display_time;
@@ -2406,6 +2415,8 @@ static bool render_layer(LunarWM *this, LunarWM_RenderLayerInfo *info, float dt)
} }
BeginTextureMode(this->renderer.tmp_rt); BeginTextureMode(this->renderer.tmp_rt);
rlDisableColorBlend();
ClearBackground(BLACK);
BeginShaderMode(this->renderer.linear_srgb); BeginShaderMode(this->renderer.linear_srgb);
DrawTexturePro(this->renderer.main_rt.texture, DrawTexturePro(this->renderer.main_rt.texture,
(Rectangle) { (Rectangle) {
@@ -2423,6 +2434,7 @@ static bool render_layer(LunarWM *this, LunarWM_RenderLayerInfo *info, float dt)
(Vector2) { 0, 0 }, 0, WHITE); (Vector2) { 0, 0 }, 0, WHITE);
EndShaderMode(); EndShaderMode();
EndTextureMode(); EndTextureMode();
rlEnableColorBlend();
// release swapchain images // release swapchain images
XrSwapchainImageReleaseInfo const ri XrSwapchainImageReleaseInfo const ri

View File

@@ -12,13 +12,14 @@ static char const *SKYBOX_VS = "#version 300 es\n"
"out vec3 vDir;\n" "out vec3 vDir;\n"
"void main(){ vDir=vertexPosition; " "void main(){ vDir=vertexPosition; "
"gl_Position=mvp*vec4(vertexPosition,1.0); }\n"; "gl_Position=mvp*vec4(vertexPosition,1.0); }\n";
static char const *SKYBOX_FS = "#version 300 es\n" static char const *SKYBOX_FS
"precision highp float;\n" = "#version 300 es\n"
"in vec3 vDir;\n" "precision highp float;\n"
"uniform samplerCube environmentMap;\n" "in vec3 vDir;\n"
"out vec4 finalColor;\n" "uniform samplerCube environmentMap;\n"
"void main(){ vec3 dir=normalize(vDir); " "out vec4 finalColor;\n"
"finalColor=texture(environmentMap, dir); }\n"; "void main(){ vec3 dir=normalize(vDir); "
"finalColor=vec4(texture(environmentMap, normalize(vDir)).rgb, 1.0); }\n";
#endif #endif
void Skybox_init(Skybox *skybox, char const *fp) void Skybox_init(Skybox *skybox, char const *fp)
@@ -96,14 +97,14 @@ void Skybox_draw(Skybox const skybox, Vector3 position)
// Render behind everything without writing depth; cull disabled so we see // Render behind everything without writing depth; cull disabled so we see
// inside faces // inside faces
rlDisableColorBlend();
rlDisableBackfaceCulling(); rlDisableBackfaceCulling();
rlDisableDepthMask(); rlDisableDepthMask();
rlDisableColorBlend();
DrawModel(skybox.cube, position, 60.0f, (Color) { 255, 255, 255, 255 }); DrawModel(skybox.cube, position, 500.0f, (Color) { 255, 255, 255, 255 });
rlDrawRenderBatchActive(); rlDrawRenderBatchActive();
rlEnableColorBlend();
rlEnableDepthMask(); rlEnableDepthMask();
rlEnableBackfaceCulling(); rlEnableBackfaceCulling();
rlEnableColorBlend();
} }