Бред

Ответить в тред Ответить в тред
Аноним # OP 11/01/21 Пнд 17:51:15 2375399841
image.png 20Кб, 495x402
495x402
C++ OpenGL THREAD

Аноны, нужна помощь. Пытаюсь сделать оверлей для игры при помощи перехвата WinAPI функции SwapBuffers. Затем создаю свой контекст, переключаюсь на него, рисую прямоугольник, переключаюсь на контекст игры и вызываю оригинальную функцию SwapBuffers. Прямоугольник появляется и всё бы ничего, но он мерцает. Я мог бы сказать что слабо разбираюсь в OpenGL но это будет враньё. Я вообще в нём не разбираюсь. Но мне позарез нужно устранить эту проблему. Я уже пытался гуглить, пытался отключать проверку глубины, но ничего не получилось. Он всё так же мерцает. Помогите пожалуйста. :(

upd. На stackoverflow никто так мне и не помог.
Аноним 11/01/21 Пнд 17:52:06 2375400302
POST THIS RAT.mp4 4646Кб, 640x360, 00:00:50
640x360
Аноним # OP 11/01/21 Пнд 17:52:48 2375400723
video2021-01-11[...].mp4 1857Кб, 494x480, 00:00:22
494x480
Аноним # OP 11/01/21 Пнд 17:53:52 2375401414
Бамп
Аноним # OP 11/01/21 Пнд 17:55:06 2375402265
Бамп
Аноним # OP 11/01/21 Пнд 17:58:03 2375404166
Бамп
Аноним # OP 11/01/21 Пнд 18:14:17 2375414407
Бамп
Аноним # OP 11/01/21 Пнд 18:34:10 2375427398
Бамп
Аноним # OP 11/01/21 Пнд 18:56:53 2375442589
Бамп
Аноним # OP 11/01/21 Пнд 19:02:35 23754463410
Бамп
Аноним # OP 11/01/21 Пнд 19:08:08 23754504011
Бамп
Аноним # OP 11/01/21 Пнд 19:11:45 23754530012
Бамп
Аноним 11/01/21 Пнд 19:14:09 23754543013
>>237539984 (OP)
Забивай комментариями отдельные строки и смотри где мерцание пропадёт. И копай хелп на эту функцию. Стандартная же метода.
Аноним 11/01/21 Пнд 19:17:02 23754563114
>>237539984 (OP)
SwapBuffers
The SwapBuffers function exchanges the front and back buffers if the current pixel format for the window referenced by the specified device context includes a back buffer.

BOOL SwapBuffers(
HDC hdc // device context whose buffers get swapped
);
Parameters
hdc
Specifies a device context. If the current pixel format for the window referenced by this device context includes a back buffer, the function exchanges the front and back buffers.
Return Values
If the function succeeds, the return value is TRUE.

If the function fails, the return value is FALSE. To get extended error information, call GetLastError.

Remarks
If the current pixel format for the window referenced by the device context does not include a back buffer, this call has no effect and the content of the back buffer is undefined when the function returns.

With multithread applications, flush the drawing commands in any other threads drawing to the same window before calling SwapBuffers.

Аноним 11/01/21 Пнд 19:22:42 23754599215
>>237539984 (OP)
>
Проверь как ты создаёшь hdc-
hdc
Specifies a device context. If the current pixel format for the window referenced by this device context includes a back buffer, the function exchanges the front and back buffers.
Аноним # OP 11/01/21 Пнд 19:36:41 23754695016
>>237545430
> Забивай комментариями отдельные строки и смотри где мерцание пропадёт

Да, ты прав. Если закомментировать строку рисующую прямоугольник то мерцание пропадает. Правда потому что прямоугольника теперь нет. Спасибо! А если серьезно, здесь каждая функция нужна и комментировать тут нечего. Тут скорее добавлять надо что-то, но вот что я не знаю. Возможно нужно как-то контекст мой правильно инициализировать.

>>237545631
> копипаста_с_msdn
Спасибо! Я сижу с этой проблемой уже четыре дня и не додумался зайти и почитать описание этой функции!

>>237545992
Я тебе больше скажу. Я его не создаю! Как это так? А вот ТАК. HDC передаётся игрой в функцию SwapBuffers, а так как она мною перехвачена то передаётся в мою а потом моя функция вызывает уже оригинальную функцию с этим же HDC. Не в этом проблема.
Аноним # OP 11/01/21 Пнд 19:37:34 23754702317
Бамп аноны я же знаю есть те кто шарит
Аноним 11/01/21 Пнд 19:39:29 23754716518
Мерцает как? Каждый второй кадр или рандомно?
Аноним 11/01/21 Пнд 19:41:14 23754731919
Аноним 11/01/21 Пнд 19:42:10 23754739820
>>237547165
Если надо могу записать видео
Аноним 11/01/21 Пнд 19:42:28 23754741621
Аноним 11/01/21 Пнд 19:42:30 23754741922
image.png 8Кб, 555x114
555x114
Не шарю за рендер, максимум делал рендер из буфера в текстуру на DX11/12, но на тред подписался.
Аноним # OP 11/01/21 Пнд 19:42:52 23754745323
Аноним # OP 11/01/21 Пнд 19:44:41 23754759124
Бамп
Аноним 11/01/21 Пнд 19:45:59 23754770325
>>237547319
>>237547398
Короче скорее всего помимо основного фреймбуфера игра создает еще всякие промежуточные для других проходов. Для теней там и прочей подобной малафьи и та хуйня, которую ты нарисовал, оказывается на экране только иногда.
В итоге у тебя ничего не получится, попробуй по другому как-нибудь.
Но это всё не точно, я тоже не гуру в opengl и особенно winapi
Аноним 11/01/21 Пнд 19:47:28 23754780226
Аноним # OP 11/01/21 Пнд 19:49:06 23754791027
>>237547703
> Короче скорее всего помимо основного фреймбуфера игра создает еще всякие промежуточные для других проходов. Для теней там и прочей подобной малафьи и та хуйня, которую ты нарисовал, оказывается на экране только иногда.

Точно нет. Я смотрел вызовы функций и там только один игровой контекст.
Аноним # OP 11/01/21 Пнд 19:50:49 23754803728
Бамп
Аноним # OP 11/01/21 Пнд 19:54:36 23754829829
Бамп
Аноним 11/01/21 Пнд 19:57:52 23754853830
Так блэд, а что еще за glRectf? Ты из 90х? Если да, то тебе же тогда надо еще сбросить матрицу проекции и модельную по логике вещей, а то иначе твой прямоугольник будет рисоваться умножаясь по текущие значения. Попробуй что-то в духе

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

Ну или по-человечески glOrtho2d или какая там функция, лет 10 уже фиксированные функции не видел.

Потом

glMatrixMode(GL_MODELVEW); // вроде так
glLoadIdentity();
Аноним # OP 11/01/21 Пнд 20:05:54 23754909131
>>237548538
>glMatrixMode(GL_PROJECTION);
>glLoadIdentity();
Это надо после того как я вью порт поставил или до?
Аноним 11/01/21 Пнд 20:07:15 23754918432
>>237549091
После и перед тем, как рисовать прямоугольник.

Ну это, конечно, если проблема с матрицами именно.
Аноним 11/01/21 Пнд 20:07:31 23754919633
>>237549091
открой книгу по OGL 2010 уже, не еби мозги.
Аноним 11/01/21 Пнд 20:11:13 23754941234
>>237549196
В 2010 использовать фиксированные функции уже было зашкваром.
Аноним # OP 11/01/21 Пнд 20:12:08 23754947035
>>237548538
> Так блэд, а что еще за glRectf? Ты из 90х?
Когда я рисовал при помощи glVertex3f то он тоже мерцал.
Аноним 11/01/21 Пнд 20:13:26 23754957236
Бамп
Аноним # OP 11/01/21 Пнд 20:15:33 23754971937
>>237548538
На данный момент пробую что посоветовал этот великий анон. Просто как он описал всё равно мигает, но я добавил ещё glDisable(GL_DEPTH_TEST) и вот сижу жду, будет ли мерцать или нет.
Аноним 11/01/21 Пнд 20:16:57 23754983138
>>237549412
зато учебники писали именно так как ему надо. кмк, он вообще пытается сделать то, что не надо делать.
Аноним # OP 11/01/21 Пнд 20:17:46 23754990339
>>237549719
Мерцает. Сейчас попробую использовать вместо glRect glVertex3f.
Аноним # OP 11/01/21 Пнд 20:20:42 23755011540
Аноним 11/01/21 Пнд 20:22:18 23755024341
>>237550115
Покажи обновленный код
Аноним 11/01/21 Пнд 20:23:35 23755033542
>>237550243
ему надо весь код проекта показать для начала, а не одну функцию.
Аноним # OP 11/01/21 Пнд 20:25:58 23755050843
>>237550243
BOOL WINAPI __SwapBuffers(HDC hDC)
{
HGLRC oldContext = wglGetCurrentContext();

if (!context)
{
context = wglCreateContext(hDC);
}

GLint viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);

wglMakeCurrent(hDC, context);

glViewport(viewport[0], viewport[1], viewport[2], viewport[3]);

glDisable(GL_DEPTH_TEST);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

glBegin(GL_QUADS);
glVertex3f(0.0, 0.5, 1);
glVertex3f(0.0, 1.0, 1);
glVertex3f(0.5, 1.0, 1);
glVertex3f(0.5, 0.5, 1);
glEnd();

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

wglMakeCurrent(hDC, oldContext);
return _SwapBuffers(hDC);
}

