X-Git-Url: http://git.mutantstargoat.com?a=blobdiff_plain;f=src%2Fopengl%2Ftexture-gl.cc;h=157d0bb771e5dd51298cb17876193fef4fa4348f;hb=243eb502c5dc70e586a9e81815234069bf623480;hp=17ea926b571b20310e9dfd93b47d8488623d0fa1;hpb=63d7f3b0e70ab5e3d530c579b1881967c96b0b92;p=demo diff --git a/src/opengl/texture-gl.cc b/src/opengl/texture-gl.cc index 17ea926..157d0bb 100644 --- a/src/opengl/texture-gl.cc +++ b/src/opengl/texture-gl.cc @@ -1,15 +1,13 @@ #include +#include #include "texture.h" #include "opengl/texture-gl.h" TextureGL::TextureGL() { - w = 0; - h = 0; - - pixels = 0; tex = 0; + target = GL_TEXTURE_2D; } TextureGL::~TextureGL() @@ -19,22 +17,53 @@ TextureGL::~TextureGL() void TextureGL::update() { + if(images.empty()) + return; + if(!tex) { + target = is_cubemap() ? GL_TEXTURE_CUBE_MAP : GL_TEXTURE_2D; + glGenTextures(1, &tex); - glBindTexture(GL_TEXTURE_2D, tex); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glBindTexture(target, tex); + glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); + glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } else { - glBindTexture(GL_TEXTURE_2D, tex); + glBindTexture(target, tex); } - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); - glGenerateMipmap(GL_TEXTURE_2D); -} + static const unsigned int faces[] = { + GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, + GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z + }; + + for(size_t i=0; i