|
@@ -48,7 +48,13 @@
|
|
|
#ifdef __APPLE__
|
|
|
#include <OpenGL/gl3.h> // OpenGL 3 library for OSX
|
|
|
#else
|
|
|
- #include "glad.h" // GLAD library, includes OpenGL headers
|
|
|
+ #define GLAD_IMPLEMENTATION
|
|
|
+#if defined(RLGL_STANDALONE)
|
|
|
+ #include "glad.h" // GLAD extensions loading library, includes OpenGL headers
|
|
|
+#else
|
|
|
+ #include "external/glad.h" // GLAD extensions loading library, includes OpenGL headers
|
|
|
+#endif
|
|
|
+
|
|
|
#endif
|
|
|
#endif
|
|
|
|
|
@@ -62,6 +68,10 @@
|
|
|
#include <stdarg.h> // Required for: va_list, va_start(), vfprintf(), va_end() [Used only on TraceLog()]
|
|
|
#endif
|
|
|
|
|
|
+#if !defined(GRAPHICS_API_OPENGL_11)
|
|
|
+ #include "standard_shader.h" // Standard shader to embed
|
|
|
+#endif
|
|
|
+
|
|
|
//----------------------------------------------------------------------------------
|
|
|
// Defines and Macros
|
|
|
//----------------------------------------------------------------------------------
|
|
@@ -154,10 +164,6 @@ typedef struct {
|
|
|
// TODO: Store draw state -> blending mode, shader
|
|
|
} DrawCall;
|
|
|
|
|
|
-#if defined(RLGL_STANDALONE)
|
|
|
-typedef enum { INFO = 0, ERROR, WARNING, DEBUG, OTHER } TraceLogType;
|
|
|
-#endif
|
|
|
-
|
|
|
//----------------------------------------------------------------------------------
|
|
|
// Global Variables Definition
|
|
|
//----------------------------------------------------------------------------------
|
|
@@ -189,26 +195,27 @@ static bool useTempBuffer = false;
|
|
|
|
|
|
// Shader Programs
|
|
|
static Shader defaultShader;
|
|
|
-static Shader standardShader;
|
|
|
-static Shader currentShader; // By default, defaultShader
|
|
|
+static Shader standardShader; // Lazy initialization when GetStandardShader()
|
|
|
+static Shader currentShader; // By default, defaultShader
|
|
|
+static bool standardShaderLoaded = false;
|
|
|
|
|
|
// Flags for supported extensions
|
|
|
-static bool vaoSupported = false; // VAO support (OpenGL ES2 could not support VAO extension)
|
|
|
+static bool vaoSupported = false; // VAO support (OpenGL ES2 could not support VAO extension)
|
|
|
|
|
|
// Compressed textures support flags
|
|
|
-static bool texCompETC1Supported = false; // ETC1 texture compression support
|
|
|
-static bool texCompETC2Supported = false; // ETC2/EAC texture compression support
|
|
|
-static bool texCompPVRTSupported = false; // PVR texture compression support
|
|
|
-static bool texCompASTCSupported = false; // ASTC texture compression support
|
|
|
+static bool texCompETC1Supported = false; // ETC1 texture compression support
|
|
|
+static bool texCompETC2Supported = false; // ETC2/EAC texture compression support
|
|
|
+static bool texCompPVRTSupported = false; // PVR texture compression support
|
|
|
+static bool texCompASTCSupported = false; // ASTC texture compression support
|
|
|
|
|
|
// Lighting data
|
|
|
-static Light lights[MAX_LIGHTS]; // Lights pool
|
|
|
-static int lightsCount; // Counts current enabled physic objects
|
|
|
+static Light lights[MAX_LIGHTS]; // Lights pool
|
|
|
+static int lightsCount; // Counts current enabled physic objects
|
|
|
#endif
|
|
|
|
|
|
// Compressed textures support flags
|
|
|
-static bool texCompDXTSupported = false; // DDS texture compression support
|
|
|
-static bool npotSupported = false; // NPOT textures full support
|
|
|
+static bool texCompDXTSupported = false; // DDS texture compression support
|
|
|
+static bool npotSupported = false; // NPOT textures full support
|
|
|
|
|
|
#if defined(GRAPHICS_API_OPENGL_ES2)
|
|
|
// NOTE: VAO functionality is exposed through extensions (OES)
|
|
@@ -253,7 +260,6 @@ static Color *GenNextMipmap(Color *srcData, int srcWidth, int srcHeight);
|
|
|
#endif
|
|
|
|
|
|
#if defined(RLGL_STANDALONE)
|
|
|
-static void TraceLog(int msgType, const char *text, ...);
|
|
|
float *MatrixToFloat(Matrix mat); // Converts Matrix to float array
|
|
|
#endif
|
|
|
|
|
@@ -355,7 +361,6 @@ void rlRotatef(float angleDeg, float x, float y, float z)
|
|
|
Vector3 axis = (Vector3){ x, y, z };
|
|
|
VectorNormalize(&axis);
|
|
|
matRotation = MatrixRotate(axis, angleDeg*DEG2RAD);
|
|
|
-
|
|
|
MatrixTranspose(&matRotation);
|
|
|
|
|
|
*currentMatrix = MatrixMultiply(*currentMatrix, matRotation);
|
|
@@ -1032,7 +1037,6 @@ void rlglInit(void)
|
|
|
|
|
|
// Init default Shader (customized for GL 3.3 and ES2)
|
|
|
defaultShader = LoadDefaultShader();
|
|
|
- standardShader = LoadStandardShader();
|
|
|
currentShader = defaultShader;
|
|
|
|
|
|
LoadDefaultBuffers(); // Initialize default vertex arrays buffers (lines, triangles, quads)
|
|
@@ -2185,14 +2189,22 @@ Shader GetDefaultShader(void)
|
|
|
}
|
|
|
|
|
|
// Get default shader
|
|
|
+// NOTE: Inits global variable standardShader
|
|
|
Shader GetStandardShader(void)
|
|
|
{
|
|
|
-#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
|
|
- return standardShader;
|
|
|
-#else
|
|
|
Shader shader = { 0 };
|
|
|
- return shader;
|
|
|
+
|
|
|
+#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
|
|
+ if (standardShaderLoaded) shader = standardShader;
|
|
|
+ else
|
|
|
+ {
|
|
|
+ // Lazy initialization of standard shader
|
|
|
+ standardShader = LoadStandardShader();
|
|
|
+ shader = standardShader;
|
|
|
+ }
|
|
|
#endif
|
|
|
+
|
|
|
+ return shader;
|
|
|
}
|
|
|
|
|
|
// Get shader uniform location
|
|
@@ -2254,13 +2266,17 @@ void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat)
|
|
|
// Set a custom projection matrix (replaces internal projection matrix)
|
|
|
void SetMatrixProjection(Matrix proj)
|
|
|
{
|
|
|
+#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
|
|
projection = proj;
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
// Set a custom modelview matrix (replaces internal modelview matrix)
|
|
|
void SetMatrixModelview(Matrix view)
|
|
|
{
|
|
|
+#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
|
|
|
modelview = view;
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
// Begin blending mode (alpha, additive, multiplied)
|
|
@@ -2564,18 +2580,28 @@ static Shader LoadDefaultShader(void)
|
|
|
|
|
|
// Load standard shader
|
|
|
// NOTE: This shader supports:
|
|
|
-// - Up to 3 different maps: diffuse, normal, specular
|
|
|
-// - Material properties: colAmbient, colDiffuse, colSpecular, glossiness
|
|
|
-// - Up to 8 lights: Point, Directional or Spot
|
|
|
+// - Up to 3 different maps: diffuse, normal, specular
|
|
|
+// - Material properties: colAmbient, colDiffuse, colSpecular, glossiness
|
|
|
+// - Up to 8 lights: Point, Directional or Spot
|
|
|
static Shader LoadStandardShader(void)
|
|
|
{
|
|
|
- // Load standard shader (TODO: rewrite as char pointers)
|
|
|
- Shader shader = { 0 }; //LoadShader("resources/shaders/standard.vs", "resources/shaders/standard.fs");
|
|
|
-
|
|
|
- if (shader.id != 0) TraceLog(INFO, "[SHDR ID %i] Standard shader loaded successfully", shader.id);
|
|
|
- else TraceLog(WARNING, "[SHDR ID %i] Standard shader could not be loaded", shader.id);
|
|
|
+ Shader shader;
|
|
|
+
|
|
|
+ // Load standard shader (embeded in standard_shader.h)
|
|
|
+ shader.id = LoadShaderProgram(vStandardShaderStr, fStandardShaderStr);
|
|
|
|
|
|
- if (shader.id != 0) LoadDefaultShaderLocations(&shader);
|
|
|
+ if (shader.id != 0)
|
|
|
+ {
|
|
|
+ LoadDefaultShaderLocations(&shader);
|
|
|
+ TraceLog(INFO, "[SHDR ID %i] Standard shader loaded successfully", shader.id);
|
|
|
+
|
|
|
+ standardShaderLoaded = true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ TraceLog(WARNING, "[SHDR ID %i] Standard shader could not be loaded, using default shader", shader.id);
|
|
|
+ shader = GetDefaultShader();
|
|
|
+ }
|
|
|
|
|
|
return shader;
|
|
|
}
|
|
@@ -3318,7 +3344,7 @@ static Color *GenNextMipmap(Color *srcData, int srcWidth, int srcHeight)
|
|
|
#if defined(RLGL_STANDALONE)
|
|
|
// Output a trace log message
|
|
|
// NOTE: Expected msgType: (0)Info, (1)Error, (2)Warning
|
|
|
-static void TraceLog(int msgType, const char *text, ...)
|
|
|
+void TraceLog(int msgType, const char *text, ...)
|
|
|
{
|
|
|
va_list args;
|
|
|
va_start(args, text);
|