1#include "Shading/ShaderTextureManager.h"
2#include "Shading/ShaderNodes/ShaderTextureNode.h"
7ShaderTextureManager::ShaderTextureManager()
10 glGenTextures(1, &textureArray);
11 glBindTexture(GL_TEXTURE_2D_ARRAY, textureArray);
12 glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
13 glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
14 glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_REPEAT);
15 glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_REPEAT);
16 glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_R, GL_REPEAT);
17 glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAX_LEVEL, 0);
18 glBindTexture(GL_TEXTURE_2D_ARRAY, 0);
21ShaderTextureManager::~ShaderTextureManager()
27 textureNodes.push_back(node);
28 node->zCoord = textureNodes.size() - 1;
33 for(
int i = 0; i < textureNodes.size(); i++)
35 if(textureNodes[i]->
id == node->id)
37 textureNodes.erase(textureNodes.begin() + i);
42 for(
int i = 0; i < textureNodes.size(); i++)
44 textureNodes[i]->zCoord = i;
48void ShaderTextureManager::UpdateShaders()
50 glBindTexture(GL_TEXTURE_2D_ARRAY, textureArray);
51 glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGB8, resolution, resolution, textureNodes.size(), 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
53 for(
int i = 0; i < textureNodes.size(); i++)
55 textureNodes[i]->texture->Resize(resolution, resolution);
56 glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, i, resolution, resolution, 1, GL_RGB, GL_UNSIGNED_BYTE, textureNodes[i]->texture->GetData());
59 glBindTexture(GL_TEXTURE_2D_ARRAY, 0);
62void ShaderTextureManager::UploadToGPU(
int id)
64 glBindTexture(GL_TEXTURE_2D_ARRAY, textureArray);
65 textureNodes[id]->texture->Resize(resolution, resolution);
66 glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0,
id, resolution, resolution, 1, GL_RGB, GL_UNSIGNED_BYTE, textureNodes[
id]->texture->GetData());
67 glBindTexture(GL_TEXTURE_2D_ARRAY, 0);
70void ShaderTextureManager::Bind(uint32_t slot)
72 glActiveTexture(GL_TEXTURE0 + slot);
73 glBindTexture(GL_TEXTURE_2D_ARRAY, textureArray);