Artemfoxeasypeasy
2/3 Games Approved
Hello everyone, this is the source of the chams for ios.
Objective-C:
#include <OpenGLES/ES2/gl.h>
#include <OpenGLES/ES2/glext.h>
void (*_glDrawElements)(GLenum mode, GLsizei count, GLenum type, const void *indices);
GLint (*_glGetUniformLocation)(GLuint program,const GLchar *name);
GLint $glGetUniformLocation(GLuint program,const GLchar *name)
{
NSLog(@"%s",name);
return _glGetUniformLocation(program,name);
}
//disable metal framework for unity
%hook NSBundle
+ (id)bundleWithPath:(NSString *)fullPath
{
if ([fullPath isEqual:@"/System/Library/Frameworks/Metal.framework"])
{
NSLog(@"distable metal framework");
return NULL;
}
return %orig(fullPath);
}
%end
#define _DRAW_RGB_ 29,0,28
void $glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices) {
_glDrawElements(mode, count, type, indices);
if (mode != GL_TRIANGLES || count < 1000) return;{
GLint currProgram;
glGetIntegerv(GL_CURRENT_PROGRAM, &currProgram);
GLint id = _glGetUniformLocation(currProgram, "_Color4"); // _Color4 is shader name
if (id == -1) return;
// draw elements on 2d screen coordinates level
glDepthRangef(1, 0.5);
// enable and write rgb into frame buffer
glColorMask(_DRAW_RGB_, 0);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
// draw chams on elements
_glDrawElements(mode, count, type, indices);
// now cleaning up
glDepthRangef(0.5, 1);
glColorMask(1, 1, 1, 1);
glDisable(GL_BLEND);
}
}
%ctor {
// Wallhack
MSHookFunction((void*)MSFindSymbol(0, "_glDrawElements"), (void *)$glDrawElements, (void **)&_glDrawElements);
MSHookFunction((void*)MSFindSymbol(0, "_glGetUniformLocation"), (void *)$glGetUniformLocation, (void **)&_glGetUniformLocation);
}