mirror of
https://github.com/devZoGok/vb01.git
synced 2026-08-27 12:03:25 +00:00
98 lines
2.8 KiB
C++
Executable File
98 lines
2.8 KiB
C++
Executable File
#define STB_IMAGE_IMPLEMENTATION
|
|
|
|
#include "stb_image.h"
|
|
|
|
#include "root.h"
|
|
#include "texture.h"
|
|
#include "fontAsset.h"
|
|
#include "imageAsset.h"
|
|
#include "assetManager.h"
|
|
|
|
#include <glad.h>
|
|
|
|
#include <glfw3.h>
|
|
|
|
#include <iostream>
|
|
|
|
using namespace std;
|
|
|
|
namespace vb01{
|
|
//TODO deallocate (V)RAM for this constructor
|
|
Texture::Texture(int w, int h, bool shadowMap, bool hiRes) : Animatable(Animatable::TEXTURE), width(w), height(h), texture(new u32){
|
|
if(shadowMap){
|
|
/*
|
|
texture = new u32;
|
|
glGenTextures(1, &texture[0]);
|
|
glBindTexture(GL_TEXTURE_2D, texture[0]);
|
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
|
|
float borderColor[] = {1, 1, 1, 1};
|
|
glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor);
|
|
*/
|
|
}
|
|
else
|
|
Root::getSingleton()->initTextureDataOnGpu(width, height);
|
|
}
|
|
|
|
Texture::Texture(string paths[], int np, bool cm, int ml, bool flip, string name) : Animatable(Animatable::TEXTURE, name), numFrames(np), cubemap(cm), mipmapLevel(ml){
|
|
this->paths = new string[np];
|
|
|
|
for(int i = 0; i < np; i++){
|
|
this->paths[i] = paths[i];
|
|
|
|
if(!cm){
|
|
ImageAsset *imgAsset = (ImageAsset*)AssetManager::getSingleton()->getAsset(paths[i]);
|
|
frames.push_back(Frame(imgAsset->bufferId, imgAsset->layerId));
|
|
}
|
|
}
|
|
|
|
if(cm) Root::getSingleton()->createCubemap(false, true, paths, ml);
|
|
}
|
|
|
|
Texture::Texture(int w, bool depth, int ml, string name) : Animatable(Animatable::TEXTURE, name), width(w), mipmapLevel(ml), cubemap(true){
|
|
string p[6]{""};
|
|
Root::getSingleton()->createCubemap(depth, false, p, ml);
|
|
}
|
|
|
|
Texture::Texture(string path, int id) : Animatable(Animatable::TEXTURE){
|
|
FontAsset *fontAsset = (FontAsset*)AssetManager::getSingleton()->getAsset(path);
|
|
const FontAsset::Glyph &glyph = fontAsset->getGlyph(id);
|
|
frames.push_back(Frame(glyph.bufferId, glyph.layerId));
|
|
}
|
|
|
|
Texture::~Texture(){
|
|
if(paths) delete paths;
|
|
}
|
|
|
|
void Texture::animate(float value, KeyframeChannel keyframeChannel){
|
|
switch(keyframeChannel.type){
|
|
case KeyframeChannel::TEXTURE_MIX_RATIO:
|
|
mixRatio = value;
|
|
break;
|
|
case KeyframeChannel::TEXTURE_FRAME_A:
|
|
frameA = (int)value;
|
|
break;
|
|
case KeyframeChannel::TEXTURE_FRAME_B:
|
|
frameB = (int)value;
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Texture::update(int id){
|
|
/*
|
|
select(id, frameA);
|
|
|
|
if(numFrames > 0)
|
|
select(id + 1, frameB);
|
|
*/
|
|
}
|
|
|
|
void Texture::select(int id, int fr){
|
|
glActiveTexture(GL_TEXTURE0 + id);
|
|
glBindTexture(cubemap ? GL_TEXTURE_CUBE_MAP : GL_TEXTURE_2D, texture[fr]);
|
|
}
|
|
}
|