Merge a9e88c1cc9 into 75a73d9417
This commit is contained in:
commit
97e5e8a33a
13
src/core.c
13
src/core.c
|
|
@ -55,7 +55,7 @@
|
||||||
|
|
||||||
#if defined(PLATFORM_DESKTOP)
|
#if defined(PLATFORM_DESKTOP)
|
||||||
#define GLAD_EXTENSIONS_LOADER
|
#define GLAD_EXTENSIONS_LOADER
|
||||||
#if defined(GLEW_EXTENSIONS_LOADER)
|
#if defined(GLEW_EXTENSIONS_LOADER) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
#define GLEW_STATIC
|
#define GLEW_STATIC
|
||||||
#include <GL/glew.h> // GLEW extensions loading lib
|
#include <GL/glew.h> // GLEW extensions loading lib
|
||||||
#elif defined(GLAD_EXTENSIONS_LOADER)
|
#elif defined(GLAD_EXTENSIONS_LOADER)
|
||||||
|
|
@ -1504,7 +1504,7 @@ static void InitDisplay(int width, int height)
|
||||||
|
|
||||||
// NOTE: GLEW is a big library that loads ALL extensions, we can use some alternative to load only required ones
|
// NOTE: GLEW is a big library that loads ALL extensions, we can use some alternative to load only required ones
|
||||||
// Alternatives: glLoadGen, glad, libepoxy
|
// Alternatives: glLoadGen, glad, libepoxy
|
||||||
#elif defined(GLAD_EXTENSIONS_LOADER)
|
#elif defined(GLAD_EXTENSIONS_LOADER) && defined(GRAPHICS_API_OPENGL_33)
|
||||||
// NOTE: glad is generated and contains only required OpenGL version and Core extensions
|
// NOTE: glad is generated and contains only required OpenGL version and Core extensions
|
||||||
//if (!gladLoadGL()) TraceLog(ERROR, "Failed to initialize glad\n");
|
//if (!gladLoadGL()) TraceLog(ERROR, "Failed to initialize glad\n");
|
||||||
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) TraceLog(ERROR, "Failed to initialize glad\n"); // No GLFW3 in this module...
|
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) TraceLog(ERROR, "Failed to initialize glad\n"); // No GLFW3 in this module...
|
||||||
|
|
@ -1516,6 +1516,15 @@ static void InitDisplay(int width, int height)
|
||||||
//if (GLAD_GL_ARB_vertex_array_object) // Use GL_ARB_vertex_array_object
|
//if (GLAD_GL_ARB_vertex_array_object) // Use GL_ARB_vertex_array_object
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
else if(rlGetVersion() == OPENGL_21)
|
||||||
|
{
|
||||||
|
GLenum error = glewInit();
|
||||||
|
if (error != GLEW_OK) TraceLog(ERROR, "Failed to initialize GLEW - Error Code: %s\n", glewGetErrorString(error));
|
||||||
|
if (glewIsSupported("GL_VERSION_2_1")) TraceLog(INFO, "OpenGL 2.1 profile supported");
|
||||||
|
else TraceLog(ERROR, "OpenGL 2.1 profile not supported");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Enables GPU v-sync, so frames are not limited to screen refresh rate (60Hz -> 60 FPS)
|
// Enables GPU v-sync, so frames are not limited to screen refresh rate (60Hz -> 60 FPS)
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,7 @@ ifeq ($(PLATFORM),PLATFORM_RPI)
|
||||||
else
|
else
|
||||||
# define raylib graphics api to use (OpenGL 1.1 by default)
|
# define raylib graphics api to use (OpenGL 1.1 by default)
|
||||||
GRAPHICS ?= GRAPHICS_API_OPENGL_11
|
GRAPHICS ?= GRAPHICS_API_OPENGL_11
|
||||||
|
#GRAPHICS = GRAPHICS_API_OPENGL_21 # Uncomment to use OpenGL 2.1
|
||||||
#GRAPHICS = GRAPHICS_API_OPENGL_33 # Uncomment to use OpenGL 3.3
|
#GRAPHICS = GRAPHICS_API_OPENGL_33 # Uncomment to use OpenGL 3.3
|
||||||
endif
|
endif
|
||||||
ifeq ($(PLATFORM),PLATFORM_WEB)
|
ifeq ($(PLATFORM),PLATFORM_WEB)
|
||||||
|
|
|
||||||
133
src/rlgl.c
133
src/rlgl.c
|
|
@ -42,6 +42,15 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
#ifdef __APPLE__
|
||||||
|
// ?
|
||||||
|
#else
|
||||||
|
#define GLEW_STATIC
|
||||||
|
#include <GL/glew.h>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33)
|
#if defined(GRAPHICS_API_OPENGL_33)
|
||||||
#ifdef __APPLE__ // OpenGL include for OSX
|
#ifdef __APPLE__ // OpenGL include for OSX
|
||||||
#include <OpenGL/gl3.h>
|
#include <OpenGL/gl3.h>
|
||||||
|
|
@ -158,7 +167,7 @@ typedef struct {
|
||||||
float *vertices; // 3 components per vertex
|
float *vertices; // 3 components per vertex
|
||||||
float *texcoords; // 2 components per vertex
|
float *texcoords; // 2 components per vertex
|
||||||
unsigned char *colors; // 4 components per vertex
|
unsigned char *colors; // 4 components per vertex
|
||||||
#if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33)
|
#if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
unsigned int *indices; // 6 indices per quad (could be int)
|
unsigned int *indices; // 6 indices per quad (could be int)
|
||||||
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
unsigned short *indices; // 6 indices per quad (must be short)
|
unsigned short *indices; // 6 indices per quad (must be short)
|
||||||
|
|
@ -197,7 +206,7 @@ typedef enum { INFO = 0, ERROR, WARNING, DEBUG, OTHER } TraceLogType;
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Global Variables Definition
|
// Global Variables Definition
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
static Matrix stack[MATRIX_STACK_SIZE];
|
static Matrix stack[MATRIX_STACK_SIZE];
|
||||||
static int stackCounter = 0;
|
static int stackCounter = 0;
|
||||||
|
|
||||||
|
|
@ -277,7 +286,7 @@ unsigned int whiteTexture;
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Module specific Functions Declaration
|
// Module specific Functions Declaration
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
static Shader LoadDefaultShader(void);
|
static Shader LoadDefaultShader(void);
|
||||||
static Shader LoadSimpleShader(void);
|
static Shader LoadSimpleShader(void);
|
||||||
static void InitializeBuffers(void);
|
static void InitializeBuffers(void);
|
||||||
|
|
@ -351,7 +360,7 @@ void rlRotatef(float angleDeg, float x, float y, float z) { glRotatef(angleDeg,
|
||||||
void rlScalef(float x, float y, float z) { glScalef(x, y, z); }
|
void rlScalef(float x, float y, float z) { glScalef(x, y, z); }
|
||||||
void rlMultMatrixf(float *mat) { glMultMatrixf(mat); }
|
void rlMultMatrixf(float *mat) { glMultMatrixf(mat); }
|
||||||
|
|
||||||
#elif defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#elif defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
|
||||||
// Choose the current matrix to be transformed
|
// Choose the current matrix to be transformed
|
||||||
void rlMatrixMode(int mode)
|
void rlMatrixMode(int mode)
|
||||||
|
|
@ -487,7 +496,7 @@ void rlColor4ub(byte r, byte g, byte b, byte a) { glColor4ub(r, g, b, a); }
|
||||||
void rlColor3f(float x, float y, float z) { glColor3f(x, y, z); }
|
void rlColor3f(float x, float y, float z) { glColor3f(x, y, z); }
|
||||||
void rlColor4f(float x, float y, float z, float w) { glColor4f(x, y, z, w); }
|
void rlColor4f(float x, float y, float z, float w) { glColor4f(x, y, z, w); }
|
||||||
|
|
||||||
#elif defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#elif defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
|
||||||
// Initialize drawing mode (how to organize vertex)
|
// Initialize drawing mode (how to organize vertex)
|
||||||
void rlBegin(int mode)
|
void rlBegin(int mode)
|
||||||
|
|
@ -760,7 +769,7 @@ void rlEnableTexture(unsigned int id)
|
||||||
glBindTexture(GL_TEXTURE_2D, id);
|
glBindTexture(GL_TEXTURE_2D, id);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
if (draws[drawsCounter - 1].textureId != id)
|
if (draws[drawsCounter - 1].textureId != id)
|
||||||
{
|
{
|
||||||
if (draws[drawsCounter - 1].vertexCount > 0) drawsCounter++;
|
if (draws[drawsCounter - 1].vertexCount > 0) drawsCounter++;
|
||||||
|
|
@ -789,7 +798,7 @@ void rlDeleteTextures(unsigned int id)
|
||||||
// Enable rendering to postprocessing FBO
|
// Enable rendering to postprocessing FBO
|
||||||
void rlEnablePostproFBO()
|
void rlEnablePostproFBO()
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, postproFbo.id);
|
glBindFramebuffer(GL_FRAMEBUFFER, postproFbo.id);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
@ -797,7 +806,7 @@ void rlEnablePostproFBO()
|
||||||
// Unload shader from GPU memory
|
// Unload shader from GPU memory
|
||||||
void rlDeleteShader(unsigned int id)
|
void rlDeleteShader(unsigned int id)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
glDeleteProgram(id);
|
glDeleteProgram(id);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
@ -805,7 +814,7 @@ void rlDeleteShader(unsigned int id)
|
||||||
// Unload vertex data (VAO) from GPU memory
|
// Unload vertex data (VAO) from GPU memory
|
||||||
void rlDeleteVertexArrays(unsigned int id)
|
void rlDeleteVertexArrays(unsigned int id)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
if (vaoSupported) glDeleteVertexArrays(1, &id);
|
if (vaoSupported) glDeleteVertexArrays(1, &id);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
@ -813,7 +822,7 @@ void rlDeleteVertexArrays(unsigned int id)
|
||||||
// Unload vertex data (VBO) from GPU memory
|
// Unload vertex data (VBO) from GPU memory
|
||||||
void rlDeleteBuffers(unsigned int id)
|
void rlDeleteBuffers(unsigned int id)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
glDeleteBuffers(1, &id);
|
glDeleteBuffers(1, &id);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
@ -846,6 +855,8 @@ int rlGetVersion(void)
|
||||||
return OPENGL_33;
|
return OPENGL_33;
|
||||||
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
return OPENGL_ES_20;
|
return OPENGL_ES_20;
|
||||||
|
#elif defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
return OPENGL_21;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -889,11 +900,11 @@ void rlglInit(void)
|
||||||
//TraceLog(INFO, "OpenGL 1.1 (or driver default) profile initialized");
|
//TraceLog(INFO, "OpenGL 1.1 (or driver default) profile initialized");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
// Get supported extensions list
|
// Get supported extensions list
|
||||||
GLint numExt = 0;
|
GLint numExt = 0;
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
|
||||||
// NOTE: On OpenGL 3.3 VAO and NPOT are supported by default
|
// NOTE: On OpenGL 3.3 VAO and NPOT are supported by default
|
||||||
vaoSupported = true;
|
vaoSupported = true;
|
||||||
|
|
@ -1046,7 +1057,7 @@ void rlglInit(void)
|
||||||
// Modifies global variables: postproFbo, postproQuad
|
// Modifies global variables: postproFbo, postproQuad
|
||||||
void rlglInitPostpro(void)
|
void rlglInitPostpro(void)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
postproFbo = rlglLoadFBO(screenWidth, screenHeight);
|
postproFbo = rlglLoadFBO(screenWidth, screenHeight);
|
||||||
|
|
||||||
if (postproFbo.id > 0)
|
if (postproFbo.id > 0)
|
||||||
|
|
@ -1082,7 +1093,7 @@ FBO rlglLoadFBO(int width, int height)
|
||||||
FBO fbo;
|
FBO fbo;
|
||||||
fbo.id = 0;
|
fbo.id = 0;
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
// Create the texture that will serve as the color attachment for the framebuffer
|
// Create the texture that will serve as the color attachment for the framebuffer
|
||||||
glGenTextures(1, &fbo.colorTextureId);
|
glGenTextures(1, &fbo.colorTextureId);
|
||||||
glBindTexture(GL_TEXTURE_2D, fbo.colorTextureId);
|
glBindTexture(GL_TEXTURE_2D, fbo.colorTextureId);
|
||||||
|
|
@ -1149,7 +1160,7 @@ FBO rlglLoadFBO(int width, int height)
|
||||||
// Unload framebuffer object
|
// Unload framebuffer object
|
||||||
void rlglUnloadFBO(FBO fbo)
|
void rlglUnloadFBO(FBO fbo)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
glDeleteFramebuffers(1, &fbo.id);
|
glDeleteFramebuffers(1, &fbo.id);
|
||||||
glDeleteTextures(1, &fbo.colorTextureId);
|
glDeleteTextures(1, &fbo.colorTextureId);
|
||||||
glDeleteTextures(1, &fbo.depthTextureId);
|
glDeleteTextures(1, &fbo.depthTextureId);
|
||||||
|
|
@ -1161,7 +1172,7 @@ void rlglUnloadFBO(FBO fbo)
|
||||||
// Vertex Buffer Object deinitialization (memory free)
|
// Vertex Buffer Object deinitialization (memory free)
|
||||||
void rlglClose(void)
|
void rlglClose(void)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
// Unbind everything
|
// Unbind everything
|
||||||
if (vaoSupported) glBindVertexArray(0);
|
if (vaoSupported) glBindVertexArray(0);
|
||||||
glDisableVertexAttribArray(0);
|
glDisableVertexAttribArray(0);
|
||||||
|
|
@ -1241,7 +1252,7 @@ void rlglClose(void)
|
||||||
// Drawing batches: triangles, quads, lines
|
// Drawing batches: triangles, quads, lines
|
||||||
void rlglDraw(void)
|
void rlglDraw(void)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
UpdateBuffers();
|
UpdateBuffers();
|
||||||
|
|
||||||
if ((lines.vCounter > 0) || (triangles.vCounter > 0) || (quads.vCounter > 0))
|
if ((lines.vCounter > 0) || (triangles.vCounter > 0) || (quads.vCounter > 0))
|
||||||
|
|
@ -1355,7 +1366,7 @@ void rlglDraw(void)
|
||||||
glBindTexture(GL_TEXTURE_2D, draws[i].textureId);
|
glBindTexture(GL_TEXTURE_2D, draws[i].textureId);
|
||||||
|
|
||||||
// NOTE: The final parameter tells the GPU the offset in bytes from the start of the index buffer to the location of the first index to process
|
// NOTE: The final parameter tells the GPU the offset in bytes from the start of the index buffer to the location of the first index to process
|
||||||
#if defined(GRAPHICS_API_OPENGL_33)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
glDrawElements(GL_TRIANGLES, numIndicesToProcess, GL_UNSIGNED_INT, (GLvoid*) (sizeof(GLuint) * indicesOffset));
|
glDrawElements(GL_TRIANGLES, numIndicesToProcess, GL_UNSIGNED_INT, (GLvoid*) (sizeof(GLuint) * indicesOffset));
|
||||||
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
glDrawElements(GL_TRIANGLES, numIndicesToProcess, GL_UNSIGNED_SHORT, (GLvoid*) (sizeof(GLushort) * indicesOffset));
|
glDrawElements(GL_TRIANGLES, numIndicesToProcess, GL_UNSIGNED_SHORT, (GLvoid*) (sizeof(GLushort) * indicesOffset));
|
||||||
|
|
@ -1403,7 +1414,7 @@ void rlglDraw(void)
|
||||||
// Draw with postprocessing shader
|
// Draw with postprocessing shader
|
||||||
void rlglDrawPostpro(void)
|
void rlglDrawPostpro(void)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
|
||||||
rlglDrawModel(postproQuad, (Vector3){ 0.0f, 0.0f, 0.0f }, (Vector3){ 0.0f, 0.0f, 0.0f }, 0.0f, (Vector3){1.0f, 1.0f, 1.0f}, (Color){ 255, 255, 255, 255 }, false);
|
rlglDrawModel(postproQuad, (Vector3){ 0.0f, 0.0f, 0.0f }, (Vector3){ 0.0f, 0.0f, 0.0f }, 0.0f, (Vector3){1.0f, 1.0f, 1.0f}, (Color){ 255, 255, 255, 255 }, false);
|
||||||
|
|
@ -1414,7 +1425,7 @@ void rlglDrawPostpro(void)
|
||||||
// NOTE: Model transform can come within model struct
|
// NOTE: Model transform can come within model struct
|
||||||
void rlglDrawModel(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color color, bool wires)
|
void rlglDrawModel(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color color, bool wires)
|
||||||
{
|
{
|
||||||
#if defined (GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33)
|
#if defined (GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
// NOTE: glPolygonMode() not available on OpenGL ES
|
// NOTE: glPolygonMode() not available on OpenGL ES
|
||||||
if (wires) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
if (wires) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1451,7 +1462,7 @@ void rlglDrawModel(Model model, Vector3 position, Vector3 rotationAxis, float ro
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
glUseProgram(model.shader.id);
|
glUseProgram(model.shader.id);
|
||||||
|
|
||||||
// At this point the modelview matrix just contains the view matrix (camera)
|
// At this point the modelview matrix just contains the view matrix (camera)
|
||||||
|
|
@ -1552,7 +1563,7 @@ void rlglDrawModel(Model model, Vector3 position, Vector3 rotationAxis, float ro
|
||||||
glUseProgram(0); // Unbind shader program
|
glUseProgram(0); // Unbind shader program
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33)
|
#if defined (GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
// NOTE: glPolygonMode() not available on OpenGL ES
|
// NOTE: glPolygonMode() not available on OpenGL ES
|
||||||
if (wires) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
if (wires) glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1684,7 +1695,7 @@ unsigned int rlglLoadTexture(void *data, int width, int height, int textureForma
|
||||||
TraceLog(WARNING, "DXT compressed texture format not supported");
|
TraceLog(WARNING, "DXT compressed texture format not supported");
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
if ((!texCompETC1Supported) && (textureFormat == COMPRESSED_ETC1_RGB))
|
if ((!texCompETC1Supported) && (textureFormat == COMPRESSED_ETC1_RGB))
|
||||||
{
|
{
|
||||||
TraceLog(WARNING, "ETC1 compressed texture format not supported");
|
TraceLog(WARNING, "ETC1 compressed texture format not supported");
|
||||||
|
|
@ -1712,13 +1723,13 @@ unsigned int rlglLoadTexture(void *data, int width, int height, int textureForma
|
||||||
|
|
||||||
glGenTextures(1, &id); // Generate Pointer to the texture
|
glGenTextures(1, &id); // Generate Pointer to the texture
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
//glActiveTexture(GL_TEXTURE0); // If not defined, using GL_TEXTURE0 by default (shader texture)
|
//glActiveTexture(GL_TEXTURE0); // If not defined, using GL_TEXTURE0 by default (shader texture)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, id);
|
glBindTexture(GL_TEXTURE_2D, id);
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
// NOTE: We define internal (GPU) format as GL_RGBA8 (probably BGRA8 in practice, driver takes care)
|
// 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
|
// NOTE: On embedded systems, we let the driver choose the best internal format
|
||||||
|
|
||||||
|
|
@ -1822,7 +1833,7 @@ unsigned int rlglLoadTexture(void *data, int width, int height, int textureForma
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // Alternative: GL_LINEAR
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // Alternative: GL_LINEAR
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // Alternative: GL_LINEAR
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // Alternative: GL_LINEAR
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
if (mipmapCount > 1)
|
if (mipmapCount > 1)
|
||||||
{
|
{
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
|
@ -1847,7 +1858,7 @@ void rlglUpdateTexture(unsigned int id, int width, int height, int format, void
|
||||||
{
|
{
|
||||||
glBindTexture(GL_TEXTURE_2D, id);
|
glBindTexture(GL_TEXTURE_2D, id);
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
switch (format)
|
switch (format)
|
||||||
{
|
{
|
||||||
case UNCOMPRESSED_GRAYSCALE: glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RED, GL_UNSIGNED_BYTE, (unsigned char *)data); break;
|
case UNCOMPRESSED_GRAYSCALE: glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RED, GL_UNSIGNED_BYTE, (unsigned char *)data); break;
|
||||||
|
|
@ -1916,7 +1927,7 @@ void rlglGenerateMipmaps(Texture2D texture)
|
||||||
|
|
||||||
TraceLog(WARNING, "[TEX ID %i] Mipmaps generated manually on CPU side", texture.id);
|
TraceLog(WARNING, "[TEX ID %i] Mipmaps generated manually on CPU side", texture.id);
|
||||||
|
|
||||||
#elif defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#elif defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
glGenerateMipmap(GL_TEXTURE_2D); // Generate mipmaps automatically
|
glGenerateMipmap(GL_TEXTURE_2D); // Generate mipmaps automatically
|
||||||
TraceLog(INFO, "[TEX ID %i] Mipmaps generated automatically", texture.id);
|
TraceLog(INFO, "[TEX ID %i] Mipmaps generated automatically", texture.id);
|
||||||
|
|
||||||
|
|
@ -1945,7 +1956,7 @@ Model rlglLoadModel(Mesh mesh)
|
||||||
model.texture.id = 0; // No texture required
|
model.texture.id = 0; // No texture required
|
||||||
model.shader.id = 0; // No shader used
|
model.shader.id = 0; // No shader used
|
||||||
|
|
||||||
#elif defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#elif defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
model.texture.id = whiteTexture; // Default whiteTexture
|
model.texture.id = whiteTexture; // Default whiteTexture
|
||||||
model.texture.width = 1; // Default whiteTexture width
|
model.texture.width = 1; // Default whiteTexture width
|
||||||
model.texture.height = 1; // Default whiteTexture height
|
model.texture.height = 1; // Default whiteTexture height
|
||||||
|
|
@ -2041,7 +2052,7 @@ void *rlglReadTexturePixels(Texture2D texture)
|
||||||
{
|
{
|
||||||
void *pixels = NULL;
|
void *pixels = NULL;
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33)
|
#if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
glBindTexture(GL_TEXTURE_2D, texture.id);
|
glBindTexture(GL_TEXTURE_2D, texture.id);
|
||||||
|
|
||||||
// NOTE: Using texture.id, we can retrieve some texture info (but not on OpenGL ES 2.0)
|
// NOTE: Using texture.id, we can retrieve some texture info (but not on OpenGL ES 2.0)
|
||||||
|
|
@ -2065,7 +2076,7 @@ void *rlglReadTexturePixels(Texture2D texture)
|
||||||
#if defined(GRAPHICS_API_OPENGL_11)
|
#if defined(GRAPHICS_API_OPENGL_11)
|
||||||
case UNCOMPRESSED_GRAYSCALE: pixels = (unsigned char *)malloc(size); glFormat = GL_LUMINANCE; glType = GL_UNSIGNED_BYTE; break; // 8 bit per pixel (no alpha)
|
case UNCOMPRESSED_GRAYSCALE: pixels = (unsigned char *)malloc(size); glFormat = GL_LUMINANCE; glType = GL_UNSIGNED_BYTE; break; // 8 bit per pixel (no alpha)
|
||||||
case UNCOMPRESSED_GRAY_ALPHA: pixels = (unsigned char *)malloc(size*2); glFormat = GL_LUMINANCE_ALPHA; glType = GL_UNSIGNED_BYTE; break; // 16 bpp (2 channels)
|
case UNCOMPRESSED_GRAY_ALPHA: pixels = (unsigned char *)malloc(size*2); glFormat = GL_LUMINANCE_ALPHA; glType = GL_UNSIGNED_BYTE; break; // 16 bpp (2 channels)
|
||||||
#elif defined(GRAPHICS_API_OPENGL_33)
|
#elif defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
case UNCOMPRESSED_GRAYSCALE: pixels = (unsigned char *)malloc(size); glFormat = GL_RED; glType = GL_UNSIGNED_BYTE; break;
|
case UNCOMPRESSED_GRAYSCALE: pixels = (unsigned char *)malloc(size); glFormat = GL_RED; glType = GL_UNSIGNED_BYTE; break;
|
||||||
case UNCOMPRESSED_GRAY_ALPHA: pixels = (unsigned char *)malloc(size*2); glFormat = GL_RG; glType = GL_UNSIGNED_BYTE; break;
|
case UNCOMPRESSED_GRAY_ALPHA: pixels = (unsigned char *)malloc(size*2); glFormat = GL_RG; glType = GL_UNSIGNED_BYTE; break;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -2169,7 +2180,7 @@ Shader LoadShader(char *vsFileName, char *fsFileName)
|
||||||
|
|
||||||
shader.id = 0; // Default value in case of loading failure
|
shader.id = 0; // Default value in case of loading failure
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
// Shaders loading from external text file
|
// Shaders loading from external text file
|
||||||
char *vShaderStr = TextFileRead(vsFileName);
|
char *vShaderStr = TextFileRead(vsFileName);
|
||||||
char *fShaderStr = TextFileRead(fsFileName);
|
char *fShaderStr = TextFileRead(fsFileName);
|
||||||
|
|
@ -2230,7 +2241,7 @@ unsigned int LoadShaderProgram(char *vShaderStr, char *fShaderStr)
|
||||||
{
|
{
|
||||||
unsigned int program = 0;
|
unsigned int program = 0;
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
GLuint vertexShader;
|
GLuint vertexShader;
|
||||||
GLuint fragmentShader;
|
GLuint fragmentShader;
|
||||||
|
|
||||||
|
|
@ -2338,7 +2349,7 @@ void UnloadShader(Shader shader)
|
||||||
// Set custom shader to be used on batch draw
|
// Set custom shader to be used on batch draw
|
||||||
void SetCustomShader(Shader shader)
|
void SetCustomShader(Shader shader)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
if (currentShader.id != shader.id)
|
if (currentShader.id != shader.id)
|
||||||
{
|
{
|
||||||
rlglDraw();
|
rlglDraw();
|
||||||
|
|
@ -2372,7 +2383,7 @@ void SetCustomShader(Shader shader)
|
||||||
// NOTE: Uses global variables screenWidth and screenHeight
|
// NOTE: Uses global variables screenWidth and screenHeight
|
||||||
void SetPostproShader(Shader shader)
|
void SetPostproShader(Shader shader)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
if (!enabledPostpro)
|
if (!enabledPostpro)
|
||||||
{
|
{
|
||||||
enabledPostpro = true;
|
enabledPostpro = true;
|
||||||
|
|
@ -2399,7 +2410,7 @@ void SetPostproShader(Shader shader)
|
||||||
// Set default shader to be used in batch draw
|
// Set default shader to be used in batch draw
|
||||||
void SetDefaultShader(void)
|
void SetDefaultShader(void)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
SetCustomShader(defaultShader);
|
SetCustomShader(defaultShader);
|
||||||
|
|
||||||
if (enabledPostpro)
|
if (enabledPostpro)
|
||||||
|
|
@ -2413,7 +2424,7 @@ void SetDefaultShader(void)
|
||||||
// Link shader to model
|
// Link shader to model
|
||||||
void SetModelShader(Model *model, Shader shader)
|
void SetModelShader(Model *model, Shader shader)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
model->shader = shader;
|
model->shader = shader;
|
||||||
|
|
||||||
if (vaoSupported) glBindVertexArray(model->mesh.vaoId);
|
if (vaoSupported) glBindVertexArray(model->mesh.vaoId);
|
||||||
|
|
@ -2445,7 +2456,7 @@ void SetModelShader(Model *model, Shader shader)
|
||||||
// Check if postprocessing is enabled (used in module: core)
|
// Check if postprocessing is enabled (used in module: core)
|
||||||
bool IsPosproShaderEnabled(void)
|
bool IsPosproShaderEnabled(void)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
return enabledPostpro;
|
return enabledPostpro;
|
||||||
#elif defined(GRAPHICS_API_OPENGL_11)
|
#elif defined(GRAPHICS_API_OPENGL_11)
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -2456,7 +2467,7 @@ bool IsPosproShaderEnabled(void)
|
||||||
int GetShaderLocation(Shader shader, const char *uniformName)
|
int GetShaderLocation(Shader shader, const char *uniformName)
|
||||||
{
|
{
|
||||||
int location = -1;
|
int location = -1;
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
location = glGetUniformLocation(shader.id, uniformName);
|
location = glGetUniformLocation(shader.id, uniformName);
|
||||||
|
|
||||||
if (location == -1) TraceLog(WARNING, "[SHDR ID %i] Shader location for %s could not be found", shader.id, uniformName);
|
if (location == -1) TraceLog(WARNING, "[SHDR ID %i] Shader location for %s could not be found", shader.id, uniformName);
|
||||||
|
|
@ -2467,7 +2478,7 @@ int GetShaderLocation(Shader shader, const char *uniformName)
|
||||||
// Set shader uniform value (float)
|
// Set shader uniform value (float)
|
||||||
void SetShaderValue(Shader shader, int uniformLoc, float *value, int size)
|
void SetShaderValue(Shader shader, int uniformLoc, float *value, int size)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
glUseProgram(shader.id);
|
glUseProgram(shader.id);
|
||||||
|
|
||||||
if (size == 1) glUniform1fv(uniformLoc, 1, value); // Shader uniform type: float
|
if (size == 1) glUniform1fv(uniformLoc, 1, value); // Shader uniform type: float
|
||||||
|
|
@ -2483,7 +2494,7 @@ void SetShaderValue(Shader shader, int uniformLoc, float *value, int size)
|
||||||
// Set shader uniform value (int)
|
// Set shader uniform value (int)
|
||||||
void SetShaderValuei(Shader shader, int uniformLoc, int *value, int size)
|
void SetShaderValuei(Shader shader, int uniformLoc, int *value, int size)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
glUseProgram(shader.id);
|
glUseProgram(shader.id);
|
||||||
|
|
||||||
if (size == 1) glUniform1iv(uniformLoc, 1, value); // Shader uniform type: int
|
if (size == 1) glUniform1iv(uniformLoc, 1, value); // Shader uniform type: int
|
||||||
|
|
@ -2499,7 +2510,7 @@ void SetShaderValuei(Shader shader, int uniformLoc, int *value, int size)
|
||||||
// Set shader uniform value (matrix 4x4)
|
// Set shader uniform value (matrix 4x4)
|
||||||
void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat)
|
void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
glUseProgram(shader.id);
|
glUseProgram(shader.id);
|
||||||
|
|
||||||
glUniformMatrix4fv(uniformLoc, 1, false, MatrixToFloat(mat));
|
glUniformMatrix4fv(uniformLoc, 1, false, MatrixToFloat(mat));
|
||||||
|
|
@ -2511,7 +2522,7 @@ void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat)
|
||||||
// Default diffuse shader map texture assignment
|
// Default diffuse shader map texture assignment
|
||||||
void SetShaderMapDiffuse(Shader *shader, Texture2D texture)
|
void SetShaderMapDiffuse(Shader *shader, Texture2D texture)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
shader->texDiffuseId = texture.id;
|
shader->texDiffuseId = texture.id;
|
||||||
|
|
||||||
glUseProgram(shader->id);
|
glUseProgram(shader->id);
|
||||||
|
|
@ -2530,7 +2541,7 @@ void SetShaderMapDiffuse(Shader *shader, Texture2D texture)
|
||||||
// Normal map texture shader assignment
|
// Normal map texture shader assignment
|
||||||
void SetShaderMapNormal(Shader *shader, const char *uniformName, Texture2D texture)
|
void SetShaderMapNormal(Shader *shader, const char *uniformName, Texture2D texture)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
shader->mapNormalLoc = glGetUniformLocation(shader->id, uniformName);
|
shader->mapNormalLoc = glGetUniformLocation(shader->id, uniformName);
|
||||||
|
|
||||||
if (shader->mapNormalLoc == -1) TraceLog(WARNING, "[SHDR ID %i] Shader location for %s could not be found", shader->id, uniformName);
|
if (shader->mapNormalLoc == -1) TraceLog(WARNING, "[SHDR ID %i] Shader location for %s could not be found", shader->id, uniformName);
|
||||||
|
|
@ -2555,7 +2566,7 @@ void SetShaderMapNormal(Shader *shader, const char *uniformName, Texture2D textu
|
||||||
// Specular map texture shader assignment
|
// Specular map texture shader assignment
|
||||||
void SetShaderMapSpecular(Shader *shader, const char *uniformName, Texture2D texture)
|
void SetShaderMapSpecular(Shader *shader, const char *uniformName, Texture2D texture)
|
||||||
{
|
{
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
shader->mapSpecularLoc = glGetUniformLocation(shader->id, uniformName);
|
shader->mapSpecularLoc = glGetUniformLocation(shader->id, uniformName);
|
||||||
|
|
||||||
if (shader->mapSpecularLoc == -1) TraceLog(WARNING, "[SHDR ID %i] Shader location for %s could not be found", shader->id, uniformName);
|
if (shader->mapSpecularLoc == -1) TraceLog(WARNING, "[SHDR ID %i] Shader location for %s could not be found", shader->id, uniformName);
|
||||||
|
|
@ -2585,7 +2596,7 @@ void SetShaderMapSpecular(Shader *shader, const char *uniformName, Texture2D tex
|
||||||
void SetShaderMap(Shader *shader, int mapLocation, Texture2D texture, int textureUnit)
|
void SetShaderMap(Shader *shader, int mapLocation, Texture2D texture, int textureUnit)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
if (mapLocation == -1) TraceLog(WARNING, "[SHDR ID %i] Map location could not be found", shader->id);
|
if (mapLocation == -1) TraceLog(WARNING, "[SHDR ID %i] Map location could not be found", shader->id);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -2626,7 +2637,7 @@ void SetBlendMode(int mode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
void PrintProjectionMatrix(void)
|
void PrintProjectionMatrix(void)
|
||||||
{
|
{
|
||||||
PrintMatrix(projection);
|
PrintMatrix(projection);
|
||||||
|
|
@ -2642,7 +2653,7 @@ void PrintModelviewMatrix(void)
|
||||||
// Module specific Functions Definition
|
// Module specific Functions Definition
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
// Convert image data to OpenGL texture (returns OpenGL valid Id)
|
// Convert image data to OpenGL texture (returns OpenGL valid Id)
|
||||||
// NOTE: Expected compressed image data and POT image
|
// NOTE: Expected compressed image data and POT image
|
||||||
static void LoadCompressedTexture(unsigned char *data, int width, int height, int mipmapCount, int compressedFormat)
|
static void LoadCompressedTexture(unsigned char *data, int width, int height, int mipmapCount, int compressedFormat)
|
||||||
|
|
@ -2704,6 +2715,13 @@ static Shader LoadDefaultShader(void)
|
||||||
"attribute vec4 vertexColor; \n"
|
"attribute vec4 vertexColor; \n"
|
||||||
"varying vec2 fragTexCoord; \n"
|
"varying vec2 fragTexCoord; \n"
|
||||||
"varying vec4 fragTintColor; \n"
|
"varying vec4 fragTintColor; \n"
|
||||||
|
#elif defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
char vShaderStr[] = "#version 120 \n"
|
||||||
|
"attribute vec3 vertexPosition; \n"
|
||||||
|
"attribute vec2 vertexTexCoord; \n"
|
||||||
|
"attribute vec4 vertexColor; \n"
|
||||||
|
"varying vec2 fragTexCoord; \n"
|
||||||
|
"varying vec4 fragTintColor; \n"
|
||||||
#endif
|
#endif
|
||||||
"uniform mat4 mvpMatrix; \n"
|
"uniform mat4 mvpMatrix; \n"
|
||||||
"void main() \n"
|
"void main() \n"
|
||||||
|
|
@ -2723,6 +2741,10 @@ static Shader LoadDefaultShader(void)
|
||||||
"precision mediump float; \n" // precision required for OpenGL ES2 (WebGL)
|
"precision mediump float; \n" // precision required for OpenGL ES2 (WebGL)
|
||||||
"varying vec2 fragTexCoord; \n"
|
"varying vec2 fragTexCoord; \n"
|
||||||
"varying vec4 fragTintColor; \n"
|
"varying vec4 fragTintColor; \n"
|
||||||
|
#elif defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
char fShaderStr[] = "#version 120 \n"
|
||||||
|
"varying vec2 fragTexCoord; \n"
|
||||||
|
"varying vec4 fragTintColor; \n"
|
||||||
#endif
|
#endif
|
||||||
"uniform sampler2D texture0; \n"
|
"uniform sampler2D texture0; \n"
|
||||||
"void main() \n"
|
"void main() \n"
|
||||||
|
|
@ -2784,6 +2806,12 @@ static Shader LoadSimpleShader(void)
|
||||||
"attribute vec2 vertexTexCoord; \n"
|
"attribute vec2 vertexTexCoord; \n"
|
||||||
"attribute vec3 vertexNormal; \n"
|
"attribute vec3 vertexNormal; \n"
|
||||||
"varying vec2 fragTexCoord; \n"
|
"varying vec2 fragTexCoord; \n"
|
||||||
|
#elif defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
char vShaderStr[] = "#version 120 \n"
|
||||||
|
"attribute vec3 vertexPosition; \n"
|
||||||
|
"attribute vec2 vertexTexCoord; \n"
|
||||||
|
"attribute vec3 vertexNormal; \n"
|
||||||
|
"varying vec2 fragTexCoord; \n"
|
||||||
#endif
|
#endif
|
||||||
"uniform mat4 mvpMatrix; \n"
|
"uniform mat4 mvpMatrix; \n"
|
||||||
"void main() \n"
|
"void main() \n"
|
||||||
|
|
@ -2800,6 +2828,9 @@ static Shader LoadSimpleShader(void)
|
||||||
char fShaderStr[] = "#version 100 \n"
|
char fShaderStr[] = "#version 100 \n"
|
||||||
"precision mediump float; \n" // precision required for OpenGL ES2 (WebGL)
|
"precision mediump float; \n" // precision required for OpenGL ES2 (WebGL)
|
||||||
"varying vec2 fragTexCoord; \n"
|
"varying vec2 fragTexCoord; \n"
|
||||||
|
#elif defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
char fShaderStr[] = "#version 120 \n"
|
||||||
|
"varying vec2 fragTexCoord; \n"
|
||||||
#endif
|
#endif
|
||||||
"uniform sampler2D texture0; \n"
|
"uniform sampler2D texture0; \n"
|
||||||
"uniform vec4 fragTintColor; \n"
|
"uniform vec4 fragTintColor; \n"
|
||||||
|
|
@ -2900,7 +2931,7 @@ static void InitializeBuffers(void)
|
||||||
quads.vertices = (float *)malloc(sizeof(float)*3*4*MAX_QUADS_BATCH); // 3 float by vertex, 4 vertex by quad
|
quads.vertices = (float *)malloc(sizeof(float)*3*4*MAX_QUADS_BATCH); // 3 float by vertex, 4 vertex by quad
|
||||||
quads.texcoords = (float *)malloc(sizeof(float)*2*4*MAX_QUADS_BATCH); // 2 float by texcoord, 4 texcoord by quad
|
quads.texcoords = (float *)malloc(sizeof(float)*2*4*MAX_QUADS_BATCH); // 2 float by texcoord, 4 texcoord by quad
|
||||||
quads.colors = (unsigned char *)malloc(sizeof(unsigned char)*4*4*MAX_QUADS_BATCH); // 4 float by color, 4 colors by quad
|
quads.colors = (unsigned char *)malloc(sizeof(unsigned char)*4*4*MAX_QUADS_BATCH); // 4 float by color, 4 colors by quad
|
||||||
#if defined(GRAPHICS_API_OPENGL_33)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
quads.indices = (unsigned int *)malloc(sizeof(int)*6*MAX_QUADS_BATCH); // 6 int by quad (indices)
|
quads.indices = (unsigned int *)malloc(sizeof(int)*6*MAX_QUADS_BATCH); // 6 int by quad (indices)
|
||||||
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
quads.indices = (unsigned short *)malloc(sizeof(short)*6*MAX_QUADS_BATCH); // 6 int by quad (indices)
|
quads.indices = (unsigned short *)malloc(sizeof(short)*6*MAX_QUADS_BATCH); // 6 int by quad (indices)
|
||||||
|
|
@ -3016,7 +3047,7 @@ static void InitializeBuffersGPU(void)
|
||||||
|
|
||||||
// Fill index buffer
|
// Fill index buffer
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, quadsBuffer[3]);
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, quadsBuffer[3]);
|
||||||
#if defined(GRAPHICS_API_OPENGL_33)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(int)*6*MAX_QUADS_BATCH, quads.indices, GL_STATIC_DRAW);
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(int)*6*MAX_QUADS_BATCH, quads.indices, GL_STATIC_DRAW);
|
||||||
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
#elif defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(short)*6*MAX_QUADS_BATCH, quads.indices, GL_STATIC_DRAW);
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(short)*6*MAX_QUADS_BATCH, quads.indices, GL_STATIC_DRAW);
|
||||||
|
|
@ -3098,7 +3129,7 @@ static void UpdateBuffers(void)
|
||||||
// Unbind the current VAO
|
// Unbind the current VAO
|
||||||
if (vaoSupported) glBindVertexArray(0);
|
if (vaoSupported) glBindVertexArray(0);
|
||||||
}
|
}
|
||||||
#endif //defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#endif //defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_11)
|
#if defined(GRAPHICS_API_OPENGL_11)
|
||||||
// Mipmaps data is generated after image data
|
// Mipmaps data is generated after image data
|
||||||
|
|
|
||||||
13
src/rlgl.h
13
src/rlgl.h
|
|
@ -44,11 +44,12 @@
|
||||||
|
|
||||||
// Choose opengl version here or just define it at compile time: -DGRAPHICS_API_OPENGL_33
|
// Choose opengl version here or just define it at compile time: -DGRAPHICS_API_OPENGL_33
|
||||||
//#define GRAPHICS_API_OPENGL_11 // Only available on PLATFORM_DESKTOP
|
//#define GRAPHICS_API_OPENGL_11 // Only available on PLATFORM_DESKTOP
|
||||||
|
//#define GRAPHICS_API_OPENGL_21 // Only available on PLATFORM_DESKTOP
|
||||||
//#define GRAPHICS_API_OPENGL_33 // Only available on PLATFORM_DESKTOP
|
//#define GRAPHICS_API_OPENGL_33 // Only available on PLATFORM_DESKTOP
|
||||||
//#define GRAPHICS_API_OPENGL_ES2 // Only available on PLATFORM_ANDROID or PLATFORM_RPI or PLATFORM_WEB
|
//#define GRAPHICS_API_OPENGL_ES2 // Only available on PLATFORM_ANDROID or PLATFORM_RPI or PLATFORM_WEB
|
||||||
|
|
||||||
// Security check in case no GRAPHICS_API_OPENGL_* defined
|
// Security check in case no GRAPHICS_API_OPENGL_* defined
|
||||||
#if !defined(GRAPHICS_API_OPENGL_11) && !defined(GRAPHICS_API_OPENGL_33) && !defined(GRAPHICS_API_OPENGL_ES2)
|
#if !defined(GRAPHICS_API_OPENGL_11) && !defined(GRAPHICS_API_OPENGL_33) && !defined(GRAPHICS_API_OPENGL_ES2) && !defined(GRAPHICS_API_OPENGL_21)
|
||||||
#define GRAPHICS_API_OPENGL_11
|
#define GRAPHICS_API_OPENGL_11
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -58,6 +59,10 @@
|
||||||
#undef GRAPHICS_API_OPENGL_33
|
#undef GRAPHICS_API_OPENGL_33
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(GRAPHICS_API_OPENGL_21)
|
||||||
|
#undef GRAPHICS_API_OPENGL_21
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_ES2)
|
||||||
#undef GRAPHICS_API_OPENGL_ES2
|
#undef GRAPHICS_API_OPENGL_ES2
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -66,7 +71,7 @@
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
// Defines and Macros
|
// Defines and Macros
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
#if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33)
|
#if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
// NOTE: This is the maximum amount of lines, triangles and quads per frame, be careful!
|
// NOTE: This is the maximum amount of lines, triangles and quads per frame, be careful!
|
||||||
#define MAX_LINES_BATCH 8192
|
#define MAX_LINES_BATCH 8192
|
||||||
#define MAX_TRIANGLES_BATCH 4096
|
#define MAX_TRIANGLES_BATCH 4096
|
||||||
|
|
@ -86,7 +91,7 @@ typedef enum { RL_PROJECTION, RL_MODELVIEW, RL_TEXTURE } MatrixMode;
|
||||||
|
|
||||||
typedef enum { RL_LINES, RL_TRIANGLES, RL_QUADS } DrawMode;
|
typedef enum { RL_LINES, RL_TRIANGLES, RL_QUADS } DrawMode;
|
||||||
|
|
||||||
typedef enum { OPENGL_11 = 1, OPENGL_33, OPENGL_ES_20 } GlVersion;
|
typedef enum { OPENGL_11 = 1, OPENGL_33, OPENGL_ES_20, OPENGL_21 } GlVersion;
|
||||||
|
|
||||||
#if defined(RLGL_STANDALONE)
|
#if defined(RLGL_STANDALONE)
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
|
|
@ -269,7 +274,7 @@ Vector3 rlglUnproject(Vector3 source, Matrix proj, Matrix view); // Get world
|
||||||
unsigned char *rlglReadScreenPixels(int width, int height); // Read screen pixel data (color buffer)
|
unsigned char *rlglReadScreenPixels(int width, int height); // Read screen pixel data (color buffer)
|
||||||
void *rlglReadTexturePixels(Texture2D texture); // Read texture pixel data
|
void *rlglReadTexturePixels(Texture2D texture); // Read texture pixel data
|
||||||
|
|
||||||
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) || defined(GRAPHICS_API_OPENGL_21)
|
||||||
void PrintProjectionMatrix(void); // DEBUG: Print projection matrix
|
void PrintProjectionMatrix(void); // DEBUG: Print projection matrix
|
||||||
void PrintModelviewMatrix(void); // DEBUG: Print modelview matrix
|
void PrintModelviewMatrix(void); // DEBUG: Print modelview matrix
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user