aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorraysan5 <raysan5@gmail.com>2015-09-02 20:36:05 +0200
committerraysan5 <raysan5@gmail.com>2015-09-02 20:36:05 +0200
commit94d0e8320795aeba496dbda639a5430375fcce07 (patch)
treeb78f57eac63f8e2947d9c76c151d6ce314248ee0
parentab459bf418c7d8d757045440bc868e196dac8daf (diff)
downloadraylib-94d0e8320795aeba496dbda639a5430375fcce07.tar.gz
raylib-94d0e8320795aeba496dbda639a5430375fcce07.zip
Corrected crazy bug about model textures
On OpenGL ES it was set to use GL_CLAMP_TO_EDGE wrap mode for textures. On LoadOBJ() texture coordinates were wrongly Y-flipped
-rw-r--r--src/models.c12
-rw-r--r--src/rlgl.c15
2 files changed, 19 insertions, 8 deletions
diff --git a/src/models.c b/src/models.c
index b4dadbc7..4943aa5e 100644
--- a/src/models.c
+++ b/src/models.c
@@ -1731,7 +1731,7 @@ static VertexData LoadOBJ(const char *fileName)
int tcCounter = 0; // Used to count texcoords float by float
int nCounter = 0; // Used to count normals float by float
- int vNum[3], vtNum[3], vnNum[3];
+ int vNum[3], vtNum[3], vnNum[3]; // Used to store triangle indices for v, vt, vn
rewind(objFile); // Return to the beginning of the file, to read again
@@ -1803,14 +1803,16 @@ static VertexData LoadOBJ(const char *fileName)
if (numTexCoords > 0)
{
+ // NOTE: If using negative texture coordinates with a texture filter of GL_CLAMP_TO_EDGE doesn't work!
+ // NOTE: Texture coordinates are Y flipped upside-down
vData.texcoords[tcCounter] = midTexCoords[vtNum[0]-1].x;
- vData.texcoords[tcCounter + 1] = -midTexCoords[vtNum[0]-1].y;
+ vData.texcoords[tcCounter + 1] = 1.0f - midTexCoords[vtNum[0]-1].y;
tcCounter += 2;
vData.texcoords[tcCounter] = midTexCoords[vtNum[1]-1].x;
- vData.texcoords[tcCounter + 1] = -midTexCoords[vtNum[1]-1].y;
+ vData.texcoords[tcCounter + 1] = 1.0f - midTexCoords[vtNum[1]-1].y;
tcCounter += 2;
vData.texcoords[tcCounter] = midTexCoords[vtNum[2]-1].x;
- vData.texcoords[tcCounter + 1] = -midTexCoords[vtNum[2]-1].y;
+ vData.texcoords[tcCounter + 1] = 1.0f - midTexCoords[vtNum[2]-1].y;
tcCounter += 2;
}
} break;
@@ -1822,7 +1824,7 @@ static VertexData LoadOBJ(const char *fileName)
// Security check, just in case no normals or no texcoords defined in OBJ
if (numTexCoords == 0) for (int i = 0; i < (2*vData.vertexCount); i++) vData.texcoords[i] = 0.0f;
-
+
// NOTE: We set all vertex colors to white
// NOTE: Not used any more... just one plain color defined at DrawModel()
for (int i = 0; i < (4*vData.vertexCount); i++) vData.colors[i] = 255;
diff --git a/src/rlgl.c b/src/rlgl.c
index 0d2eb647..0169a74d 100644
--- a/src/rlgl.c
+++ b/src/rlgl.c
@@ -1219,7 +1219,7 @@ void rlglClose(void)
rlDeleteVertexArrays(postproQuad.mesh.vaoId);
- TraceLog(INFO, "[FBO %i] Unloaded postpro quad data", fbo);
+ TraceLog(INFO, "[FBO %i] Unloaded postprocessing data", fbo);
}
free(draws);
@@ -1780,8 +1780,17 @@ unsigned int rlglLoadTexture(void *data, int width, int height, int textureForma
// NOTE: glTexParameteri does NOT affect texture uploading, just the way it's used
#if defined(GRAPHICS_API_OPENGL_ES2)
// NOTE: OpenGL ES 2.0 with no GL_OES_texture_npot support (i.e. WebGL) has limited NPOT support, so CLAMP_TO_EDGE must be used
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); // Set texture to clamp on x-axis
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); // Set texture to clamp on y-axis
+ if (npotSupported)
+ {
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // Set texture to repeat on x-axis
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); // Set texture to repeat on y-axis
+ }
+ else
+ {
+ // NOTE: If using negative texture coordinates (LoadOBJ()), it does not work!
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); // Set texture to clamp on x-axis
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); // Set texture to clamp on y-axis
+ }
#else
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // Set texture to repeat on x-axis
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); // Set texture to repeat on y-axis