>>237550335
> ему надо весь код проекта показать для начала, а не одну функцию.

У меня кроме этой функции больше ничего нет. Только код для установки перехвата SwapBuffers и всё.
Аноним 11/01/21 Пнд 20:27:09 23755060644
>>237550508
>glMatrixMode(GL_MODELVIEW);
>glLoadIdentity();
Это тоже перед вызовом отрисовки должно быть. Какой смысл это делать после?
Аноним # OP 11/01/21 Пнд 20:28:54 23755072645
>>237550606
\tglMatrixMode(GL_PROJECTION);
\tglLoadIdentity();
\tglMatrixMode(GL_MODELVIEW);
\tglLoadIdentity();

\tglBegin(GL_QUADS);
\tglVertex3f(0.0, 0.5, 1);
\tglVertex3f(0.0, 1.0, 1);
\tglVertex3f(0.5, 1.0, 1);
\tglVertex3f(0.5, 0.5, 1);
\tglEnd();

Типа так что-ли?..
Аноним 11/01/21 Пнд 20:30:17 23755075946
Аноним # OP 11/01/21 Пнд 20:33:20 23755096347
>>237550726
Все равно иногда мерцает.. Может я тупой и что-то не понял?

BOOL WINAPI __SwapBuffers(HDC hDC)
{
HGLRC oldContext = wglGetCurrentContext();

if (!context)
{
context = wglCreateContext(hDC);
}

GLint viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);

