Optizmiatoin

Signed-off-by: Slendi <slendi@socopon.com>
This commit is contained in:
2025-08-11 09:56:45 +03:00
parent bf3ed0dd0c
commit 971040e038
2 changed files with 44 additions and 21 deletions

View File

@@ -2265,18 +2265,15 @@ void render_hud(LunarWM *this, float /*dt*/, int hud_size)
void render_3d(LunarWM *this, float /*dt*/)
{
Skybox_draw(this->renderer.skybox, this->renderer.camera.position);
for (size_t i = 0; i < vector_size(this->wayland.v_toplevels); i++) {
auto *tl = this->wayland.v_toplevels[i];
if (!tl || !tl->surface)
continue;
auto const rad = this->cman->cfg.space.radius - 0.01 * (float)i;
DrawTextureCyl(tl->rl_texture, (Vector3) { 0, 0, rad }, rad,
this->cman->cfg.space.window_scale, false);
if (tl->gles_texture && !tl->gles_texture->has_alpha) {
float rad = this->cman->cfg.space.radius - 0.01f * (float)i;
DrawTextureCyl(tl->rl_texture, (Vector3) { 0, 0, rad }, rad,
this->cman->cfg.space.window_scale, false);
}
}
for (int h = 0; h < 2; ++h) {
@@ -2293,6 +2290,22 @@ void render_3d(LunarWM *this, float /*dt*/)
}
}
Skybox_draw(this->renderer.skybox, this->renderer.camera.position);
rlEnableColorBlend();
rlDisableDepthMask(); // don't write depth
for (size_t i = 0; i < vector_size(this->wayland.v_toplevels); i++) {
auto *tl = this->wayland.v_toplevels[i];
if (!tl || !tl->surface)
continue;
if (tl->gles_texture && tl->gles_texture->has_alpha) {
float rad = this->cman->cfg.space.radius - 0.01f * (float)i;
DrawTextureCyl(tl->rl_texture, (Vector3) { 0, 0, rad }, rad,
this->cman->cfg.space.window_scale, false);
}
}
rlEnableDepthMask();
if (IsTextureValid(this->renderer.hud_rt.texture)) {
rlDrawRenderBatchActive();
rlDisableDepthTest();

View File

@@ -1,17 +1,22 @@
#include "RayExt.h"
#include <GLES2/gl2.h>
#include <raylib.h>
#include <raymath.h>
#include <rlgl.h>
#if defined(GRAPHICS_API_OPENGL_ES3)
static char const *SKYBOX_VS = "#version 300 es\n"
"precision mediump float;\n"
"layout(location=0) in vec3 vertexPosition;\n"
"uniform mat4 mvp;\n"
"out vec3 vDir;\n"
"void main(){ vDir=vertexPosition; "
"gl_Position=mvp*vec4(vertexPosition,1.0); }\n";
static char const *SKYBOX_VS
= "#version 300 es\n"
"precision mediump float;\n"
"layout(location=0) in vec3 vertexPosition;\n"
"uniform mat4 mvp;\n"
"out vec3 vDir;\n"
"void main(){\n"
"\tvDir = vertexPosition;\n"
"\tvec4 pos = mvp * vec4(vertexPosition, 1.0);\n"
"\tgl_Position = vec4(pos.xy, pos.w, pos.w); // z := 1 after division\n"
"}\n";
static char const *SKYBOX_FS
= "#version 300 es\n"
"precision highp float;\n"
@@ -20,7 +25,6 @@ static char const *SKYBOX_FS
"out vec4 finalColor;\n"
"void main(){ vec3 dir=normalize(vDir); "
"finalColor=vec4(texture(environmentMap, normalize(vDir)).rgb, 1.0); }\n";
#endif
void Skybox_init(Skybox *skybox, char const *fp)
{
@@ -90,19 +94,25 @@ void Skybox_destroy(Skybox *skybox)
*skybox = (Skybox) { 0 };
}
void Skybox_draw(Skybox const skybox, Vector3 position)
void Skybox_draw(Skybox const skybox, Vector3 camPos)
{
if (!skybox.ok)
return;
rlDisableBackfaceCulling();
rlDisableDepthTest();
rlDisableDepthMask();
rlDisableColorBlend();
DrawModel(skybox.cube, position, 5.0f, (Color) { 255, 255, 255, 255 });
rlDrawRenderBatchActive();
GLint oldFunc = 0;
glGetIntegerv(GL_DEPTH_FUNC, &oldFunc);
glDepthFunc(GL_LEQUAL);
DrawModel(skybox.cube, camPos, 500.0f, (Color) { 255, 255, 255, 255 });
rlDrawRenderBatchActive();
glDepthFunc(oldFunc ? oldFunc : GL_LESS);
rlEnableColorBlend();
rlEnableDepthTest();
rlEnableDepthMask();
rlEnableBackfaceCulling();
}