|
|
@ -353,7 +353,7 @@ void rlScalef(float x, float y, float z) |
|
|
|
// Multiply the current matrix by another matrix |
|
|
|
void rlMultMatrixf(float *m) |
|
|
|
{ |
|
|
|
// l">TODO: review Matrix creation from array |
|
|
|
// Matrix creation from array |
|
|
|
Matrix mat = { m[0], m[1], m[2], m[3], |
|
|
|
m[4], m[5], m[6], m[7], |
|
|
|
m[8], m[9], m[10], m[11], |
|
|
@ -511,7 +511,7 @@ void rlEnd(void) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// TODO: Make sure normals count match vertex count |
|
|
|
// TODO: Make sure normals count match vertex count... if normals support is added in a future... :P |
|
|
|
|
|
|
|
} break; |
|
|
|
default: break; |
|
|
@ -1417,6 +1417,7 @@ unsigned int rlglLoadTexture(unsigned char *data, int width, int height, bool ge |
|
|
|
glBindTexture(GL_TEXTURE_2D, id); |
|
|
|
|
|
|
|
// NOTE: glTexParameteri does NOT affect texture uploading, just the way it's used! |
|
|
|
// 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_REPEAT); // Set texture to repead on x-axis |
|
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); // Set texture to repead on y-axis |
|
|
|
|
|
|
@ -1433,6 +1434,7 @@ unsigned int rlglLoadTexture(unsigned char *data, int width, int height, bool ge |
|
|
|
} |
|
|
|
|
|
|
|
// If mipmaps are being used, we configure mag-min filters accordingly |
|
|
|
// NOTE: OpenGL ES 2.0 with no GL_OES_texture_npot support (i.e. WebGL) has limited NPOT support, so only GL_LINEAR or GL_NEAREST can be used |
|
|
|
if (genMipmaps) |
|
|
|
{ |
|
|
|
// Trilinear filtering with mipmaps |
|
|
@ -1476,16 +1478,23 @@ unsigned int rlglLoadTexture(unsigned char *data, int width, int height, bool ge |
|
|
|
else glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(GRAPHICS_API_OPENGL_33) |
|
|
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) |
|
|
|
// NOTE: We define internal (GPU) format as GL_RGBA8 (probably BGRA8 in practice, driver takes care) |
|
|
|
// NOTE: On embedded systems, we let the driver choose the best internal format |
|
|
|
//glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); // OpenGL |
|
|
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); // WebGL |
|
|
|
#elif defined(GRAPHICS_API_OPENGL_ES2) |
|
|
|
// NOTE: On embedded systems, we let the driver choose the best internal format |
|
|
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); |
|
|
|
#endif |
|
|
|
|
|
|
|
// TODO: Add support for multiple color modes (16bit color modes and grayscale) |
|
|
|
// Ref: https://www.khronos.org/opengles/sdk/docs/man3/html/glTexImage2D.xhtml |
|
|
|
// On WebGL, internalFormat must match format and options allowed are: GL_LUMINANCE, GL_RGB, GL_RGBA |
|
|
|
// (sized)internalFormat format type |
|
|
|
// GL_R GL_RED GL_UNSIGNED_BYTE |
|
|
|
// GL_RGB565 GL_RGB GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT_5_6_5 |
|
|
|
// GL_RGB5_A1 GL_RGBA GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT_5_5_5_1 |
|
|
|
// GL_RGBA4 GL_RGBA GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT_4_4_4_4 |
|
|
|
// GL_RGBA8 GL_RGBA GL_UNSIGNED_BYTE |
|
|
|
// GL_RGB8 GL_RGB GL_UNSIGNED_BYTE |
|
|
|
|
|
|
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) |
|
|
|
if (genMipmaps) |
|
|
|
{ |
|
|
|
glGenerateMipmap(GL_TEXTURE_2D); // Generate mipmaps automatically |
|
|
@ -2142,7 +2151,7 @@ static void InitializeBuffersGPU(void) |
|
|
|
} |
|
|
|
|
|
|
|
// Update VBOs with vertex array data |
|
|
|
// TODO: If there is not vertex data, buffers doesn't need to be updated (vertexCount > 0) |
|
|
|
// NOTE: If there is not vertex data, buffers doesn't need to be updated (vertexCount > 0) |
|
|
|
// TODO: If no data changed on the CPU arrays --> No need to update GPU arrays every frame! |
|
|
|
static void UpdateBuffers(void) |
|
|
|
{ |
|
|
|