wglMakeCurrent(hDC, context);

glViewport(viewport[0], viewport[1], viewport[2], viewport[3]);

glDisable(GL_DEPTH_TEST);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glBegin(GL_QUADS);
glVertex3f(0.0, 0.5, 1);
glVertex3f(0.0, 1.0, 1);
glVertex3f(0.5, 1.0, 1);
glVertex3f(0.5, 0.5, 1);
glEnd();

wglMakeCurrent(hDC, oldContext);
return _SwapBuffers(hDC);
}
Аноним 11/01/21 Пнд 20:34:52 23755105948
Запиши видео как мерцает
Аноним 11/01/21 Пнд 20:35:57 23755113749
>>237539984 (OP)
Тоже нихуя в этом не понимаю, но попробуй двойную буферизацию, вдруг поможет
Аноним 11/01/21 Пнд 20:37:59 23755120550
>>237539984 (OP)
Вася, выкидывай ШинАпи, это сейчас никому нахуй не нужно, даже если ты это для себя игру пилишь.
Бери SDL2 и уже на его контексте OpenGL запиливай свой мега рендер
Аноним 11/01/21 Пнд 20:38:16 23755123251
>>237551137
Так оно и так должно быть включено в игре, которую оп-хацкер пытается модифицировать.
Аноним 11/01/21 Пнд 20:39:45 23755134452
>>237550963
> glBegin(GL_QUADS);
>glEnd();

пиздец, я еле нашел устройство, чтобы там был OpenGL 2.1, а ты под него по умолчанию хуячишь..
Аноним # OP 11/01/21 Пнд 20:41:03 23755143753
2021-01-11 21-3[...].mkv 15946Кб, 1280x720, 00:00:18
1280x720
Аноним # OP 11/01/21 Пнд 20:41:37 23755147954
>>237551344
Я делаю так чтобы и на старом OpenGL и на новом OpenGL все работало
Аноним 11/01/21 Пнд 20:41:56 23755150555
Аноним # OP 11/01/21 Пнд 20:42:37 23755154856
Бамп
Аноним 11/01/21 Пнд 20:42:56 23755156457
>>237546950
Не перехватывай, а создай свой hdc. Там же в hrlp ясно сказано, про свойства hdc, которыe нужны для работы этой функции.
Аноним 11/01/21 Пнд 20:43:21 23755159558
>>237551479
пока ты это делаешь старых устройств совсем не останется
у меня некро Asus EEE 2012 года, так на нем ogl 3.0

