Аноны, нужна помощь. Пытаюсь сделать оверлей для игры при помощи перехвата WinAPI функции SwapBuffers. Затем создаю свой контекст, переключаюсь на него, рисую прямоугольник, переключаюсь на контекст игры и вызываю оригинальную функцию SwapBuffers. Прямоугольник появляется и всё бы ничего, но он мерцает. Я мог бы сказать что слабо разбираюсь в OpenGL но это будет враньё. Я вообще в нём не разбираюсь. Но мне позарез нужно устранить эту проблему. Я уже пытался гуглить, пытался отключать проверку глубины, но ничего не получилось. Он всё так же мерцает. Помогите пожалуйста. :(
>>237458026 Чаю этому. Только надо идти на англоязычный стак сразу, там комьюнити адекватнее. Плюс ещё можешь канал в слаще поискать тематический. Здесь тебе максимум в ротик пососать смогут
>>237458026 Я уже там был. Сказал же, я уже пытался искать и пытался спрашивать. На RU версии stackoverflow 30 просмотров и 0 ответов. На EN 2 ответа но мне там мало что понятно. Я пытался конечно воссоздать то что там советовали, но он всё так же мерцал.
>>237458198 И про мало что понятно я имею ввиду не "код который мне дали как пример" а то что там словами написали "сделай так" и "так" а как это делать я в душе не ебу.
>>237458433 Я частично смог. Там посоветовали использовать для рисования функции где есть "Z" параметр который нужно установить в 1. А так же "Не забудьте отключить проверку глубины при визуализации 2D в пространстве экрана и сбросе матрицы просмотра модели". Вот это я не понял. Перед рисованием отключил glDisable(GL_DEPTH_TEST) а вот при каком сбросе матрицы он я без понятия. У меня больше никакого кода кроме этого нет.
Сам седня только начал в опенгл вкатываться хо-хо-хо. Хз по сабжу ли решение, но вычитал про то, что чтоб не мерцало, нужна двойная буферизация. Как оно работает не скажу, так что гугол в помощь. А вообще, с такими вопросами в стек или /pr/.
>>237457788 (OP) Пиздец говнокод, я просто в ахуе. Это, кстати, типичное последствие повсеместного обучения ПИТОНУ. Дебилов на курсах от cumbrain учат клавиши тыцкать, а элементарным общепринятым практикам не учат. Пиздос, лет десять назад никто бы даже не поверил, что такой код без рофлов реально написал программист С++, не являющийся индусом.
>>237462293 Может быть, но скорее всего нет. У моего знакомого мерцания нет. Возможно это как-то связано с тем что у меня AMD. Я когда-то встречал человека который делал подобное и у него мерцаний не было, а у меня были. Потом он что-то поменял и они исчезли даже у меня.
>>237462445 Нет. __SwapBuffers это моя функция перехватчик, _SwapBuffers это оригинальная функция. Если бы там было написано SwapBuffers, тогда была бы рекурсия.
>>237462508 Здесь нет рекурсии. Смотри ответ выше.
>>237462855 >>237463579 Эта проверка ни коем образом не влияет на мерцание. Так наиболее удобно создавать контекст. Иначе придётся писать код на поиск нужного hDC (а это не просто) чтобы передать его в wglCreateContext()
>>237464283 Мне перепечатывать этот высер больной собаки, не пойму? Ладно. >if (!context) >glViewport(viewport[0]... >нахуй не нужный вообще BOOL Про именование вообще молчу. Мда.
Бля, анонче, я не спал два дня, щяс вот лягу скоро, прочитал тред по диагонали. Вообще не вдупляю что там у тебя твориться, но вроде увидел слово мерцание, это вообще артефакты ппоходу. Код кинь, если не сдохну щяс то гляну
>>237465587 Еще раз спрашиваю где конкретно ты увидел говнокод? Ты не разбираешься в OpenGL. Ты даже не попытался загуглить что за функции я здесь вызвал и почему я вызвал их именно здесь.
1. Не вижу здесь говнокода. Если ты знаешь как можно сделать лучше — напиши. Но я сомневаюсь что ты это сделаешь, поскольку по другому НИКАК. Нужно создать свой контекст и на нём рисовать. Создать его можно ТОЛЬКО В ЭТОЙ ФУНКЦИИ иначе ты не получишь hDC который использует игра.
2. Что здесь не так? Я получил размеры оригинального контекста игры и установил такие же размеры для своего контекста. Претензии к тому что это массив? Так это уже к OpenGL. glGetIntegerv вместе с GL_VIEWPORT.. требует чтобы был указан массив в который будет записан x, y, width и heigth.
3. Функция-перехватчик должна возвращать такое же значение и такие же параметры как и у оригинальной функции.
Дегенерат который никогда не делал ничего подобного пытается лезть и учить кого-то другого, при этом оскорбляя код.
>>237464080 >=> тысяча макак делает тупую говнятину Низкий порог входа это плохо? Для исполнителя возможно, так как выше конкуренция, но чем это плохо для заказчика?
>>237467330 >>237466891 Как я уже писал "У моего знакомого мерцания нет. Возможно это как-то связано с тем что у меня AMD. Я когда-то встречал человека который делал подобное и у него мерцаний не было, а у меня были. Потом он что-то поменял и они исчезли даже у меня". Вот мне нужно это "что-то" и у себя сделать.
Помню что opengl прорисовывает картинку с левого нижнего пекселя в противоположный угол. Из за этого могут быть артефакты рендеринга, мегания думаю у ним можно отнести. Тебе нужно включить двойную буферизацию, погугли это.
Вообще могу ошибаться и не понять текста, т.к. про двойную буферизацию пишут во всех статьях для начинающих на опенгл, уж это ты должен был читать
>>237469304 Ты же понимаешь что если я просто верну TRUE без вызова оригинальной функции то оригинальные инструкции не выполнятся и кадры никогда не будут меняться?
>>237470202 Алсо, зачем ты делаешь старый контекст - текущем? wglMakeCurrent(hDC, oldContext); должно быть wglMakeCurrent(hDC, context); и эта инструкция должны быть одна перед return.
>>237469922 SwapBuffers и переключение контекста в котором ты что-то будешь рисовать / настраивать это разное.
>>237470202 Здесь я выбрал контекст в котором буду рисовать.
>>237471332 Вначале я делаю текущим свой, чтобы нарисовать в нём то что мне нужно. Затем выбираю контекст игры чтобы она рисовала в своём контексте. Мой контекст будет поверх контекста игры.
>>237457788 (OP) Я бы поковырял код, если бы в среде был. Интересно зачем вообще перерисовывать пытаешься на каждом шаге, один раз если отрисовать не помагает?
>>237457788 (OP) вообще, по моему, изменять контекст на каждом свапбуфер не очень умно, потому-что перформанс должен упасть, что может объяснить мерцания? но опять, это мои 5 копеек, возможно даже не правильные