- attempt to work around non power of two texture errors (tomreyn please try this rev and report back)

This commit is contained in:
Mark Vejvoda
2011-04-09 01:42:20 +00:00
parent 2bab37fdc0
commit 5d96e8f3ab

View File

@@ -96,6 +96,15 @@ static void setupGLExtensionMethods() {
glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)wglGetProcAddress("glCheckFramebufferStatusEXT"); glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)wglGetProcAddress("glCheckFramebufferStatusEXT");
//glFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)wglGetProcAddress("glFramebufferTexture1DEXT"); //glFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)wglGetProcAddress("glFramebufferTexture1DEXT");
glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)wglGetProcAddress("glFramebufferTexture2DEXT"); glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)wglGetProcAddress("glFramebufferTexture2DEXT");
//glFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)wglGetProcAddress("glFramebufferTexture3DEXT");
glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)wglGetProcAddress("glFramebufferRenderbufferEXT");
//glGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)wglGetProcAddress("glGetFramebufferAttachmentParameterivEXT");
//glGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC)wglGetProcAddress("glGenerateMipmapEXT");
if(!glBindRenderbufferEXT || !glDeleteRenderbuffersEXT || !glGenRenderbuffersEXT ||
!glRenderbufferStorageEXT || !glBindFramebufferEXT || !glDeleteFramebuffersEXT ||
!glGenFramebuffersEXT || !glCheckFramebufferStatusEXT || !glFramebufferTexture2DEXT ||
!glFramebufferRenderbufferEXT) {
glGenFramebuffersEXT = NULL; glGenFramebuffersEXT = NULL;
} }
} }
@@ -515,15 +524,6 @@ void TextureGl::setup_FBO_RBO() {
setupGLExtensionMethods(); setupGLExtensionMethods();
} }
bool TextureGl::supports_FBO_RBO() {
return (glGenFramebuffersEXT != NULL);
}
void TextureGl::setup_FBO_RBO() {
if(getTextureWidth() < 0 || getTextureHeight() < 0) {
throw runtime_error("getTextureWidth() < 0 || getTextureHeight() < 0");
}
bool TextureGl::supports_FBO_RBO() { bool TextureGl::supports_FBO_RBO() {
return (glGenFramebuffersEXT != NULL); return (glGenFramebuffersEXT != NULL);
} }
@@ -855,7 +855,7 @@ void Texture2DGl::init(Filter filter, int maxAnisotropy) {
if(error2 == GL_NO_ERROR) { if(error2 == GL_NO_ERROR) {
error = GL_NO_ERROR; error = GL_NO_ERROR;
} }
} }
if(error != GL_NO_ERROR) { if(error != GL_NO_ERROR) {
int error3= gluBuild2DMipmaps( int error3= gluBuild2DMipmaps(
@@ -880,6 +880,19 @@ void Texture2DGl::init(Filter filter, int maxAnisotropy) {
else { else {
//build single texture //build single texture
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_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, glCompressionFormat,pixmap.getW(),
pixmap.getH(),0, glFormat, GL_UNSIGNED_BYTE, pixels);
GLint error= glGetError();
// Now try without compression if we tried compression
if(error != GL_NO_ERROR && glCompressionFormat != glInternalFormat) {
glTexImage2D(GL_TEXTURE_2D, 0, glInternalFormat,pixmap.getW(),
pixmap.getH(),0, glFormat, GL_UNSIGNED_BYTE, pixels);
GLint error2= glGetError();
if(error2 == GL_NO_ERROR) { if(error2 == GL_NO_ERROR) {
error = GL_NO_ERROR; error = GL_NO_ERROR;
@@ -887,7 +900,7 @@ void Texture2DGl::init(Filter filter, int maxAnisotropy) {
else { else {
glTexImage2D(GL_TEXTURE_2D, 0, glInternalFormat, pot(pixmap.getW()), glTexImage2D(GL_TEXTURE_2D, 0, glInternalFormat, pot(pixmap.getW()),
pot(pixmap.getH()), 0, glFormat, GL_UNSIGNED_BYTE, NULL); pot(pixmap.getH()), 0, glFormat, GL_UNSIGNED_BYTE, NULL);
// Now try without compression if we tried compression
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, pixmap.getW(), pixmap.getH(), glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, pixmap.getW(), pixmap.getH(),
glFormat, GL_UNSIGNED_BYTE, pixels); glFormat, GL_UNSIGNED_BYTE, pixels);
@@ -1125,6 +1138,19 @@ void TextureCubeGl::init(Filter filter, int maxAnisotropy) {
else { else {
glTexImage2D( glTexImage2D(
target, 0, glCompressionFormat, target, 0, glCompressionFormat,
currentPixmap->getW(), currentPixmap->getH(),
0, glFormat, GL_UNSIGNED_BYTE, pixels);
int error = glGetError();
// Now try without compression if we tried compression
if(error != GL_NO_ERROR && glCompressionFormat != glInternalFormat) {
glTexImage2D(
target, 0, glInternalFormat,
currentPixmap->getW(), currentPixmap->getH(),
0, glFormat, GL_UNSIGNED_BYTE, pixels);
GLint error2= glGetError();
if(error2 == GL_NO_ERROR) { if(error2 == GL_NO_ERROR) {
error = GL_NO_ERROR; error = GL_NO_ERROR;