Remove shaders for drawin sun/moon

This commit is contained in:
2025-03-10 00:52:34 +01:00
parent 266d250881
commit 2cd8ef5558
9 changed files with 31 additions and 284 deletions

View File

@@ -2,7 +2,6 @@
#include "canvas/BackGround.hpp"
#include "canvas/BackGroundColors.hpp"
#include "canvas/Circle.hpp"
#include "canvas/stb_perlin.h"
#include <raylib.h>
@@ -44,6 +43,9 @@ Color ColorAdd(Color c1, Color c2)
void BackGround::init(int canvasSize)
{
this->canvasSize = canvasSize;
// resitev da ne postane tekstura okoli sonca transparentna in da se ne vidi nasledna slika
// https://github.com/raysan5/raylib/issues/3820
rlSetBlendFactorsSeparate(RL_SRC_ALPHA, RL_ONE_MINUS_SRC_ALPHA, RL_ONE, RL_ONE, RL_FUNC_ADD, RL_MAX);
}
void BackGround::deinit()
@@ -117,26 +119,45 @@ void BackGround::drawStars()
void BackGround::drawSun()
{
int r = ((m_dna->moonY / 255.0f * (maxSizeOfMoon - minSizeOfMoon)) + minSizeOfMoon) * canvasSize;
int radius = ((m_dna->moonY / 255.0f * (maxSizeOfMoon - minSizeOfMoon)) + minSizeOfMoon) * canvasSize;
int xpos = Lerp(canvasSize * moonXOffset, canvasSize - canvasSize * moonXOffset, m_dna->moonX / 255.0f);
int ypos = Lerp(canvasSize * moonXOffset, maxYPosOfMoon * canvasSize, m_dna->moonY / 255.0f);
Color color = {0};
if (getColorSet() == 3)
{
Circle::setColor(BackGroundColors::moonColor);
r = (((m_dna->moonSize / 255.0f) * (maxSizeOfMoon - minSizeOfMoon)) + minSizeOfMoon) * canvasSize;
color = BackGroundColors::moonColor;
radius = (((m_dna->moonSize / 255.0f) * (maxSizeOfMoon - minSizeOfMoon)) + minSizeOfMoon) * canvasSize;
}
else
{
Color color = {0};
color.r = 255;
color.g = std::lerp(200, 50, m_dna->moonY / 255.0f);
color.b = std::lerp(50, 0, m_dna->moonY / 255.0f);
color.a = 255;
Circle::setColor(color);
}
Circle::draw(xpos, ypos, r);
BeginBlendMode(RL_BLEND_CUSTOM_SEPARATE);
constexpr float numOfCircles = 15.0f;
constexpr float sunMin = 1.7f;
float amount = 0.0f;
color.a = 15;
for (size_t i = 0; i < numOfCircles; i++)
{
float r = Lerp(radius, radius / sunMin, amount);
DrawCircle(xpos, ypos, r, color);
amount += 1.0f / numOfCircles;
}
EndBlendMode();
color.a = 255;
DrawCircle(xpos, ypos, radius / sunMin, color);
}
void BackGround::drawMounten(size_t mountenSegments, int min, int max, Color color, float scale)

View File

@@ -1,11 +1,9 @@
#include "canvas/Canvas.hpp"
#include "canvas/Circle.hpp"
void Canvas::init(int size)
{
backGround.init(size);
tree.init(size);
Circle::init();
}
void Canvas::newGen(RenderTexture2D &target, Dna *dna)
@@ -30,5 +28,4 @@ bool Canvas::tick(RenderTexture2D &target)
void Canvas::deinit()
{
backGround.deinit();
Circle::deinit();
}

View File

@@ -1,58 +0,0 @@
#include "canvas/Circle.hpp"
#include "canvas/sunShader.hpp"
#include <raylib.h>
#include <rlgl.h>
RenderTexture2D Circle::target;
Shader Circle::shader;
float Circle::c[3];
int Circle::colorLoc;
void Circle::init()
{
#if defined(PLATFORM_ANDROID) || defined(PLATFORM_WEB)
shader = LoadShaderFromMemory(nullptr, sun_shader_100);
#else
shader = LoadShaderFromMemory(nullptr, (const char *)shaders_sun_330_fs);
#endif
target = LoadRenderTexture(sizeTexute, sizeTexute);
c[0] = 1.0f;
c[1] = 1.0f;
c[2] = 1.0f;
colorLoc = GetShaderLocation(shader, "color");
SetShaderValue(shader, colorLoc, c, SHADER_UNIFORM_VEC3);
// resitev da ne postane tekstura okoli sonca transparentna in da se ne vidi nasledna slika
// https://github.com/raysan5/raylib/issues/3820
rlSetBlendFactorsSeparate(RL_SRC_ALPHA, RL_ONE_MINUS_SRC_ALPHA, RL_ONE, RL_ONE, RL_FUNC_ADD, RL_MAX);
}
void Circle::deinit()
{
UnloadShader(shader);
UnloadRenderTexture(target);
}
void Circle::setColor(Color color)
{
c[0] = color.r / 255.0f;
c[1] = color.g / 255.0f;
c[2] = color.b / 255.0f;
SetShaderValue(shader, colorLoc, c, SHADER_UNIFORM_VEC3);
}
void Circle::draw(float x, float y, float size)
{
Rectangle dest = {x - size, y - size, size * 2, size * 2};
Rectangle source = {0, 0, (float)target.texture.width, (float)-target.texture.height};
Vector2 origin = {0.0f, 0.0f};
// zgorni komentar da se mesanje barv oklopi pravilno
BeginBlendMode(RL_BLEND_CUSTOM_SEPARATE);
BeginShaderMode(shader);
DrawTexturePro(target.texture, source, dest, origin, 0.0f, WHITE);
EndShaderMode();
EndBlendMode();
}