так что не еби мозгу и пиши сразу на нормальном, один посох пока пишешь уже все на вулкане будет
Аноним 11/01/21 Пнд 20:44:10 23755164059
>>237551505
> мимо Java-боярин
сборщики мусора подползли
Аноним # OP 11/01/21 Пнд 20:44:49 23755168460
>>237551595
При чем тут устройства. Я делаю оверлей для Java Minecraft и хочу чтобы работало с самой первой альфа версии по самую новую. Мой вопрос не в том как рисовать, а почему мерцает.
Аноним 11/01/21 Пнд 20:47:12 23755181961
>>237551684
а причем тут альфа майна.. пиздос..
ты лучше найди чела, который этот майн сможет запустить на устройствах старее 2010 года
мерцает - буферизация нужна уже выше тебе несколько анонов отписали (двойная или тройная - на твой ебаный вкус)
Аноним 11/01/21 Пнд 20:47:38 23755185462
>>237551437
Ну видно что в некоторых отдельных кадрах просто не рисуется, а так работает же вроде.
Хуй знает короче.
Аноним # OP 11/01/21 Пнд 20:49:35 23755199763
>>237551819
При чем тут двойная буферизация? Мой оверлей рисуется к ЛЮБОМУ кадру. Если в игре двойная буферизация значит он будет рисоваться и там и там. Это не я должен реализовывать. Да и если бы проблема была в этом, он мерцал бы КАЖДЫЙ ВТОРОЙ кадр.
Аноним # OP 11/01/21 Пнд 20:50:03 23755202564
>>237551854
Спасибо что попытался помочь анон :(
Аноним 11/01/21 Пнд 20:51:25 23755211465
>>237551997
ой бля.. ну и куда ты полез с такими познаниями..
твой майн тебе генерит кадр, твоя блядская прога генерит кадр, а чтобы итоговый кадр не мерцал, то тебе надо первые два мерджить в один буфер сначала, а потом уже на новом контексте выводить
11/01/21 Пнд 20:52:50 23755220266
сажи говнокодеру-читсофтеру
Аноним # OP 11/01/21 Пнд 20:53:46 23755225367
Аноним 11/01/21 Пнд 20:55:07 23755235368
>>237539984 (OP)
анон, если один прямоугольник мерцает , то добавть строк чтоб на одном месте мерцало больше прямоугольников.
Аноним # OP 11/01/21 Пнд 20:55:58 23755241769
>>237552114
И почему он мерцает так редко? По идее ведь должен постоянно тогда.
Аноним # OP 11/01/21 Пнд 20:56:21 23755244470
Аноним 11/01/21 Пнд 20:56:53 23755248871
>>237552417
потому что твой шоколадный глаз не всегда попадает с частотой мерцания
Аноним # OP 11/01/21 Пнд 21:00:34 23755274272
Бамп
Аноним 11/01/21 Пнд 21:00:40 23755274773
майнкрафт-кун, ты? какой месяц идет? с октября-ноября ты свои треды тут создаешь.
ты сам хоть что-то будешь писать? пакеты ему "зашифрованы", окна мерцают.

из тебя программист, как из двачера человек.
нахуй ты свой велосипед изобретаешь, если читов жопой жуй. а с твоими мозгами ты кроме как килауру на ближайших существ сможешь написать, и то каждый античитит, даже говеный, задетектит твою хунту.


ты изначально выбрал не тот путь - взял бы и инжектил свое жвм оливье прямо в minecraft.jar и сидел бы довольный
Аноним 11/01/21 Пнд 21:02:12 23755285974
Аноним 11/01/21 Пнд 21:07:00 23755315475
16098451185880.jpg 11Кб, 245x246
245x246
>>237539984 (OP)
У тебя второй буферок пустой, а ты их свапаешь с буфером с прямоугольником туда-сюда как угорелый, вот и мерцает. Нужно, чтоб во всех буферках у тебя что-то было.
Аноним # OP 11/01/21 Пнд 21:08:49 23755326376
>>237552747
> майнкрафт-кун, ты?
Я

> пакеты ему "зашифрованы"
Да, зашифрованы. Как оказалось там RSA шифрование с каким-то костылём, при котором каждый новый пакет тех же данных содержит совершенно другие байты.

> взял бы и инжектил свое жвм
Подгружать свою JVM? Что? При чём тут это? Minecraft работает на JVM и она сама уже подгружена. Зачем делать это второй раз? Повторюсь, то как обычно делают читы для этой игры я прекрасно знаю.
Аноним # OP 11/01/21 Пнд 21:11:28 23755343777
>>237553154
По идее мерцать постоянно должно. Можно ли как то твою теорию проверить? Как сделать так как ты сказал?
Аноним 11/01/21 Пнд 21:14:25 23755361378
>>237553263
>да зашифрованы
про encryption и на wiki.vg написано. ты прекрасно знаешь, что я про то, что ты дампил байты и бугуртил с того, что там нечитаемая информация
>подгружать свою JVM?
Нет. Засунуть в minecraft.jar свое никому нинужное говноподелие.
>Как обычно делают читы я прекрасно знаю
нет. /thread
Аноним 11/01/21 Пнд 21:14:52 23755364379
>>237551640
Дай доесть спокойно, чё бухтишь.
Аноним 11/01/21 Пнд 21:16:54 23755376880
687474703a2f2f6[...].gif 1917Кб, 412x327
412x327
Аноним 11/01/21 Пнд 21:18:14 23755385081
Аноним 11/01/21 Пнд 21:18:31 23755386582
Аноним 11/01/21 Пнд 21:18:52 23755388883
>>237551640
За нас это делает GC, это же вы это делаете ручками, хо-хо-хо
Аноним # OP 11/01/21 Пнд 21:23:39 23755419384
>>237553613
> я про то, что ты дампил байты и бугуртил с того, что там нечитаемая информация
Я не знал как правильно перевести массив char в нужный мне вид. До создания вопроса здесь, я неоднократно искал то как можно это сделать, находил только std::hex но оно не работало правильно. Видимо мне не повезло.

> Засунуть в minecraft.jar свое никому нинужное говноподелие
Это самый идиотский способ делать читы из всех что я знаю.

> нет
Да. Можно подгрузить Java класс чита через функцию DefineClass из JVM (или JNI, точно не помню) а можно вовсе вызывать Minecraft функции при помощи JNI. И это только то что я смог назвать с ходу.

Если я делаю что-то, значит я считаю нужным это делать. Твой выбор здесь либо помогать, либо пролистывать тред.
Аноним 11/01/21 Пнд 21:24:51 23755427885
>>237553888
за нас это делает STL
new\delete в плюсах ручками почти никто не делает лет 10
Аноним 11/01/21 Пнд 21:26:31 23755436286
Аноним # OP 11/01/21 Пнд 21:28:17 23755446487
>>237554362
> Нужный вид - это какой?
Изначально там был массив char и я бугуртил именно из-за того что выводятся всякие символы-закорючки, тогда как ожидал видеть байты типа "0x41" и так далее. Как только мне подсказали как перевести это в такой вид я больше не бугуртил. Ты что-то путаешь.
Аноним 11/01/21 Пнд 21:30:26 23755461888
зачем тебе OpenGl чел... тебе выучить нечего...
Аноним # OP 11/01/21 Пнд 21:32:36 23755475789
Аноны, пожалуйста, помогите решить проблему с мерцанием.. Вот видео >>237551437
Аноним 11/01/21 Пнд 21:33:14 23755481590
>>237554193
>Это самый идиотский способ делать читы из всех что я знаю
Тебе как-раз
Аноним 11/01/21 Пнд 21:33:19 23755482091
Аноним 11/01/21 Пнд 21:33:27 23755483092
Аноним 11/01/21 Пнд 21:36:57 23755505693
16043169102120.jpg 141Кб, 779x784
779x784
Аноним # OP 11/01/21 Пнд 21:46:13 23755571894
16103868638670.mp4 5498Кб, 1280x720, 00:00:18
1280x720
Аноним # OP 11/01/21 Пнд 21:47:00 23755575495
>>237554830
Несколько разных. Не хочу говорить. Одна будет бесплатная для любой версии. Не чит.
Аноним # OP 11/01/21 Пнд 21:47:28 23755578896
>>237554830
Другие просто для себя.
Аноним # OP 11/01/21 Пнд 21:49:16 23755592497
Бамп
Аноним # OP 11/01/21 Пнд 21:52:42 23755616898
Бамп
Аноним # OP 11/01/21 Пнд 21:55:38 23755635399
Бамп
Аноним # OP 11/01/21 Пнд 21:57:40 237556507100
Бамп
Аноним # OP 11/01/21 Пнд 21:59:30 237556623101
Бамп
Аноним # OP 11/01/21 Пнд 22:01:23 237556739102
Бамп
Аноним 11/01/21 Пнд 22:03:42 237556872103
бамп. хороший тред
Аноним # OP 11/01/21 Пнд 22:03:58 237556886104
Бамп
11/01/21 Пнд 22:05:58 237557015105
>>237539984 (OP)
снегурочка ты долбоеб - не создавай свой контекст и не делай текущим - тебе нужно рисовать на чужом контексте
поэтому у тебя и мерцает - ты раком опенгл ставить пытаешься впаривая в DC свой контекст - у тебя че блять как два контекста на одном окне рисовать будут? ты еблан? яхуею
убери весь код нахуй

должно быть
BOOL WINAPI Swapbuffers(HDC dc) {
// do your shit here
// ясен посох ты тут должен пушнуть атрибуты и стейты, сделать свое рисование и вернуть все взад (хотя это может быть и не обязательно если приложение все перевыставляет в начале кадра)
retyrn oldSwapBuffers(dc);
}
Аноним # OP 11/01/21 Пнд 22:08:11 237557159106
>>237557015
Я уже пробовал так делать.

BOOL WINAPI __SwapBuffers(HDC hDC)
{
glBegin(GL_QUADS);
glVertex3f(0.0, 0.5, 1);
glVertex3f(0.0, 1.0, 1);
glVertex3f(0.5, 1.0, 1);
glVertex3f(0.5, 0.5, 1);
glEnd();

return _SwapBuffers(hDC);
}

Вообще ничего не рисуется.
Аноним # OP 11/01/21 Пнд 22:10:16 237557304107
>>237557015
> ты долбоеб
> ты раком опенгл ставить пытаешься
> ты еблан?

Скажи это другим людям которые делают таким же образом. Я достаточно часто встречал подобную реализацию когда искал как сделать оверлей. Нужно делать через второй контекст.
Аноним # OP 11/01/21 Пнд 22:10:58 237557350108
>>237557159
> Вообще ничего не рисуется
Ничего в плане из моего. Игра как работала так и работает.
11/01/21 Пнд 22:14:13 237557541109
>>237557159
ты вообще представляешь как работает опенгл?
исходное приложение имеет состояние:
- шейдер, матрицы проекции, модели
поэтому ТАК прямо нарисовать ты не можешь
нужно - glUseProgram(0); если используется шейдер в оригинале
нужно glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(...)
унжно glMatrixMode(GL_MODELVIEW); glLoadIdentity();
и вот ТОГДА ты можешь делать glBegin(GL_QUADS);
если проекция -1 1 -1 1 то твой 0-0.5 квад
если проекция по размеру вьюпорта то квад в пикселах окна должен быть
- может быть установлена текстура, поэтому glDisable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, 0); // или как там не помню
- может быть включен тест глубины поэтому квад не будет виден тк он глубже чем сцена: glDisable(GL_DEPTH_TEST); или кка ваирант сделать glClear(GL_DEPTH_BUFFER_BIT);

