#include "TextureRtt.hpp"
#include "GlState.hpp"
#include <wren/texture_rtt.h>
#ifdef __EMSCRIPTEN__
#include <GL/gl.h>
#include <GLES3/gl3.h>
#else
#include <glad/glad.h>
#endif
namespace wren {
TextureRtt *TextureRtt::copyTextureRtt(const TextureRtt *original) {
TextureRtt *copy = TextureRtt::createTextureRtt();
copy->setSize(original->mWidth, original->mHeight);
copy->mGlFormatParams = original->mGlFormatParams;
copy->mIsTranslucent = original->mIsTranslucent;
return copy;
}
TextureRtt::TextureRtt() : mGlName(0), mInitializeData(false) {
}
void TextureRtt::prepareGl() {
mGlName = generateNewTexture();
if (textureUnit() < 0)
setTextureUnit(0);
Texture::UsageParams params(Texture::DEFAULT_USAGE_PARAMS);
params.mAreMipMapsEnabled = false;
bind(params);
if (mInitializeData) {
char *data = Texture::generateBlackData(mGlFormatParams, mWidth, mHeight);
glTexImage2D(GL_TEXTURE_2D, 0, mGlFormatParams.mInternalFormat, mWidth, mHeight, 0, mGlFormatParams.mFormat,
mGlFormatParams.mDataType, data);
delete[] data;
} else
glTexImage2D(GL_TEXTURE_2D, 0, mGlFormatParams.mInternalFormat, mWidth, mHeight, 0, mGlFormatParams.mFormat,
mGlFormatParams.mDataType, NULL);
}
}
WrTextureRtt *wr_texture_rtt_new() {
return reinterpret_cast<WrTextureRtt *>(wren::TextureRtt::createTextureRtt());
}
void wr_texture_rtt_enable_initialize_data(WrTextureRtt *texture, bool enable) {
reinterpret_cast<wren::TextureRtt *>(texture)->initializeData(enable);
}