我正在尝试将简单的纹理(64x64)渲染为64x64四边形.四边形本身是渲染,但不是纹理.(它呈现一个空白的64x64四边形.)
我正在使用SOIL加载图像.
static GLuint LoadPNG(char* filename)
{
GLuint texture = SOIL_load_OGL_texture
(
filename,
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_INVERT_Y | SOIL_FLAG_NTSC_SAFE_RGB | SOIL_FLAG_COMPRESS_TO_DXT
);
if (texture == 0)
Log("Texture Load Error: " + string(filename));
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
return texture;
}
Run Code Online (Sandbox Code Playgroud)
这是我的渲染代码,我可能没有正确映射它,所以这也可能是问题.
// Draw Textured Quad
static void glDrawTexturedQuad(glRectF rect, GLuint tex)
{
// Bind Texture
glBindTexture (GL_TEXTURE_2D, tex);
// Render Settings
glEnable(GL_TEXTURE_2D);
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glColor3ub(255,255,255);
glBegin(GL_QUADS);
// Top Left
glTexCoord2f(0, 1);
glVertex2f(rect.X, rect.Y);
// Top Right …Run Code Online (Sandbox Code Playgroud) 我试图通过地址学习一些不同的函数调用方法.
bool gl_draw_text(uint x, uint y, uint color, uint alpha, char *fmt);
Run Code Online (Sandbox Code Playgroud)
这个功能就是我所说的.以下是我现在称之为的方式.(它工作正常.)
static void glDrawText(char* text, int x, int y)
{
DWORD func = 0x10057970;
__asm
{
push text
push 255
push 14
push y
push x
call dword ptr [func]
}
}
Run Code Online (Sandbox Code Playgroud)
我想要使用的方法就是这个.
void Hack()
{
bool (draw*)(uint, uint, uint, uint, char*);
draw = 0x10057970;
(draw)(20, 20, 14, 255, "Text");
}
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何正确地将地址转换为函数以使其工作\ compile.?
还有一种方法使用虚函数,我很好奇该方法是如何工作的.(我也可以使用MS Detours,挂钩,然后调用这样的函数,如果你知道的话,那个方法在幕后是如何工作的.)
所以要清楚,我只是要求各种方法来完成这项任务,但是在阅读了它们之后列出了一些我很好奇等等.