>>237557304
а я реализовывал оверлей и вообще знаю опенгл и не знаю таких долбоебов которые на одном DC разными контекстами рисуют
Аноним # OP 11/01/21 Пнд 22:14:19 237557545110
Бамп
Аноним # OP 11/01/21 Пнд 22:15:50 237557637111
>>237557541
Если я сделаю как ты говоришь, мерцания не будет?
Аноним 11/01/21 Пнд 22:17:06 237557725112
11/01/21 Пнд 22:18:05 237557795113
>>237557637
нет конечно ничего не будет мерцать - ты будешь рисовать в контексте самого приложения - в конце рендеринга их кадра, тебе так же будут доступны все их ресурсы, текстуры и тп
минус лишь в том что у них настроен стейт опенгл, который желательно сохранять чтобы ничего не сломать, делать свои грязные делишки и восстанавливать все на место

>>237557725
>>237553154
эти не понимают о чем говорят
Аноним 11/01/21 Пнд 22:20:34 237557969114
>>237551505 и что, боярин, как бы ты решил задачу ОПа на Жаве?
Аноним 11/01/21 Пнд 22:22:06 237558092115
>>237552114 вот это похоже на правду
Аноним # OP 11/01/21 Пнд 22:23:12 237558177116
>>237557795
Можешь пожалуйста не уходить с треда? Я мало что понимаю, но хочу попробовать сделать как ты говорил.
Аноним 11/01/21 Пнд 22:25:28 237558360117
Аноним # OP 11/01/21 Пнд 22:27:44 237558536118
>>237557541
Можешь немного подробнее написать как проверить что использовалось перед вызовом SwapBuffers и как использовать Ortho (и зачем оно вообще) ? Пожалуйста.
Аноним 11/01/21 Пнд 22:33:00 237558888119
Аноним # OP 11/01/21 Пнд 22:33:05 237558898120
Бамп
Аноним 11/01/21 Пнд 22:35:53 237559103121
>>237558536
>проверить что использовалось перед вызовом SwapBuffers
особо не получится, если только взять профайлер типа gDEBugger - он запишет опенгл вызовы и ты узнаешь - используются там шейдеры или нет
но вообще обычно там типичные штуки и тебе нужно
- отключить чужие шейдеры: glUseProgram(0);
- отключить буфер глубины чтобы рисовать поверх кадра glDisable(GL_DEPTH_TEST);
- отключить текстуры glDisable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, 0);
> как использовать Ortho (и зачем оно вообще)
орто - ставит ортографическую проекцию, обычно используют чтобы рисовать в пикселах окна, но в теории можно единичную поставить и тогда будешь рисовать в диапазоне координат -1;1 (если не ошибаюсь, если ошибаюсь - в 0;1
т.е.
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); // единичная
glOrtho(0, 320, 0, 240); // сделает будто в окне рисуешь в координатах до 320х240 (хотя окно может быть 1920х1080 на деле, т.е. координата 320 будет рисоваться в точке 1920)
glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); // единичная - если разрабы ставили перед этим другую - это было положение камеры и объекта в кадре, а так ты сбросил и будешь рисовать где надо
// вот тут уже делаешь свои квады

