File Sprite.cpp
File List > scene > Sprite.cpp
Go to the documentation of this file
#include "Sprite.h"
#include "MeshData.h"
#include "Camera.h"
#include "xdz_math.h"
std::string Sprite::fileroot = "res/tex/sprite/";
Sprite::Sprite()
{
o_type = GO_SPRITE;
SetSpriteShader();
o_name = "Sprite." + std::to_string(GetObjectID());
}
void Sprite::RenderSprite(const Context& ctx, const glm::vec3& pos, const glm::vec3& col, int id)
{
const Camera* cam = dynamic_cast<const Camera*>(ctx.scene.GetActiveCamera());
if (!cam) return;
spr_shader.UseShader();
spr_tex.Bind(Texture::RGBA_TEXTURE);
// transform settings
spr_shader.SetValue("U_pos", pos);
spr_shader.SetValue("U_col", col);
spr_shader.SetValue("ID_color", xdzm::get_id_color(id));
spr_shader.SetValue("RAND_color", xdzm::get_random_color(id));
if(cam->is_invUniform_changed)
spr_shader.SetValue("U_cam_trans", cam->o_InvTransform);
if(cam->is_frustum_changed)
spr_shader.SetValue("U_ProjectM", cam->cam_frustum);
// light settings
spr_shader.SetValue("SpriteOpacity", spr_opacity);
spr_shader.SetValue("U_Scale", SPRITE_SIZE);
MeshLib::Square->RenderObjProxy();
}
void Sprite::RenderSprite(const Context& ctx)
{
const Camera* cam = dynamic_cast<const Camera*>(ctx.scene.GetActiveCamera());
if (!cam) return;
if (cam->is_invUniform_changed)
spr_shader.SetValue("U_cam_trans", cam->o_InvTransform);
if (cam->is_frustum_changed)
spr_shader.SetValue("U_ProjectM", cam->cam_frustum);
spr_shader.SetValue("SpriteOpacity", spr_opacity);
spr_shader.SetValue("U_Scale", SPRITE_SIZE);
//light settings
MeshLib::Square->RenderObjProxy();
}
void Sprite::SetSpriteShader()
{
spr_shader = RenderShader("SpriteShader");
spr_shader.UseShader();
spr_shader.SetValue("ID_color", xdzm::get_id_color(GetObjectID()));
spr_shader.SetValue("RAND_color", xdzm::get_random_color(GetObjectID()));
spr_shader.UnuseShader();
}
void Sprite::SetTex()
{
spr_tex = Texture(ParsePath(), Texture::RGBA_TEXTURE, GL_REPEAT);
spr_shader.UseShader();
//o_shader.SetValue("blen", 0.5f);
spr_shader.SetValue("U_color", 1.0f, 0.0f, 1.0f, 1.0f);
spr_shader.SetValue("U_Texture", Texture::RGBA_TEXTURE);
spr_shader.UnuseShader();
}
std::string Sprite::ParsePath() const
{
switch (spr_type)
{
case NONE_SPRITE:
return Sprite::fileroot + "BAKED.png";
case POINT_LIGHT_SPRITE:
return Sprite::fileroot + "light.png";
case SUN_LIGHT_SPRITE:
return Sprite::fileroot + "sun-bright.png";
case SPOT_LIGHT_SPRITE:
return Sprite::fileroot + "spot-bright.png";
case CAM_SPRITE:
return Sprite::fileroot + "BAKED.png";
case ENVIRN_SPRITE:
return Sprite::fileroot + "cloud.png";
}
return "???";
}