mirror of
https://github.com/raysan5/raylib.git
synced 2025-09-27 21:48:31 +00:00
Added function LoadShaderCode()
Allows loading of shader from text code string directly
This commit is contained in:
@@ -1044,7 +1044,8 @@ RLAPI RayHitInfo GetCollisionRayGround(Ray ray, float groundHeight);
|
|||||||
|
|
||||||
// Shader loading/unloading functions
|
// Shader loading/unloading functions
|
||||||
RLAPI char *LoadText(const char *fileName); // Load chars array from text file
|
RLAPI char *LoadText(const char *fileName); // Load chars array from text file
|
||||||
RLAPI Shader LoadShader(char *vsFileName, char *fsFileName); // Load shader from files and bind default locations
|
RLAPI Shader LoadShader(const char *vsFileName, const char *fsFileName); // Load shader from files and bind default locations
|
||||||
|
RLAPI Shader LoadShaderCode(char *vsCode, char *fsCode); // Load shader from code strings and bind default locations
|
||||||
RLAPI void UnloadShader(Shader shader); // Unload shader from GPU memory (VRAM)
|
RLAPI void UnloadShader(Shader shader); // Unload shader from GPU memory (VRAM)
|
||||||
|
|
||||||
RLAPI Shader GetShaderDefault(void); // Get default shader
|
RLAPI Shader GetShaderDefault(void); // Get default shader
|
||||||
|
45
src/rlgl.c
45
src/rlgl.c
@@ -2324,7 +2324,27 @@ char *LoadText(const char *fileName)
|
|||||||
|
|
||||||
// Load shader from files and bind default locations
|
// Load shader from files and bind default locations
|
||||||
// NOTE: If shader string is NULL, using default vertex/fragment shaders
|
// NOTE: If shader string is NULL, using default vertex/fragment shaders
|
||||||
Shader LoadShader(char *vsFileName, char *fsFileName)
|
Shader LoadShader(const char *vsFileName, const char *fsFileName)
|
||||||
|
{
|
||||||
|
Shader shader = { 0 };
|
||||||
|
|
||||||
|
char *vShaderStr = NULL;
|
||||||
|
char *fShaderStr = NULL;
|
||||||
|
|
||||||
|
if (vsFileName != NULL) vShaderStr = LoadText(vsFileName);
|
||||||
|
if (fsFileName != NULL) fShaderStr = LoadText(fsFileName);
|
||||||
|
|
||||||
|
shader = LoadShaderCode(vShaderStr, fShaderStr);
|
||||||
|
|
||||||
|
if (vShaderStr != NULL) free(vShaderStr);
|
||||||
|
if (fShaderStr != NULL) free(fShaderStr);
|
||||||
|
|
||||||
|
return shader;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load shader from code strings
|
||||||
|
// NOTE: If shader string is NULL, using default vertex/fragment shaders
|
||||||
|
Shader LoadShaderCode(char *vsCode, char *fsCode)
|
||||||
{
|
{
|
||||||
Shader shader = { 0 };
|
Shader shader = { 0 };
|
||||||
|
|
||||||
@@ -2335,27 +2355,8 @@ Shader LoadShader(char *vsFileName, char *fsFileName)
|
|||||||
unsigned int vertexShaderId = defaultVShaderId;
|
unsigned int vertexShaderId = defaultVShaderId;
|
||||||
unsigned int fragmentShaderId = defaultFShaderId;
|
unsigned int fragmentShaderId = defaultFShaderId;
|
||||||
|
|
||||||
if (vsFileName != NULL)
|
if (vsCode != NULL) vertexShaderId = CompileShader(vsCode, GL_VERTEX_SHADER);
|
||||||
{
|
if (fsCode != NULL) fragmentShaderId = CompileShader(fsCode, GL_FRAGMENT_SHADER);
|
||||||
char *vShaderStr = LoadText(vsFileName);
|
|
||||||
|
|
||||||
if (vShaderStr != NULL)
|
|
||||||
{
|
|
||||||
vertexShaderId = CompileShader(vShaderStr, GL_VERTEX_SHADER);
|
|
||||||
free(vShaderStr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fsFileName != NULL)
|
|
||||||
{
|
|
||||||
char* fShaderStr = LoadText(fsFileName);
|
|
||||||
|
|
||||||
if (fShaderStr != NULL)
|
|
||||||
{
|
|
||||||
fragmentShaderId = CompileShader(fShaderStr, GL_FRAGMENT_SHADER);
|
|
||||||
free(fShaderStr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((vertexShaderId == defaultVShaderId) && (fragmentShaderId == defaultFShaderId)) shader = defaultShader;
|
if ((vertexShaderId == defaultVShaderId) && (fragmentShaderId == defaultFShaderId)) shader = defaultShader;
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user