сагу убрал
Аноним 11/01/21 Пнд 22:35:56 237559109122
>>237558898
что за программу делаешь?
Аноним # OP 11/01/21 Пнд 22:46:24 237559829123
image.png 17Кб, 286x302
286x302
>>237559103
Все текстуры стали белыми, но квадрат не нарисовался. Может я что-то не так сделал?
Аноним # OP 11/01/21 Пнд 22:47:09 237559884124
>>237559103
>glUseProgram(0)
У меня в GL.h вообще не нашло..
Аноним 11/01/21 Пнд 22:53:00 237560315125
>>237559829
все стало белыми в майнкрафте тк ты же выключил текстуры чтобы нарисовать свой квадрат, в конце - просто включи их обратно так же как тест глубины включил glEnable(GL_TEXTURE_2D);

237559103 (You)
>У меня в GL.h вообще не нашло..
glUseProgram - это расширения, есть в glext.h, можешь оттуда скопировать только объявление PFNGLUSEPROGRAM и объявить у себя
PFNGLUSEPROGRAMPROC glUseProgram = 0;

в кадре:
if(glUseProgram == 0)
glUseProgram = GetProcAddress("glUseProgram");

но если в майнкрафте шейдеры - тебе скореев сего нужно получить вначале текущий шейдер чтобы потом его вернуть в конце
т.е в конце перед свапом еще
glGet(GL_CURRENT_PROGRAM,...);
а потом glUseProgram(oldProgram);
Аноним 11/01/21 Пнд 22:54:16 237560405126
>>237560315
ну ты его и загрузил
там еще вероятно атрибуты надо будет тоже
Аноним # OP 11/01/21 Пнд 22:54:16 237560406127
>>237560315
Но ведь по идее прямоугольник нарисоваться должен был. Или он мог не нарисоваться из-за шейдеров?
Аноним 11/01/21 Пнд 22:54:26 237560423128
>>237560315
т.е. glget(current_program) - вначале перед gluseprogram(0), а в конце перед свапом - gluseprogram(old);
Аноним 11/01/21 Пнд 22:54:57 237560464129
>>237560406
все рисуется шейдерами сто лет уже
Аноним 11/01/21 Пнд 22:55:13 237560489130
>>237560406
если все белое и он белый ты его увидишь? или там не все белое? ну сделай glColor3f(1,0,0); перед квадом, а в конце верни glColor3f(1,1,1);
Аноним 11/01/21 Пнд 22:56:02 237560550131
>>237560464
ну там ничто не мешает легаси дергать - оно тоже работает, в драйверах обвязка под легаси в виде шейдеров
Аноним # OP 11/01/21 Пнд 22:56:56 237560606132
>>237560489
Увижу так как он рисуется у меня вверху. Белое все кроме неба.
Аноним 11/01/21 Пнд 22:58:18 237560698133
>>237560405
атрибуты надо , но в теории можно базовые вещи дернуть

