diff --git a/lib/ScriptCRT/rs_mesh.c b/lib/ScriptCRT/rs_mesh.c
index 38ba863..bb533bc 100644
--- a/lib/ScriptCRT/rs_mesh.c
+++ b/lib/ScriptCRT/rs_mesh.c
@@ -6,7 +6,7 @@
 * Mesh
 */
 extern uint32_t __attribute__((overloadable))
-        rsMeshGetVertexAllocationCount(rs_mesh m) {
+        rsgMeshGetVertexAllocationCount(rs_mesh m) {
     Mesh_t *mesh = (Mesh_t *)m.p;
     if (mesh == NULL) {
         return 0;
@@ -15,7 +15,7 @@
 }
 
 extern uint32_t __attribute__((overloadable))
-        rsMeshGetPrimitiveCount(rs_mesh m) {
+        rsgMeshGetPrimitiveCount(rs_mesh m) {
     Mesh_t *mesh = (Mesh_t *)m.p;
     if (mesh == NULL) {
         return 0;
@@ -24,7 +24,7 @@
 }
 
 extern rs_allocation __attribute__((overloadable))
-        rsMeshGetVertexAllocation(rs_mesh m, uint32_t index) {
+        rsgMeshGetVertexAllocation(rs_mesh m, uint32_t index) {
     Mesh_t *mesh = (Mesh_t *)m.p;
     if (mesh == NULL || index >= mesh->mHal.state.vertexBuffersCount) {
         rs_allocation nullAlloc = {0};
@@ -35,7 +35,7 @@
 }
 
 extern rs_allocation __attribute__((overloadable))
-        rsMeshGetIndexAllocation(rs_mesh m, uint32_t index) {
+        rsgMeshGetIndexAllocation(rs_mesh m, uint32_t index) {
     Mesh_t *mesh = (Mesh_t *)m.p;
     if (mesh == NULL || index >= mesh->mHal.state.primitivesCount) {
         rs_allocation nullAlloc = {0};
@@ -46,7 +46,7 @@
 }
 
 extern rs_primitive __attribute__((overloadable))
-        rsMeshGetPrimitive(rs_mesh m, uint32_t index) {
+        rsgMeshGetPrimitive(rs_mesh m, uint32_t index) {
     Mesh_t *mesh = (Mesh_t *)m.p;
     if (mesh == NULL || index >= mesh->mHal.state.primitivesCount) {
         return RS_PRIMITIVE_INVALID;
diff --git a/lib/ScriptCRT/rs_program.c b/lib/ScriptCRT/rs_program.c
index 527367a..4fcd634 100644
--- a/lib/ScriptCRT/rs_program.c
+++ b/lib/ScriptCRT/rs_program.c
@@ -6,7 +6,7 @@
 * Program Store
 */
 extern rs_depth_func __attribute__((overloadable))
-        rsProgramStoreGetDepthFunc(rs_program_store ps) {
+        rsgProgramStoreGetDepthFunc(rs_program_store ps) {
     ProgramStore_t *prog = (ProgramStore_t *)ps.p;
     if (prog == NULL) {
         return RS_DEPTH_FUNC_INVALID;
@@ -15,7 +15,7 @@
 }
 
 extern bool __attribute__((overloadable))
-        rsProgramStoreGetDepthMask(rs_program_store ps) {
+        rsgProgramStoreGetDepthMask(rs_program_store ps) {
     ProgramStore_t *prog = (ProgramStore_t *)ps.p;
     if (prog == NULL) {
         return false;
@@ -24,7 +24,7 @@
 }
 
 extern bool __attribute__((overloadable))
-        rsProgramStoreGetColorMaskR(rs_program_store ps) {
+        rsgProgramStoreGetColorMaskR(rs_program_store ps) {
     ProgramStore_t *prog = (ProgramStore_t *)ps.p;
     if (prog == NULL) {
         return false;
@@ -33,7 +33,7 @@
 }
 
 extern bool __attribute__((overloadable))
-        rsProgramStoreGetColorMaskG(rs_program_store ps) {
+        rsgProgramStoreGetColorMaskG(rs_program_store ps) {
     ProgramStore_t *prog = (ProgramStore_t *)ps.p;
     if (prog == NULL) {
         return false;
@@ -42,7 +42,7 @@
 }
 
 extern bool __attribute__((overloadable))
-        rsProgramStoreGetColorMaskB(rs_program_store ps) {
+        rsgProgramStoreGetColorMaskB(rs_program_store ps) {
     ProgramStore_t *prog = (ProgramStore_t *)ps.p;
     if (prog == NULL) {
         return false;
@@ -51,7 +51,7 @@
 }
 
 extern bool __attribute__((overloadable))
-        rsProgramStoreGetColorMaskA(rs_program_store ps) {
+        rsgProgramStoreGetColorMaskA(rs_program_store ps) {
     ProgramStore_t *prog = (ProgramStore_t *)ps.p;
     if (prog == NULL) {
         return false;
@@ -60,7 +60,7 @@
 }
 
 extern rs_blend_src_func __attribute__((overloadable))
-        rsProgramStoreGetBlendSrcFunc(rs_program_store ps) {
+        rsgProgramStoreGetBlendSrcFunc(rs_program_store ps) {
     ProgramStore_t *prog = (ProgramStore_t *)ps.p;
     if (prog == NULL) {
         return RS_BLEND_SRC_INVALID;
@@ -69,7 +69,7 @@
 }
 
 extern rs_blend_dst_func __attribute__((overloadable))
-        rsProgramStoreGetBlendDstFunc(rs_program_store ps) {
+        rsgProgramStoreGetBlendDstFunc(rs_program_store ps) {
     ProgramStore_t *prog = (ProgramStore_t *)ps.p;
     if (prog == NULL) {
         return RS_BLEND_DST_INVALID;
@@ -78,7 +78,7 @@
 }
 
 extern bool __attribute__((overloadable))
-        rsProgramStoreGetDitherEnabled(rs_program_store ps) {
+        rsgProgramStoreGetDitherEnabled(rs_program_store ps) {
     ProgramStore_t *prog = (ProgramStore_t *)ps.p;
     if (prog == NULL) {
         return false;
@@ -90,7 +90,7 @@
 * Program Raster
 */
 extern bool __attribute__((overloadable))
-        rsProgramRasterGetPointSpriteEnabled(rs_program_raster pr) {
+        rsgProgramRasterGetPointSpriteEnabled(rs_program_raster pr) {
     ProgramRaster_t *prog = (ProgramRaster_t *)pr.p;
     if (prog == NULL) {
         return false;
@@ -99,7 +99,7 @@
 }
 
 extern rs_cull_mode __attribute__((overloadable))
-        rsProgramRasterGetCullMode(rs_program_raster pr) {
+        rsgProgramRasterGetCullMode(rs_program_raster pr) {
     ProgramRaster_t *prog = (ProgramRaster_t *)pr.p;
     if (prog == NULL) {
         return RS_CULL_INVALID;
