mirror of
https://github.com/glest/glest-source.git
synced 2025-08-21 07:31:21 +02:00
- attempt to work around non power of two texture errors (tomreyn please try this rev and report back)
This commit is contained in:
@@ -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;
|
||||||
|
Reference in New Issue
Block a user