ОПУ:
>>237560406
а так да - можно атрибутами автоматом возвращать тест глубины и остального что ты изменил при рисовании своей шуки:
glPushAttrib(GL_ALL_ATTRIB_BITS); // запомнит установленные текстуры и прочее
// твой код который может их сбросить
glPopAttrib(); // вернет
// swapbuffers
Аноним 11/01/21 Пнд 22:58:33 237560720134
>>237560315
ты заебал. я ему выше ссылку на книгу скинул, пусть читает.
Аноним 11/01/21 Пнд 22:59:16 237560762135
>>237560720
боишься что работу твою отнимет? ))
Аноним # OP 11/01/21 Пнд 23:01:14 237560916136
image.png 18Кб, 317x325
317x325
>>237560698
Я сделал вот так но он всё равно не рисуется. Хотя текстуры уже нормальные..
Аноним 11/01/21 Пнд 23:02:59 237561038137
>>237560916
в теории ты все делаешь вроде правильно, но не отключаешь шейдер через gluseprogram(0);
если он включен - то задание проекций может не иметь эффекта и глючить, с другой стороны - не понятно как раньше у тебя оно рисовалось
ps возможно даже с несколькими контектстами бы должно работать, но такой вариант проблемней обсуждать тк там могут потоки влиять или свапбуфер у каждого свой - я хз
Аноним 11/01/21 Пнд 23:03:47 237561086138
>>237560916
а ну правильно - третью координату 0 поставь, иначе ты за камерой рисуешь или клипает по глубине единичной проекции
Аноним 11/01/21 Пнд 23:04:22 237561124139
>>237560762
ты покурил что ли? такие как он не умеют мсдн читать (да-да, я тот анон который ему с перехватом трафика помогал) и документацию по огл. для огл надо вообще линал немного знать и понимать как вся эта требуха матричная работает. я ему наооброт пытаюсь подсказать что делать, а он как обезьянка с форумов код копипастит без понимания.
Аноним # OP 11/01/21 Пнд 23:07:35 237561344140
>>237561086
Не помогло.

>>237561038
Сейчас попробую отключить шейдеры.

>>237561124
Ого, это ты? Спасибо тебе большое. Насчёт msdn, ты прав, мне почему-то это трудно даётся. Мне намного легче копипастить и вручную перебирать чем пытаться читать. Это не лень. Я не знаю почему. Может я тупой просто..

Абу благословил этот пост.
Аноним 11/01/21 Пнд 23:09:36 237561482141
>>237561344
> Может я тупой просто..
> дед мороз благословил этот пост.
Аноним 11/01/21 Пнд 23:11:28 237561594142
>>237554618 а что такое... нормальный OpenGL... рисовать-то надо.................
Аноним # OP 11/01/21 Пнд 23:14:36 237561779143
image.png 39Кб, 801x495
801x495
Сделал вот так. Сейчас буду тестировать.
Аноним # OP 11/01/21 Пнд 23:15:54 237561859144
Аноним 11/01/21 Пнд 23:17:09 237561942145
>>237561779
а зачем тебе L перед именем либы? там вайд чар что ли требуют?
Аноним # OP 11/01/21 Пнд 23:18:19 237562011146
>>237561942
Да.

