void Texture2d::apply() { std::vector<GLbyte> imageBytes; if(nativeTexture == -1) { glGenTextures(1, &nativeTexture); _nativeTexture.reset(&nativeTexture, std::bind(deleteTexture, nativeTexture)); } if(pixels.size() < 1) { populateSpace(); } for(int y = 0; y < height; y++) { for(int x = 0; x < width; x++) { imageBytes.push_back(pixels[y][x].r * 255.0f); imageBytes.push_back(pixels[y][x].g * 255.0f); imageBytes.push_back(pixels[y][x].b * 255.0f); imageBytes.push_back(pixels[y][x].a * 255.0f); } } glBindTexture(GL_TEXTURE_2D, nativeTexture); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, &imageBytes[0]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glBindTexture(GL_TEXTURE_2D, 0); }
void Texture2d::setPixel(int x, int y, Color color) { if(pixels.size() < 1) { populateSpace(); } pixels[y][x] = color; }
void Texture2d::apply() { std::vector<GLbyte> imageBytes; if(nativeTexture.get() == NULL) { nativeTexture = gl::Uint::genTexture(); } if(pixels.size() < 1) { populateSpace(); } for(int y = 0; y < height; y++) { for(int x = 0; x < width; x++) { imageBytes.push_back(pixels[y][x].r * 255.0f); imageBytes.push_back(pixels[y][x].g * 255.0f); imageBytes.push_back(pixels[y][x].b * 255.0f); imageBytes.push_back(pixels[y][x].a * 255.0f); } } glBindTexture(GL_TEXTURE_2D, nativeTexture->getGLuint()); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, &imageBytes[0]); 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_MAG_FILTER, GL_LINEAR); if(glGenerateMipmap != NULL) { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glGenerateMipmap(GL_TEXTURE_2D); } else { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); } */ //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glBindTexture(GL_TEXTURE_2D, 0); }