Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

C++ WglSwapBuffers и его мерцание с GL в Minecraft

Пользователь
Пользователь
Статус
Оффлайн
Регистрация
26 Май 2019
Сообщения
222
Реакции
39
Привет. Помогите пожалуйста. Хукаю через MinHook "wglSwapBuffers", и пытаюсь через gl отрендерить точки, но они начинают мерцать/моргать.
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;
}
#include <iostream>
#include <windows.h>
#include "GL.h"
#include <vector>
#include "MinHook.h"
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Привет. Помогите пожалуйста. Хукаю через MinHook "wglSwapBuffers", и пытаюсь через gl отрендерить точки, но они начинают мерцать/моргать.
P.s. на Minecraft 1.6.4 оно хотя-бы отрисовывается хоть и с мерцанием, а на 1.14.4 оно вообще не рендерится.
Так тебе и не нужен SwapBuffers
 
А почему не просто SwapBuffers? У меня в майнкрафте стоял хук на просто SwapBuffers и там все прекрасно рисовалось.
wglswapbuffers это свап бафер опен гла, а вообще да, можно выводить и просто в swapbuffers
 
wglswapbuffers это свап бафер опен гла, а вообще да, можно выводить и просто в swapbuffers
понял
ну мне было лень разбираться поэтому я просто из гди32 хукал свапбуффер
 
А почему не просто SwapBuffers? У меня в майнкрафте стоял хук на просто SwapBuffers и там все прекрасно рисовалось.
У меня не получилось хукать SwapBuffers. Просто ничего не рисуется тогда вообще
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Решил вопрос. Всё зависит от версии игры... На 1.6.4 мерцало, на 1.14.4 не рендерилось, на 1.7.10 всё нормально...........
1651769881695.png
 
you draw with opengl, think opengl not same for 1.6.4 that 1.7.10 that 1.14.4. For 1.14.4 function used by you use other name, or other function. For 1.7.10 its same that 1.6.4 but rewrited. (almost sure).
 
Назад
Сверху Снизу