Я посмотрел, в OpenGL32.dll нету функции glUseProgram..
Аноним 11/01/21 Пнд 23:18:20 237562012147
>>237561859
у меня больше идей нет, вроде все верно делаешь
ну можешь еще вернуть установку glViewport и пробовать выставить орто вот так:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1, 1, 1, -1, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
Аноним 11/01/21 Пнд 23:18:47 237562038148
Аноним # OP 11/01/21 Пнд 23:19:45 237562090149
>>237562012
В opengl32.dll нету функции glUseProgram. Может быть ещё какая-то штука есть для этих ваших шейдеров?..
Аноним 11/01/21 Пнд 23:21:12 237562174150
gl.png 9Кб, 542x234
542x234
Аноним 11/01/21 Пнд 23:21:14 237562179151
>>237562011
>>237562090
если бы функции не было - у тебя вернулся бы 0 и приложение падало - раз не падает значит адрес вернулся и функция вызывается, но все же попробуй
glUseProgram = (PFNGLUSEPROGRAMPROC)wglGetProcAddress("glUseProgram");

в opengl32.dll вообще нихера нет это ICD и там опенгл 1.1 функции-заглушки
Аноним 11/01/21 Пнд 23:31:48 237562843152
>>237562179
> если бы функции не было - у тебя вернулся бы 0 и приложение падало

Стало падать. Может я дебил и забыл пересобрать, но я имею привычку постоянно тыкать на пересборку.. Сомневаюсь что я забыл в тот раз это сделать. 2 раза уже крашился процесс.
Аноним 11/01/21 Пнд 23:32:33 237562889153
>>237562179
Под стало падать я имею ввиду тот код где просто GetProcAddress а не тот который на скриншоте выше.
Аноним 11/01/21 Пнд 23:34:27 237563017154
>>237562012
ААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААА ПАЛУЧЕЛАССССССССССССССССССССС!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ОРТХО СПАС!!!!
Аноним 11/01/21 Пнд 23:36:22 237563123155
БОЖЕ МОЙ КАК Я РАД Я С ЭТИМ 4 ДНЯ СИДЕЛ КАКОЙ ЖЕ Я ТУПОЙ СПАСИБО БОЛЬШОЕ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Аноним 11/01/21 Пнд 23:37:52 237563207156
>>237562012
Я могу тебя как-то отблагодарить анон? Я бомж но может как-то помочь могу..
Аноним 11/01/21 Пнд 23:39:57 237563323157
Оп, а зачем так пердолиться? Все же давно через MinecraftForge гуи модифицируют, там любой оверлей делается через MinecraftForge.EVENT_BUS.register(твой кастомный обработчик с определённым preRenderOverlay)
Аноним 11/01/21 Пнд 23:40:53 237563360158
>>237563207
рад за тебя, ничего не надо
может побыдлокодишь-покопипастишь, станет интересно - станешь крутым погромистом 300к\нс
Аноним 11/01/21 Пнд 23:40:58 237563364159
>>237539984 (OP)
Знаю в чем проблема. "Мерцает" это что? Его небось не видно половину кадров? FPS понизь до 1-2 кадров в секунду и посмотри, сразу увидишь что происходит.

Подобные проблемы возникают чае потому что архитектурно неправильно строят код, т.к. не понимают что происходит при вызове той или иной функции или в том или ином месте.

Работать должно так:
Swapbuffers обменивает местами front и back буфер. И происходить это должно ровно один раз на кадр. Прямоугольник и вся графика рисуется в текущем буфере (текущий - back, отображается front). И дело скорее всего в том что прямоугольник ты рисуешь, а потом насильно зачем-то зовешь swapbuffers, принудительно меняя буферы. При этом скорее всего swapbuffers уже (может быть) вызывается откуда-то. Так прямоугольник у тебя всегда оказывается только в одном буфере, а должен по-очереди, то в первом, то во втором.
Аноним 11/01/21 Пнд 23:41:48 237563415160
>>237563323
Не везде есть доступ к форджу а вот SwapBuffers универсальный и работает на любой версии Minecraft, на любом проекте модовых / не модовых
Аноним 11/01/21 Пнд 23:42:47 237563469161
>>237563360
Боже спасибо еще раз ты даже не представляешь насколько я рад ты не только помог с мерцанием но и избавил меня от второго контекста который мог отнимать ФПС
Аноним 11/01/21 Пнд 23:45:26 237563616162
Настройки X
Ответить в тред X
15000
Макс объем: 20Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
X
Ваш шидевор X
Стикеры X
Избранное / Топ тредов