-
Автор темы
- #1
Привет. Помогите пожалуйста. Хукаю через MinHook "wglSwapBuffers", и пытаюсь через gl отрендерить точки, но они начинают мерцать/моргать.
P.s. на Minecraft 1.6.4 оно хотя-бы отрисовывается хоть и с мерцанием, а на 1.14.4 оно вообще не рендерится.
Видео:
P.s. на Minecraft 1.6.4 оно хотя-бы отрисовывается хоть и с мерцанием, а на 1.14.4 оно вообще не рендерится.
Видео:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
#include "includes.h"
#pragma warning (disable : 4996)
using namespace std;
typedef BOOL(__stdcall* wglSwapBuffers_t) (HDC hDc);
typedef BOOL(__stdcall* T_SwapBuffers)(HDC);
T_SwapBuffers pSwapBuffers = nullptr;
static wglSwapBuffers_t o_wglSwapBuffers;
bool WallHack(IN HDC hDc) {
glPointSize(2);
glBegin(GL_POINTS);
glColor3d(1, 0, 0);
glVertex3d(-4.5, 4, 0); // первая точка
glColor3d(0, 1, 0);
glVertex3d(-4, 4, 0); // вторая точка
glColor3d(0, 0, 1); // третья
glVertex3d(-3.5, 4, 0);
glEnd();
glPointSize(5);
glBegin(GL_POINTS);
glColor3d(1, 0, 0);
glVertex3d(-2, 4, 0); // первая точка
glColor3d(0, 1, 0);
glVertex3d(-1, 4, 0); // вторая точка
glColor3d(0, 0, 1); // третье
glVertex3d(0, 4, 0);
glEnd();
glPointSize(10);
glEnable(GL_POINT_SMOOTH);
glBegin(GL_POINTS);
glColor3d(1, 0, 0);
glVertex3d(2, 4, 0); // первая точка
glColor3d(0, 1, 0);
glVertex3d(3, 4, 0); // вторая точка
glColor3d(0, 0, 1); // третья
glVertex3d(4, 4, 0);
glEnd();
glDisable(GL_POINT_SMOOTH);
return o_wglSwapBuffers(hDc);
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
HMODULE handle = GetModuleHandleW(L"opengl32.dll");
pSwapBuffers = reinterpret_cast<wglSwapBuffers_t>(GetProcAddress(handle, "wglSwapBuffers"));
if (MH_Initialize() != MH_OK) {
MessageBox(0, "MH_Initialize error", 0, 0);
}
if (MH_CreateHook(pSwapBuffers, WallHack, reinterpret_cast<void**>(&o_wglSwapBuffers)) != MH_OK) {
MessageBox(0, "MH_CreateHook error", 0, 0);
}
MH_EnableHook(pSwapBuffers);
}
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
#pragma warning (disable : 4996)
using namespace std;
typedef BOOL(__stdcall* wglSwapBuffers_t) (HDC hDc);
typedef BOOL(__stdcall* T_SwapBuffers)(HDC);
T_SwapBuffers pSwapBuffers = nullptr;
static wglSwapBuffers_t o_wglSwapBuffers;
bool WallHack(IN HDC hDc) {
glPointSize(2);
glBegin(GL_POINTS);
glColor3d(1, 0, 0);
glVertex3d(-4.5, 4, 0); // первая точка
glColor3d(0, 1, 0);
glVertex3d(-4, 4, 0); // вторая точка
glColor3d(0, 0, 1); // третья
glVertex3d(-3.5, 4, 0);
glEnd();
glPointSize(5);
glBegin(GL_POINTS);
glColor3d(1, 0, 0);
glVertex3d(-2, 4, 0); // первая точка
glColor3d(0, 1, 0);
glVertex3d(-1, 4, 0); // вторая точка
glColor3d(0, 0, 1); // третье
glVertex3d(0, 4, 0);
glEnd();
glPointSize(10);
glEnable(GL_POINT_SMOOTH);
glBegin(GL_POINTS);
glColor3d(1, 0, 0);
glVertex3d(2, 4, 0); // первая точка
glColor3d(0, 1, 0);
glVertex3d(3, 4, 0); // вторая точка
glColor3d(0, 0, 1); // третья
glVertex3d(4, 4, 0);
glEnd();
glDisable(GL_POINT_SMOOTH);
return o_wglSwapBuffers(hDc);
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
HMODULE handle = GetModuleHandleW(L"opengl32.dll");
pSwapBuffers = reinterpret_cast<wglSwapBuffers_t>(GetProcAddress(handle, "wglSwapBuffers"));
if (MH_Initialize() != MH_OK) {
MessageBox(0, "MH_Initialize error", 0, 0);
}
if (MH_CreateHook(pSwapBuffers, WallHack, reinterpret_cast<void**>(&o_wglSwapBuffers)) != MH_OK) {
MessageBox(0, "MH_CreateHook error", 0, 0);
}
MH_EnableHook(pSwapBuffers);
}
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
#include <iostream>
#include <windows.h>
#include "GL.h"
#include <vector>
#include "MinHook.h"
#include <windows.h>
#include "GL.h"
#include <vector>
#include "MinHook.h"